||5 years ago|
|src||5 years ago|
|systemd||5 years ago|
|.gitignore||7 years ago|
|Cargo.toml||5 years ago|
|LICENSE.md||5 years ago|
|README.md||5 years ago|
|keymap.orig.toml||5 years ago|
|keymap.toml||5 years ago|
|notes.txt||5 years ago|
uinput level keyboard mapper for linux, with advanced caps lock and shift swapping behavior
If you ever have mapped keys on linux, you know that there is the console keymap (loadkeys) and the X keymap (setxkbmap), also things like SDL and Virtualbox grab the input directly and respect no maps. Lastly I want to revert to QWERTY when holding ctrl so ctrl+c works just like normal, without remapping all programs to ctrl+j. Linux keymaps cannot do this either.
- Grab a keyboard device directly so only we can read events from it.
- Create a new keyboard input device with uinput, this looks identical to any other keyboard device to anything running on the box.
- Read input_events from the real device, map them, send them to our created device.
This solution is what rusty-keys implements, it works in ttys, in X, in virtualbox even running windows or whatever, on SDL games, it will work literally everywhere, because rusty-keys just creates a regular keyboard.
How to run
When ran, it will read a keymap.toml configuration file, refer to example and tweak to suit.
Usage: rusty-keys [options] [device_files...] Options: -h, --help prints this help message -v, --version prints the version -c, --config FILE specify the keymap config file to use (default: /etc/rusty-keys/keymap.toml)
when ran without specifying input devices, it maps all currently connected keyboards, and watches /dev/input/ with
inotify and starts mapping any new keyboards that are plugged in forever, until you kill it:
or you can specify one or multiple input devices, and it will run until all are disconnected, then stop:
rusty-keys /dev/input/event0 or
rusty-keys /dev/input/event0 /dev/input/event2
An example systemd service is in systemd/rusty-keys.service, enable it to have mapped keyboards all the time.
How to install
AGPLv3 for now, message me if you have a problem with this