An OSK for Windows and Linux that stays out of your way.
Axidev OSK gives you a clean, always-on-top keyboard overlay you can pop up when you need it and hide when you don't. It works on Windows, KDE Plasma Wayland, wlroots-based compositors like niri and Hyprland, and X11.
- Always-on-top overlay that floats above your other windows
- Hot-corner gesture to quickly show or hide the keyboard
- Real key emission, so it works in any app that accepts keyboard input
- Modifier latching for comfortable one-finger typing
- Runs on Windows, X11, and Wayland
The Linux release carries Axidev OSK, its native input extension, and a static launcher. The host must provide x86_64 Linux, glibc 2.34 or newer, Python 3.10 or newer, PySide6 and Qt from the same 6.7-or-newer release below 7.0, Qt's X11 and Wayland plugins, LayerShellQt, and the normal desktop input libraries.
Fedora:
sudo dnf install python3 python3-pyside6 qt6-qtwayland layer-shell-qt \
libinput systemd-libs libxkbcommon curl tarArch:
sudo pacman -S --needed python pyside6 qt6-wayland layer-shell-qt \
libinput systemd libxkbcommon curl tarDownload and run the lifecycle installer:
curl --fail --location --remote-name \
https://github.com/axide-dev/axidev-osk/releases/latest/download/axidev-osk-install
chmod +x axidev-osk-install
sudo ./axidev-osk-install installThe installer checks the downloaded payload against the release checksum manifest before changing /opt/axidev-osk. This detects a corrupted download but does not authenticate the publisher. Log out and back in after installation if the installer adds you to the uinput group.
The installed lifecycle command supports upgrades, rollback, and removal:
sudo axidev-osk-install upgrade
sudo axidev-osk-install rollback
sudo axidev-osk-install uninstallFor a manual source installation, see packaging/MANUAL_INSTALL.md.
Requirements: Windows 10 or newer, Python 3.10+, and PowerShell 5.1.
powershell.exe -NoProfile -ExecutionPolicy Bypass -Command "irm 'https://github.com/axide-dev/axidev-osk/releases/latest/download/axidev-osk-windows-install.ps1' | iex"The installer downloads the latest release, installs Axidev OSK under
C:\Program Files\Axidev OSK, and adds it to the current user's Start Menu.
Windows asks for UAC approval because the development installer trusts a local
signing certificate and enables UIAccess.
See the Windows install guide for details.
To uninstall:
powershell.exe -NoProfile -ExecutionPolicy Bypass -Command "& ([scriptblock]::Create((irm 'https://github.com/axide-dev/axidev-osk/releases/latest/download/axidev-osk-windows-install.ps1'))) -Uninstall"A production-signed MSI remains planned for public distribution.
Running axidev-osk without arguments starts the keyboard. Passing an argument selects the command line without starting the graphical runtime.
Linux permission commands default to the invoking user. Administrators can prepare another local account with --user NAME.
axidev-osk linux setup-permissions
axidev-osk linux status-permissions
axidev-osk linux remove-permissionsPermission setup creates a dedicated uinput group, installs the udev rule, and adds the selected user. Log out and back in after a new membership is added. Permission removal disables the Axidev OSK rule but preserves the shared group and its memberships.
Linux autostart uses the desktop-session XDG autostart standard. It starts the current visible keyboard after the selected user logs into a graphical desktop.
axidev-osk linux setup-autostart
axidev-osk linux status-autostart
axidev-osk linux remove-autostartLogin-screen startup is separate from user autostart. Axidev OSK supports Plasma Login Manager, greetd, and LightDM.
axidev-osk linux setup-greeter
axidev-osk linux status-greeter
axidev-osk linux remove-greeterThe status commands verify managed integration configuration and, where applicable, uinput access. They do not start Axidev OSK or prove that the keyboard renders or emits key input.
setup-greeter shows an arrow-key menu of installed supported managers. Scripts can select one directly with --manager plasma-login, --manager greetd, or --manager lightdm. Setup checks the selected manager and its current configuration before writing files. It does not restart the display manager, so reboot or restart it after setup.
Plasma Login Manager configures Axidev OSK as KWin's input method for the login manager and session lock screen. Setup also adds an exact marked block to Plasma's lock-screen QML so the password interface remains visible while using the keyboard. On Plasma 6.7, setup adds an Axidev OSK button to the lock screen. From Plasma 6.8, the lock screen's own Virtual Keyboard button opens Axidev OSK. This integration is limited to Plasma versions from 6.7.0 up to, but not including, 7.0.0. LightDM uses its greeter startup hook. The greetd adapter saves and wraps the existing default-session command, starts that command before Axidev OSK, and restores the exact command during removal.
The keyboard retries with exponential backoff while the greeter remains active. A keyboard or display-detection failure never stops the greeter. Failures appear in the system journal under axidev-osk-greeter.
Greeter setup adds the manager's service account to the shared uinput group. Removal preserves that membership, matching the normal permission cleanup policy.
On Windows, replacing osk.exe or another protected system binary is not supported. Future Windows integration should use supported accessibility registration and startup mechanisms.
The overlay works best on compositors that support the layer-shell protocol:
- KDE Plasma Wayland
niriHyprland- other wlroots-based compositors
Moving a layer-shell overlay by its title bar requires the compositor to expose the zwp_relative_pointer_manager_v1 protocol. Without it, the overlay can still run, but interactive title-bar dragging is unavailable.
On GNOME and Mutter, the app does not request layer-shell behavior. It uses the regular Qt window path instead.
The Linux payload uses the host's Qt Wayland and LayerShellQt components. Its launcher checks the Python, PySide6, Qt, platform plugin, and LayerShellQt versions before startup. PySide6 and Qt must have matching major and minor versions.
Without layer-shell support, the compositor can constrain the keyboard to regular application-window behavior. The configured Linux input backend can still emit key events.
Axidev OSK is usable today as a keyboard overlay, but the project is aimed at a modular composition system with multiple windows, reusable grids, and Lua-driven layouts.
What works now:
- the bundled keyboard, built as the default profile: US legends on an ISO-style physical arrangement, latching modifiers, Ghost, Dwell, and hot corners
- profiles that compose several windows from grids, boxes, stacks, buttons, and labels; for now, a profile is changed by editing
src/axidev_osk/python_defaults/ - always-on-top overlay behavior across Windows, X11, and supported Wayland compositors
What's planned:
- Lua profiles, loaded in place of the bundled one and read by the same decoders, replacing the Python ones in
src/axidev_osk/python_defaults/
Changes land through pull requests rather than direct pushes to main. Read AGENTS.md before changing the engine, the standard library, or the default profile, since it explains how they fit together and how to add to each. Setting up a development checkout is covered in packaging/MANUAL_INSTALL.md.
Axidev OSK is licensed under GPLv3. See LICENSE.