Input remap utilities

From ArchWiki

This page lists software that you can use to reconfigure input events from keyboards, mice and other hardware. For another method which is less convenient and less flexible but does not require a program to be running, see Map scancodes to keycodes.

Wayland's security model prevents programs other than the compositor from grabbing raw keyboard input. Some compositors support remapping keys (for example, mutter through gnome-tweaks), but many do not. Utilities work around this by grabbing the keyboard before the compositor, and passing modified keyboard input through to it.



evremap (evremap-gitAUR) — A keyboard input remapper for Linux/Wayland systems. This tool can do remap in a following way: remap the CapsLock key so that it produces Ctrl when held, but Esc if tapped and remap n keys to m keys. E.g.: F3 to Ctrl+c, and Alt+Left to Home.

After installation, create a config file (example from repo), and edit evremap.service to point to your config. Then start the service.


evdevremapkeys (evdevremapkeys-gitAUR) — A daemon to remap key events on linux input devices. This tool can remap keyboard and mouse events. It can map to repeated actions (for example, do double click) and can generate them while button is pressed (for example, generate wheel up events while holding back button).

It is also possible to remap combo to combo, but this is not yet merged, and is available in pronobis fork. See here.


evsieve (evsieveAUR) — A low-level utility that can read events from Linux event devices (evdev) and write them to virtual event devices (uinput), performing simple manipulations on the events along the way. Works on Wayland. Evsieve is particularly intended to be used in conjunction with the evdev-passthrough functionality of Qemu.


kbct (kbct-gitAUR) — Keyboard Customization Tool for Linux. Despite its name, also supports mouse events. This tool allows you to map an event (keyboard or mouse button) to another event. You can define multiple "layers" — lists of maps depending of which modifier you press with an input key. Unfortunately, currently the kbct does not allow you to generate multi-button event. See [1].

After installation, edit /etc/kbct/config.yml as required, then start kbct.service.


keyd (keyd) — A key remapping daemon for Linux using a flexible system-wide daemon which remaps keys using kernel level input primitives (evdev, uinput). Keyd works in both graphical environments, like X11 and Wayland, and the Linux virtual console. Read the project's README for more information about how keyd compared to similar software.

Input Remapper

Input Remapper input-remapper-gitAUR — A utility that provides a GUI and a CLI to configure input devices remappings. Works with both X and Wayland.


wtype (wtype) — xdotool type for Wayland.


  • Hawck - A low-level key rebinding daemon
  • IMWheel — A tool for X11 that can remap mouse wheel events depending on pressed modifier and individually per application.
  • Interception-tools — Yet another versatile tool, using various plug-ins.o
  • Mouse buttons#User tools — A list of hardware-dependent utilities to configure mouse buttons.
  • wayland-mouse-mapper — A small script for mapping mouse buttons to keystrokes on Wayland.
  • evmapy — An evdev event mapper written in Python. Not in AUR yet.
  • python-evdev — A utility that allows you to read and write input events on Linux. An event can be a key or button press, a mouse movement or a tap on a touchscreen.
  • noinputs (noinputs-gitAUR) — A utility to list and disable (inhibit) input devices.
  • xremap (xremap in AUR) — Key remapper for X11 and Wayland using evdev and uinput.


  • evtest (evtest) — utility that can show you the button names when you press them, which can help when configuring remap utilities.
  • wev (wev) — utility to view input events in wayland, similar to xev.

With evsieve --input /dev/input/event* --print you can see all events that are emitted on your computer.

Another approach of testing keyboard buttons is with online websites. Most of such testers cannot distinguish between left and right modifiers. One example that can is: