This project aims to deliver a minimal but practically usable implementation of a wlroots on-screen keyboard in legible C. This will only be a keyboard, not a feedback buzzer, led blinker, or anything that requires more than what's needed to input text quickly. The end product should be a static codebase that can be patched to add new features.
There are some areas that still need work:
You'll need the following developer packages
Make any customizations you would like in
config.def.h and run
The default set of layouts is called
mobintl (mobile international), which groups various layouts aimed at mobile devices
and also attempts to accommodate various international users. The resulting binary is called
You can, however, define your own layouts by copying and and modifying
mobintl for something like
yourlayout). Then make your layout set using
make LAYOUT=yourlayout, and
the resulting binary will be
wvkbd-mobintl (or the binary for your custom layout set).
You can switch between the layouts/layers of the keyboard by pressing the Abc/Sym key in the bottom-left. If you only
want a subset of the available layers, you can define which wants you want and in what order you want to cycle through
them using the
-l parameter. This takes takes a ordered comma separated list of
layout names that are defined in your layout set.
The keyboard can be hidden by sending it a
SIGUSR1 signal and shown again by sending it
SIGUSR2. This saves some
start up time and may be appropriate in some low-resource environments.
Wvkbd has an output mode
-o that will echo its output to standard output. This facility can be used if users want
audio/haptic feedback, a feature explicitly out of scope for wvkbd. To achieve this, simply pipe wvkbd's output through the external tool
$ wvkbd-mobileintl -l simple,special,emoji -o | clickclack -V -f keypress.wav
Any contributions are welcome, please tell me what I did wrong in issues or PRs. I could also use some nice branding if that tickles your fancy.
For code contributions, all I ask for now is you run
make format (requires
clang-format) before opening a PR and include as much relevant detail as