xmodmap is a utility for modifying keymaps and pointer button mappings in Xorg.
xmodmap is not directly related to XKB, it uses different (pre-XKB) ideas on how keycodes are processed within Xorg. Generally it is not recommended to use xmodmap, except maybe for the simplest tasks. See X KeyBoard extension if you have special demands on layout configuration.
On a Linux system using Xorg, there are two types of keyboard values: keycodes and keysyms.
- The keycode is the numeric representation received by the Linux kernel when a keyboard key or a mouse button is pressed.
- The keysym is the value assigned to the keycode. For example, when you press the
Akey on the keyboard, it generates keycode
73is mapped to the keysym
0×61which corresponds to the letter
ain the ASCII table.
- The keysyms are managed by Xorg in a table of keycodes defining the keycode-keysym relations which is called the keymap table. The command
xmodmapcan be used to show/modify that key table.
Optionally, install alsowhich provides a graphical front-end to xmodmap.
Print the current keymap table formatted into expressions:
$ xmodmap -pke
keycode 57 = n N
Each keycode is followed by the keysym it is mapped to. The above example indicates that the keycode
57 is mapped to the lowercase
n, while the uppercase
N is mapped to keycode
Each keysym column in the table corresponds to a particular combination of modifier keys:
Not all keysyms have to be set, but if you want to assign a latter keysym without assigning earlier ones, set them to
You can check which keycode corresponds to a key on your keyboard with the xev utility, see Extra Keyboard Keys#In Xorg for details.
You can create your own map and store it in a configuration file in your home directory (i.e.
xmodmap -pke > ~/.Xmodmap
Make the desired changes to
~/.Xmodmap and then test the new configuration with:
Activate your custom table
If you are using GDM, XDM or KDM, there is no need to source your
~/.Xmodmap manually as these display managers source that file if it is present, whereas
startx does not. Therefore, to activate your custom table when starting Xorg, add the following:
if [ -s ~/.Xmodmap ]; then xmodmap ~/.Xmodmap fi
Alternatively, edit the global startup script
You can also make temporary changes for the current session. For example:
xmodmap -e "keycode 46 = l L l L lstroke Lstroke lstroke" xmodmap -e "keysym a = e E"
You can also also edit the keys:
Super (there always exists a left and a right one (Alt_R=AltGr)).
For example this can be useful if your right Control key is not working like your left one but you would like it to.
At first you have to delete/clear the signals that should be edited. In the beginning of your
!clear Shift !clear Lock clear Control !clear Mod1 !clear Mod2 !clear Mod3 clear Mod4 !clear Mod5 keycode 8 = ...
! is a comment so only
Mod4 (Standard: Super_L Super_R) get cleared.
Write the new signals at the end of
keycode 255 = !add Shift = Shift_L Shift_R !add Lock = Caps_Lock add Control = Super_L Super_R !add Mod1 = Alt_L Alt_R !add Mod2 = Mode_switch !add Mod3 = add Mod4 = Control_L Control_R !add Mod5 =
Super keys have now been exchanged with the
If you get the following error message
X Error of failed request: BadValue (integer parameter out of range for operation) it means the key you are trying to add is already in another modifier, so remove it using "remove MODIFIERNAME = KEYSYMNAME". Running
xmodmap gives you a list of modifiers and keys that are assigned to them.
The natural scrolling feature available in OS X Lion (mimicking smartphone or tablet scrolling) can be replicated with xmodmap. Since the synaptics driver uses the buttons 4/5/6/7 for up/down/left/right scrolling, you simply need to swap the order of how the buttons are declared in
~/.Xmodmap and append the following line to the file:
pointer = 1 2 3 5 4 7 6 8 9 10 11 12
Note how the 4 and 5 have been reversed.
Then update xmodmap:
To return to regular scrolling simply reverse the order of the 4 and 5 or delete the line altogether. For more information check Peter Hutterer's post, Natural scrolling in the synaptics driver, or the Reverse scrolling direction ala Mac OS X Lion? forum thread.
keycode 24 = a A aacute Aacute ae AE ae keycode 26 = e E eacute Eacute EuroSign cent EuroSign keycode 30 = u U uacute Uacute downarrow uparrow downarrow keycode 31 = i I iacute Iacute rightarrow idotless rightarrow keycode 32 = o O oacute Oacute oslash Oslash oslash keycode 57 = n N ntilde Ntilde n N n keycode 58 = comma question comma questiondown dead_acute dead_doubleacute dead_acute keycode 61 = exclam section exclamdown section dead_belowdot dead_abovedot dead_belowdot !Maps the Mode key to the Alt key keycode 64 = Mode_switch
Turn CapsLock into Control, and LeftControl into Hyper
Laptop users may find that using CapsLock as Control is so usefull.
The Hyper key can be used by programs like Emacs, i3, openbox,... as a modifier.
clear lock remove control = Control_L remove mod4 = Hyper_L keycode 66 = Control_L keycode 37 = Hyper_L add control = Control_L add mod3 = Hyper_L