A virtual keyboard for GNU/Linux with Wayland support on KDE Plasma, plus GNOME support via Xwayland, and Ctrl, Alt, Tab and Super (Meta/Win) keys.
Wayland-compatible on KDE Plasma; also works on GNOME via Xwayland.
vboard is a lightweight, customizable virtual keyboard designed for Linux desktop systems. It runs as a Wayland-compatible on-screen keyboard on KDE Plasma, and also works on GNOME by falling back to Xwayland. It provides a full on-screen keyboard with modifier keys such as Ctrl, Alt, and Super (Meta/Win), which makes it especially useful for:
- Touchscreen devices without physical keyboards
- Systems with malfunctioning physical keyboards
- Accessibility needs
- Kiosk applications
The keyboard supports customizable colors, opacity settings, and can be easily modified to support different layouts.
- Customizable appearance: Change background color and opacity
- Persistent settings: Configuration is saved between sessions
- Modifier key support: Provide Ctrl, Alt, Tab and Super (Meta/Win) keys
- Desktop compatibility: Native Wayland-friendly behavior on KDE Plasma, with GNOME support via Xwayland fallback
- Hold for repetitive clicks: Keep holding the mouse button to trigger repeated clicks
- Word suggestions: Offers completions from an installed Hunspell dictionary while you type with vboard
- Gesture typing: Swipe across letter keys and vboard will decode the path into a word
- Compact interface: Headerbar with minimal controls to save screen space
- Tray icon support: Keeps vboard running in the background and you can quickly reopen it when needed
- uinput input backend: Injects keys through Linux
uinput
Implementation notes for gesture typing are documented in GESTURE_TYPING.md.
Download the latest .deb from the GitHub Releases page for a lightweight on-screen keyboard with modifier keys such as Ctrl, Alt, Shift, and Super, then install it with:
sudo apt install ./vboard_*.debDO NOT use dpkg. Please use apt. Otherwise, it will not work.
The package post-install step sets up uinput and installs the udev rule needed for desktop-session access to /dev/uinput.
Log out and back in, or reboot, after installation.
You can also use the following PPA in Ubuntu. Run the following commands one by one:
sudo add-apt-repository ppa:apandada1/vboard
sudo apt update
sudo apt install vboardRestart for changes to take effect.
For the latest unreleased changes on Ubuntu and Debian-based systems, use the automated setup script:
git clone https://github.com/archisman-panigrahi/vboard.git
cd vboard
sudo bash setup-ubuntu-debian.shThis script will handle all setup steps including dependency installation, uinput configuration, and system-wide installation. A system restart is recommended after installation.
For Debian/Ubuntu, Fedora, Arch, and other distributions, install the dependencies manually and then build with Meson.
For Debian/Ubuntu-based distributions:
sudo apt install python3-gi python3-gi-cairo gir1.2-gtk-3.0 python3-uinput gir1.2-ayatanaappindicator3-0.1 meson ninja-build --no-install-recommendsOptional for word suggestions:
sudo apt install hunspell-en-usFor Fedora-based distributions:
sudo dnf install python3-gobject python3-cairo gtk3 python3-uinput libappindicator-gtk3 meson ninja-buildOptional for word suggestions:
sudo dnf install hunspell-en-USFor Arch-based distributions:
sudo pacman -S python-gobject gtk3 python-uinput python-cairo libayatana-appindicator meson ninjaOptional for word suggestions:
sudo pacman -S hunspell-en_usgit clone https://github.com/archisman-panigrahi/vboard.git
cd vboardRun once with sudo before Meson install:
sudo bash scripts/setup-uinput.shFor system installs, this also installs a udev rule so your logged-in desktop user can access /dev/uinput. If permissions still do not apply, log out/log in or restart your computer.
Global install:
meson setup builddir --prefix=/usr/local
meson compile -C builddir
sudo meson install -C builddirUser-only install:
meson setup builddir-user --prefix=$HOME/.local
meson compile -C builddir-user
meson install -C builddir-userRestart for changes to take effect. On KDE/Plasma, install hooks automatically create the appropriate KWin window rule for vboard using its Wayland application ID instead of the window title.
meson compile -C builddir uninstall-localFor system installs:
sudo meson compile -C builddir uninstall-localAfter installation, open System Settings, search for Virtual Keyboard, and select Vboard.
When launched, vboard presents a compact keyboard with a minimal interface. The keyboard includes:
- Standard QWERTY layout keys
- Arrow keys
- Modifier keys (Shift, Ctrl, Alt, Super)
- Header-bar suggestions that appear while typing words through vboard when a system Hunspell dictionary is available
- Experimental swipe typing on alphabetic keys: drag across the intended letters and release to insert the best matching dictionary word
- ☰ (menu) - Toggle visibility of other interface controls
+ -Increase opacity- -Decrease opacity- Background dropdown - Change the keyboard background color
- Tray menu gesture toggle - Enable or disable gesture typing; it is on by default
vboard saves its settings to ~/.config/vboard/settings.conf. This configuration file stores:
- Background color
- Gesture typing enabled/disabled state
- Opacity level
- Text color
You can manually edit this file or use the built-in interface controls to customize the appearance.
The keyboard layout is defined in the rows list in the source code. To modify the layout:
- Download the source code
- Locate the rows definition
- Modify the key arrangement as needed
If vboard opens but pressing keys does not type anything, the uinput backend usually could not open /dev/uinput.
- Check whether
uinputexists and inspect its permissions:
ls -l /dev/uinput- Run the setup helper again as root:
sudo bash scripts/setup-uinput.sh- Reload
udevrules and retrigger the device:
sudo udevadm control --reload-rules
sudo udevadm trigger --subsystem-match=misc --sysname-match=uinput-
Log out and back in, or reboot, so your desktop session picks up the updated device permissions.
-
If it still does not work, add your user to the
inputgroup and log out/in again:
sudo usermod -a -G input $USERYou can also start vboard from a terminal and look for errors such as Could not initialize uinput backend ([Errno 13]).
Make sure uinput module is loaded:
sudo modprobe uinputTo auto-load at boot:
echo 'uinput' | sudo tee /etc/modules-load.d/uinput.confRun uinput setup script:
sudo bash scripts/setup-uinput.shThis installs the packaged udev rule at /etc/udev/rules.d/70-vboard-uinput.rules for system installs. If needed, reload udev, then log out/log in or reboot:
sudo udevadm control --reload-rules
sudo udevadm trigger --subsystem-match=misc --sysname-match=uinputContributions are welcome.
vboard is licensed under the GNU General Public License v3. See LICENSE for details.
Currently only the QWERTY US layout is supported.

