Skip to main content

Linux keyboard mapping utility

Project description

KBMAP

Linux keyboard mapping utility

About

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).

Installing

pip install kbmap

Usage

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.

FAQ

Q: How it works?
A: KBMAP uses evdev - a Linux input event interface. There is python binding for evdev library: python-evdev. Mapping algorithm:

  1. Find a target device by name (specified with DEVICE_NAME argument)
  2. Create new uinput device (kind of a virtual input device) with specified name (--name option)
  3. Grab target device (so only KBMAP process receive input events)
  4. Listen for key events from target device
  5. Perform remapping based on config file (specified with CONFIG_PATH argument)
  6. 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?
A: AutoHotkey.

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.
A: Solution.

Q: How to run KBMAP at system boot?
A: It can be done in several ways, check out stackoverflow question and Arch Linux wiki page.

Q: What features are already implemented?
Q: How to configure KBMAP?
Q: KBMAP keycodes?
A: See wiki.

Documentation

Documentation and useful resources can be found in wiki.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

kbmap-1.1.0.tar.gz (16.7 kB view details)

Uploaded Source

Built Distribution

kbmap-1.1.0-py3-none-any.whl (23.0 kB view details)

Uploaded Python 3

File details

Details for the file kbmap-1.1.0.tar.gz.

File metadata

  • Download URL: kbmap-1.1.0.tar.gz
  • Upload date:
  • Size: 16.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.1.1 pkginfo/1.5.0.1 requests/2.24.0 setuptools/45.2.0 requests-toolbelt/0.9.1 tqdm/4.42.1 CPython/3.8.5

File hashes

Hashes for kbmap-1.1.0.tar.gz
Algorithm Hash digest
SHA256 0eb08704761a82c6dd03486aeaad84c40179ed1c79232ecaed5ff9b7d8aa36f7
MD5 f50972901df14d1e5ed8bf7b073031f3
BLAKE2b-256 60cd34bac3adb30bd7e7a1f21c0a775af05f5e4ec61278303b3b5a983157e370

See more details on using hashes here.

File details

Details for the file kbmap-1.1.0-py3-none-any.whl.

File metadata

  • Download URL: kbmap-1.1.0-py3-none-any.whl
  • Upload date:
  • Size: 23.0 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.1.1 pkginfo/1.5.0.1 requests/2.24.0 setuptools/45.2.0 requests-toolbelt/0.9.1 tqdm/4.42.1 CPython/3.8.5

File hashes

Hashes for kbmap-1.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 b122c0c3aa2cbaf1792f3a2cde34f8c22ae00886673b7f84886390441b4bd171
MD5 d12554b9bff3fd5b20227ccb04331795
BLAKE2b-256 9eec6ab842d472d67b14e8246fed3dfe8039d8fbad8fba22b6d072facba17067

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page