Skip to main content

A daemon to remap key events on linux input devices

Project description

evdevremapkeys

A daemon to remap key events on linux input devices

Motivation

The remapping of input key events is an problem, and one that has been solved at many levels over the years. On a traditional X11 desktop, the usual way to do this is with xbindkeys; it's simple and effective and you shouldn't try and write something different.

However, with the shift to Wayland, we have a problem. Wayland obviously isn't X11 so any X11 based remapping utility isn't going to work. Wayland compositors typically use libinput to manage input events, but while libinput supports remapping conceptually, it does not expose any mechanism to configure it. This is left as an exercise to the compositor and neither Weston nor Mutter expose remapping.

So where does this leave us? If we are to provide a remapping mechanism that is not dependent on the compositor, it must run below libinput, which means it must work with the linux input subsystem. And so, here we are.

Technical approach

There's only one real sane approach to doing event remapping at the input subsystem level: Read events from physical input devices, and then generate new input events on a virtual device managed through uinput.

One legitimate question is whether the virtual device attempts to fully replicate the original physical device, just with remapped events, or whether it's a dedicate device that only emits the new events which leaving the physical device free to send events directly to other clients.

Depending on your exact use-case, you might be able to leave the original physical device as-is, but for me, it turned out that I had to swallow the original events because they will be picked up by libinput and then trigger actions in my desktop environment.

To avoid this, you have to take a grab on the physical device, so no other client receives events, and then forward all un-modified events through your virtual device. It's annoying but unavoidable - you can't hide individual events from other clients.

Software Setup

Install from PyPI

The recommended way to install the program is to use pipx.

$ pipx install evdevremapkeys

You can also use pip, but on modern distros, pipx is a far better experience.

Create a configuration

You will need to create an initial configuration file for the program to be able to run and doing anything useful.

It's recommended to start from one of the example config files and adapt it for your hardware and the remapping you need.

Place your final file at: ~/.config/evdevremapkeys/config.yml

Run the program

evdevremapkeys

More details

See RUNNING.md for more details.

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

evdevremapkeys-1.0.1.tar.gz (11.5 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

evdevremapkeys-1.0.1-py3-none-any.whl (9.1 kB view details)

Uploaded Python 3

File details

Details for the file evdevremapkeys-1.0.1.tar.gz.

File metadata

  • Download URL: evdevremapkeys-1.0.1.tar.gz
  • Upload date:
  • Size: 11.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for evdevremapkeys-1.0.1.tar.gz
Algorithm Hash digest
SHA256 e01993b74baf162d7e8d86217ed947e8daa52d640aaca8bc381fb3989a67aa10
MD5 f1506bd93758fdb56a5dfd3693aab3a9
BLAKE2b-256 aa62c747b4954ccb0862c981eff76c0b87d5e8e302c2275c69f4557cf18bed0a

See more details on using hashes here.

Provenance

The following attestation bundles were made for evdevremapkeys-1.0.1.tar.gz:

Publisher: unittests.yml on philipl/evdevremapkeys

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file evdevremapkeys-1.0.1-py3-none-any.whl.

File metadata

  • Download URL: evdevremapkeys-1.0.1-py3-none-any.whl
  • Upload date:
  • Size: 9.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for evdevremapkeys-1.0.1-py3-none-any.whl
Algorithm Hash digest
SHA256 2ae99129dcdc28348e23ccf2376a3e5e60066c73db77188ca9edbf31fc9bdda6
MD5 e1dfa9df4b505db8d28f7dfa6283e743
BLAKE2b-256 99bda780285ad89610b4236f1a632578e28d7db85aaa847b33a0981c8c6315d3

See more details on using hashes here.

Provenance

The following attestation bundles were made for evdevremapkeys-1.0.1-py3-none-any.whl:

Publisher: unittests.yml on philipl/evdevremapkeys

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

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