keysharp-org/keysharp-desktop

Desktop automation broker for Linux

C

0

107 commits

updated Oct 8, 2026

See the code

See what people are saying

SourceMessageScoreDate

Keysharp (r/linux)

Hello, I’m one of the developers of [Keysharp](https://github.com/keysharp-org/Keysharp), an open-source implementation of AutoHotkey v2 for Linux, Windows and macOS. It’s written in C# and runs on .NET 10. It supports hotkeys, text expansion, keyboard and mouse automation, window management,…

8

Oct 10, 2026

README

keysharp-desktop

A Linux desktop automation service and C library for capture, window inspection and control, clipboard access and compositor pointer operations. Applications use libkeysharp-desktop.so.1; available operations depend on the active compositor.

Install

Download your architecture's release from GitHub Releases. On Debian or Ubuntu:

sudo apt install ./keysharp-desktop_<version>_<arch>.deb

Other systemd distributions can extract the release archive and run sudo ./install.sh. It checks and installs missing runtime dependencies before installing the services. On GNOME or Cinnamon, the session service configures the bundled extension once for each user and desktop, during startup or provider reconciliation. Switching from Cinnamon to GNOME sets up GNOME separately; a later manual disable remains in effect. If the provider needs repair, run keysharp-desktop enable-extension as your graphical user and log out if requested. See installation for source builds, updates and removal.

Use it

cc examples/list-windows.c $(pkg-config --cflags --libs keysharp-desktop) -o list-windows

Or link KeysharpDesktop::client after find_package(KeysharpDesktop 1.0 CONFIG REQUIRED). Complete examples demonstrate listing windows and capturing an area. Running them can request permission.

Initialize public structures with their ksd_*_init functions, release owned results with ksd_*_clear, and use one connection from one thread at a time. Read info.available_operations before calling compositor operations; connecting without requested scopes does not open a permission dialog. The integration guide documents status handling, capabilities and buffer ownership.

Platform support

BackendIntegration
X11Native XCB window, clipboard, capture and pointer operations
GNOME / CinnamonBundled compositor extension
KWin / Plasma WaylandBundled KWin script and capture worker
Other Wayland compositorsAdvertised standard, wlroots or COSMIC protocols; Hyprland IPC and screenshot portal where available

Exact capabilities are discovered at runtime. Window fields that the compositor cannot supply are absent. See platform support for operation coverage and capture formats. Relative pointer movement, buttons and scrolling are compatibility fallbacks; applications using keysharp-input should send those there.

Permissions

The system authority authenticates callers and holds permanent grants. A new executable identity requests its scopes through polkit; updated executable content needs a new grant. Input Control is shared with the system keysharp-input service, so granting or revoking it affects both. Permission details explain individual scopes and revocation.

A user installation is also available. Its consent records are user-owned, cannot enforce isolation against same-user programs, and do not share grants with system services. See security for the threat model and reporting vulnerabilities.

Diagnose

keysharp-desktop info
keysharp-desktop probe
systemctl --user status keysharp-desktop.service

info reads local version/ABI metadata. Run probe as your graphical user to inspect the backend and advertised operations. Repair instructions cover missing extensions, disabled units and incomplete installations. Manage grants with keysharp-desktop permissions list and keysharp-desktop permissions revoke.

Project and distribution

This project releases independently of Keysharp. Applications use its public C ABI; the socket protocol is private. The Debian capability keysharp-desktop-client-abi-1 identifies the ABI, with its provided version recording the ABI major and minor. Applications should require or recommend the needed minor according to whether desktop features are optional, and leave the shared service installed on removal.

MIT licensed.

keysharp-org/keysharp-desktop

Desktop automation broker for Linux

C

0

107 commits

updated Oct 8, 2026

See the code

See what people are saying

SourceMessageScoreDate

Keysharp (r/linux)

Hello, I’m one of the developers of [Keysharp](https://github.com/keysharp-org/Keysharp), an open-source implementation of AutoHotkey v2 for Linux, Windows and macOS. It’s written in C# and runs on .NET 10. It supports hotkeys, text expansion, keyboard and mouse automation, window management,…

8

Oct 10, 2026

README

keysharp-desktop

A Linux desktop automation service and C library for capture, window inspection and control, clipboard access and compositor pointer operations. Applications use libkeysharp-desktop.so.1; available operations depend on the active compositor.

Install

Download your architecture's release from GitHub Releases. On Debian or Ubuntu:

sudo apt install ./keysharp-desktop_<version>_<arch>.deb

Other systemd distributions can extract the release archive and run sudo ./install.sh. It checks and installs missing runtime dependencies before installing the services. On GNOME or Cinnamon, the session service configures the bundled extension once for each user and desktop, during startup or provider reconciliation. Switching from Cinnamon to GNOME sets up GNOME separately; a later manual disable remains in effect. If the provider needs repair, run keysharp-desktop enable-extension as your graphical user and log out if requested. See installation for source builds, updates and removal.

Use it

cc examples/list-windows.c $(pkg-config --cflags --libs keysharp-desktop) -o list-windows

Or link KeysharpDesktop::client after find_package(KeysharpDesktop 1.0 CONFIG REQUIRED). Complete examples demonstrate listing windows and capturing an area. Running them can request permission.

Initialize public structures with their ksd_*_init functions, release owned results with ksd_*_clear, and use one connection from one thread at a time. Read info.available_operations before calling compositor operations; connecting without requested scopes does not open a permission dialog. The integration guide documents status handling, capabilities and buffer ownership.

Platform support

BackendIntegration
X11Native XCB window, clipboard, capture and pointer operations
GNOME / CinnamonBundled compositor extension
KWin / Plasma WaylandBundled KWin script and capture worker
Other Wayland compositorsAdvertised standard, wlroots or COSMIC protocols; Hyprland IPC and screenshot portal where available

Exact capabilities are discovered at runtime. Window fields that the compositor cannot supply are absent. See platform support for operation coverage and capture formats. Relative pointer movement, buttons and scrolling are compatibility fallbacks; applications using keysharp-input should send those there.

Permissions

The system authority authenticates callers and holds permanent grants. A new executable identity requests its scopes through polkit; updated executable content needs a new grant. Input Control is shared with the system keysharp-input service, so granting or revoking it affects both. Permission details explain individual scopes and revocation.

A user installation is also available. Its consent records are user-owned, cannot enforce isolation against same-user programs, and do not share grants with system services. See security for the threat model and reporting vulnerabilities.

Diagnose

keysharp-desktop info
keysharp-desktop probe
systemctl --user status keysharp-desktop.service

info reads local version/ABI metadata. Run probe as your graphical user to inspect the backend and advertised operations. Repair instructions cover missing extensions, disabled units and incomplete installations. Manage grants with keysharp-desktop permissions list and keysharp-desktop permissions revoke.

Project and distribution

This project releases independently of Keysharp. Applications use its public C ABI; the socket protocol is private. The Debian capability keysharp-desktop-client-abi-1 identifies the ABI, with its provided version recording the ABI major and minor. Applications should require or recommend the needed minor according to whether desktop features are optional, and leave the shared service installed on removal.

MIT licensed.