Linux: Keyboard Software Guide
This page is a overview of how to create keyboard shortcuts, how to remap/swap keys, how to change keyboard layout.
Get a Programable Keyboard
The best solution is to get a programable keyboard, especially on linux.
- Why Programable Keyboards Are Better Than Software Key Remap
- Programable Keyboards with Onboard Memory
Overview of Linux Key Programing
In Linux, there are 2 steps to create keyboard shortcuts:
- Action: A shell command that does something, for example, switch/close window, simulate key press, mouse click, launch app, open file, empty trash.
- Bind Key: Make a key press run a shell command/script.
Keybinding Using System Settings Graphical User Interface App
The most easy way to add a new keyboard shortcut or keyboard layout, is the system control panel in a graphical user interface (available in any of the Gnome, KDE, Ubuntu, Xfce, LXDE). Under the system control panel (aka Setting Manager or System Preference), usually there are apps named Window Manager, or Keyboard, or Keyboard Layout.

The window manager typically lets you set keys related to manipulating windows, such as {switch, close, max/min, move, show/hide/iconify}, or switch workspace (aka virtual screen), etc.

The keyboard setting tool typically lets you set a key to launch app, or run a shell script. But it cannot swap keys nor set a key to send key combo such as Ctrl+s.
Swapping Keys, Remap Keys
xmodmap
xmodmap is a simple tool that lets you remap/swap keys for apps running under X11.
Scancode, Keycode, Keysym
How to set system keyboard layout?
Keybinding in linux can be divided into 2 layers: the X11 window system layer, or system level.
Many keybinding setup works in X11 only. For example, when in Linux: Virtual Terminal or single user mode console or system startup console, your custome key setting won't kick in.
The letter layout, is usually in the system layer. (but it can also be X11 layer only too.)
[see Linux: Set System Keyboard Layout]
Tool to Bind Key
xbindkeys
If your desktop doesn't have a graphical user interface settings app to bind a key to launch a script, then you can use xbindkeys
.
[see Linux: xbindkeys Tutorial]
Tool for Key Actions
wmctrl for Switch Windows
wmctrl
is a command line tool to {switch, close, move, resize, set title, list, …} windows.
xvkbd for Sending Keychords
xvkbd
is a virtual keyboard for X window system. It is useful as a shell command to send keys.
Linux: Control Sound Level by Command Line
xdotool
xdotool
. «programatically simulate keyboard input and mouse activity. It does this using X11's XTEST extension and other Xlib functions.»
(note: i tried xdotool under Ubuntu/xfce. Doesn't work in my first 30 min of looking into it.)
#Install xdotool sudo apt-get install xdotool
Example. Send Ctrl+w to close tab.
xdotool key --delay 40 Control_L+w
Example. Click on upper left corner, (90, 10) pixels.
xdotool mousemove 90 10 click 1
ydotool
“Generic Linux command-line automation tool (no X!)”
[2021-02-16 https://github.com/ReimuNotMoe/ydotool ]
(2021-02-16 note: i haven't used ydotool.)
AutoKey
[ AutoKey ] [ 2021-02-16 https://en.wikipedia.org/wiki/AutoKey ]
(2021-02-16 note: i haven't used AutoKey.)
Other Keyboard Tools
KMonad
https://github.com/kmonad/kmonad
KMonad lets you map any keyboard button to any keymap. Want to swap the useless Caps Lock key with the Escape key? Want to have your modifiers such as Shift and Control on your home row, without breaking your normal typing flow? Want a modifier that is combination of Alt + Ctrl + Super + Shift?

xkeysnail
https://github.com/mooz/xkeysnailxkeysnail is yet another keyboard remapping tool for X environment written in Python. It's like xmodmap but allows more flexible remappings.
Has high-level and flexible remapping mechanisms, such as
- per-application keybindings can be defined
- multiple stroke keybindings can be defined such as Ctrl+x Ctrl+c to Ctrl+q
- not only key remapping but arbitrary commands defined by Python can be bound to a key
Runs in low-level layer (evdev and uinput), making remapping work in almost all the places
xkeysnail is new around 2015. I never tried.
xcape (Space Bar as Dual Key)
2015-09-27 https://github.com/alols/xcape
Linux tool to configure modifier keys to act as other keys when pressed and released on their own.
IMWheel (Customize Mouse Wheel)
https://wiki.archlinux.org/index.php/IMWheel
IMWheel let you set mouse wheel behavior.