Linux keyboard mapping utility
Mapping physical keyboard keys under Linux system is tricky. Since there is multiple places where you can interrupt and handle keystroke, there is a ton of solutions for different levels. KBMAP focuses on handling keystroke straight from the physical device, before converting keycode to the keysym (it's a place, where windowing system applies keyboard layouts and locales).
KBMAP allows you to apply flexible configurations directly to the keyboard input device without writing a mess of C code or breaking system config files.
KBMAP is heavily inspired by QMK - highly customizable mechanical keyboard firmware. Basically, ideally KBMAP will be the QMK of any non-programmable keyboard (and maybe not only keyboard).
pip install kbmap
Usage: kbmap [OPTIONS] DEVICE_NAME Create virtual device that will remap keyboard events from device with name DEVICE_NAME. Options: --version Show the version and exit. -c, --config TEXT Mapping configuration path. -n, --name TEXT Name of the virtual device that will write events. -v, --verbose Print detailed logs. --help Show this message and exit.
- Find a target device by name (specified with DEVICE_NAME argument)
- Create new uinput device (kind of a virtual input device) with specified name (--name option)
- Grab target device (so only KBMAP process receive input events)
- Listen for key events from target device
- Perform remapping based on config file (specified with CONFIG_PATH argument)
- Dispatch events through created uinput device
Q: Linux only?
A: Yes, since evdev is a specific Linux interface, KBMAP cannot be used on non-unix operating systems.
Q: Alternatives for Windows?
Q: How is KBMAP related to QMK?
A: QMK has a lot of mapping features. But QMK is a firmware and you cannot use it unless your keyboard is programmable. The mind behind KBMAP is to allow non-programmable keyboard users to achieve QMK-like customizability with their input device. Current goal is to reach TMK (a program, QMK being forked from) functionality.
Q: I am getting UInputError: "/dev/uinput" cannot be opened for writing.
Q: What features are already implemented?
Q: How to configure KBMAP?
Q: KBMAP keycodes?
A: See wiki.
Documentation and useful resources can be found in wiki.
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.