#Why Remap Caps Lock?
For whatever reason you use a computer, efficiency is key (pun intended). There’s one key on your keyboard in prime real estate that’s notorious for being accidentally pressed: Caps Lock.
The Caps Lock key is extremely easy to press (on accident or purpose) and is basically wasted on unwanted behavior. It makes more sense to remap caps lock to a more important key, like control (most people) or escape (me, a vim user).
#Simple (Non-Persistent) Remapping Using
There are several utilities that allow you to easily remap caps lock. For example,
setxkbmap is likely present on your machine, and you can just run:
$ setxkbmap -option caps:escape
In addition, there’s
$ xcape -e 'Caps_Lock=Escape'
However, none of these solutions are persistent: when you reboot your computer, wake from suspend, or just unplug/replug your external keyboard, these tools must be ran once again.
Some people resort to binding a hotkey just to run these commands, or they create a
udev rule, or
systemctl service, but there’s an easier way.
#Let’s Get Persistent
On Linux, there is a file called
The keyboard file describes the properties of the keyboard.
man 5 keyboard
How insightful. Let’s keep reading:
Description of all available keyboard models, layouts, variants and options is available in /usr/share/X11/xkb/rules/xorg.lst
#Pick Your Desired Behavior
OK, let’s check
/usr/share/X11/xkb/rules/xorg.lst and see what options we can find about
$ grep "caps" /usr/share/X11/xkb/rules/xorg.lst [OUTPUT TRIMMED] ctrl:nocaps Caps Lock as Ctrl ctrl:swapcaps Swap Ctrl and Caps Lock ctrl:swapcaps_hyper Caps Lock as Control, Control as Hyper [OUTPUT TRIMMED] caps:swapescape Swap ESC and Caps Lock caps:escape Make Caps Lock an additional Esc caps:escape_shifted_capslock Make unmodified Caps Lock an additional Esc, but Shift + Caps Lock behaves like regular Caps Lock caps:super Make Caps Lock an additional Super caps:ctrl_modifier Caps Lock is also a Ctrl
As you can see, there’s a lot of options (and a lot more I trimmed from the output). I really liked the sound of
caps:escape_shifted_capslock, but you can pick any of these options.
#Implement the Changes
/etc/default/keyboard. You should see something like this:
# KEYBOARD CONFIGURATION FILE # Consult the keyboard(5) manual page. XKBMODEL="pc105" XKBLAYOUT="us" XKBVARIANT="" XKBOPTIONS="" BACKSPACE="guess"
Change the line that says
XKBOPTIONS="" to contain the option you desire. For example, I put:
Now hit caps lock and… wait, it didn’t do anything. Let’s check the man page again:
In Debian systems, changes in /etc/default/keyboard do not become immediately visible to X. You should either reboot the system, or use
udevadm trigger --subsystem-match=input --action=change
man 5 keyboard
To incorporate our changes, run the command it specifies:
$ udevadm trigger --subsystem-match=input --action=change
After a few seconds, you’re good to go! If you liked this post, make sure to smash that caps lock button. Hopefully, it did something different.