Difference between revisions of "Xmodmap"
m (fixed category) |
(→Reassigning modifiers to keys on your keyboard: no need for an example here) |
||
(89 intermediate revisions by 26 users not shown) | |||
Line 1: | Line 1: | ||
+ | {{Lowercase title}} | ||
[[Category:Keyboards]] | [[Category:Keyboards]] | ||
− | [[Category:X | + | [[Category:X server]] |
[[de:Xmodmap]] | [[de:Xmodmap]] | ||
[[fr:Xmodmap]] | [[fr:Xmodmap]] | ||
− | [[zh- | + | [[ja:Xmodmap]] |
− | {{ | + | [[ru:Xmodmap]] |
− | {{ | + | [[zh-hans:Xmodmap]] |
− | {{ | + | {{Related articles start}} |
− | + | {{Related|Xorg}} | |
− | {{ | + | {{Related|Extra keyboard keys}} |
− | {{ | + | {{Related|Extra keyboard keys in Xorg}} |
− | {{ | + | {{Related|Extra keyboard keys in console}} |
− | {{ | + | {{Related|Xbindkeys}} |
+ | {{Related articles end}} | ||
− | '' | + | ''xmodmap'' is a utility for modifying keymaps and pointer button mappings in [[Xorg]]. |
+ | |||
+ | ''xmodmap'' is not directly related to [[X KeyBoard extension]] (XKB), as it uses different (pre-XKB) ideas on how ''keycodes'' are processed within X. Generally, it is only recommended for the simplest tasks. See [[X KeyBoard extension]] for advanced layout configuration. | ||
+ | |||
+ | {{Note|''xmodmap'' settings are reset by ''setxkbmap'', which not only alters the alphanumeric keys to the values given in the map, but also resets all other keys to the startup default. [http://wiki.linuxquestions.org/wiki/Configuring_keyboards]}} | ||
== Introduction == | == Introduction == | ||
− | |||
− | + | There are two types of keyboard values in [[Xorg]]: ''keycodes'' and ''keysyms''. | |
− | {{ | + | ; keycode |
+ | : The ''keycode'' is the numeric representation received by the kernel when a key or a mouse button is pressed. | ||
+ | ; keysym | ||
+ | : The ''keysym'' is the value assigned to the ''keycode''. For example, pressing {{ic|A}} generates the {{ic|keycode 73}}, which is mapped to the {{ic|keysym 0×61}}, which matches {{ic|A}} in the [[Wikipedia:ASCII|ASCII table]]. | ||
+ | : The ''keysyms'' are managed by [[Xorg]] in a table of ''keycodes'' defining the ''keycode''-''keysym'' relations, which is called the [[#Keymap table|keymap table]]. This can be shown by running {{ic|xmodmap}}. | ||
+ | |||
+ | == Installation == | ||
+ | |||
+ | ''xmodmap'' can be [[pacman|installed]] through the {{Pkg|xorg-xmodmap}} package. | ||
+ | |||
+ | Optionally, install {{Pkg|xkeycaps}}, which is a graphical front-end to ''xmodmap''. | ||
== Keymap table == | == Keymap table == | ||
+ | |||
Print the current keymap table formatted into expressions: | Print the current keymap table formatted into expressions: | ||
− | |||
− | Each | + | {{hc|$ xmodmap -pke|2= |
+ | [...] | ||
+ | keycode 57 = n N | ||
+ | [...] | ||
+ | }} | ||
+ | |||
+ | Each ''keycode'' is followed by the ''keysym'' it is mapped to. The above example indicates that the ''keycode'' {{ic|57}} is mapped to the lowercase {{ic|n}}, while the uppercase {{ic|N}} is mapped to ''keycode'' {{ic|57}} plus {{ic|Shift}}. | ||
+ | |||
+ | Each ''keysym'' column in the table corresponds to a particular combination of modifier keys: | ||
+ | # {{ic|Key}} | ||
+ | # {{ic|Shift+Key}} | ||
+ | # {{ic|Mode_switch+Key}} | ||
+ | # {{ic|Mode_switch+Shift+Key}} | ||
+ | # {{ic|ISO_Level3_Shift+Key}} | ||
+ | # {{ic|ISO_Level3_Shift+Shift+Key}} | ||
− | + | Not all ''keysyms'' have to be set, but to assign only a latter ''keysym'', use the {{ic|NoSymbol}} value. | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | + | To see which ''keycode'' corresponds to a key, see [[Extra keyboard keys#In Xorg]] for details on the ''xev'' utility which will output relevant keycode/keysym information about a key when you press it. | |
− | + | {{Tip|There are predefined descriptive ''keysyms'' for multimedia keys, e.g. {{ic|XF86AudioMute}} or {{ic|XF86Mail}}. These ''keysyms'' can be found in {{ic|/usr/include/X11/XF86keysym.h}}. Many multimedia programs are designed to work with these ''keysyms'' out-of-the-box, without the need to configure any third-party application. | |
+ | }} | ||
− | + | Note that xmodmap is influenced by xkbd settings, so all eight keysym are available for the US(intl) xkbd layout but not for the default US (it is missing the ralt_switch symbol defined in level3). To have all 8 keysyms available you should configure the ''(intl)'' variant of the keyboard from xorg.conf or add, using US layout as an example, {{ic|$ setxkbmap -layout 'us(intl)'}} before calling xmodmap. | |
== Custom table == | == Custom table == | ||
− | |||
− | |||
− | + | To create a key map (i.e. {{ic|~/.Xmodmap}}): | |
− | xmodmap ~/.Xmodmap | + | $ xmodmap -pke > ~/.Xmodmap |
+ | |||
+ | To test the changes: | ||
+ | $ xmodmap ~/.Xmodmap | ||
+ | |||
+ | === Activating the custom table === | ||
− | {{ | + | With [[GDM]], [[XDM]] or [[LightDM]] there is no need to source {{ic|~/.Xmodmap}}. For [[startx]], use: |
− | + | {{hc|~/.xinitrc|<nowiki> | |
− | {{hc|~/.xinitrc| | + | [[ -f ~/.Xmodmap ]] && xmodmap ~/.Xmodmap |
− | + | </nowiki>}} | |
− | |||
− | |||
Alternatively, edit the global startup script {{ic|/etc/X11/xinit/xinitrc}}. | Alternatively, edit the global startup script {{ic|/etc/X11/xinit/xinitrc}}. | ||
=== Test changes === | === Test changes === | ||
− | |||
− | |||
− | |||
− | == | + | To make temporary changes: |
+ | $ xmodmap -e "keycode 46 = l L l L lstroke Lstroke lstroke" | ||
+ | $ xmodmap -e "keysym a = e E" | ||
+ | |||
+ | == Modifier keys == | ||
+ | |||
+ | ''xmodmap'' can also be used to override [[Wikipedia:Modifier key|modifier keys]], e.g. to swap {{ic|Control}} and {{ic|Super}} (the [[Wikipedia:Windows key|Windows key]]). | ||
+ | |||
+ | Print the current modifier table verbosely (full sample): | ||
+ | {{hc|$ xmodmap -pm|2= | ||
+ | xmodmap: up to 4 keys per modifier, (keycodes in parentheses): | ||
+ | |||
+ | shift Shift_L (0x32), Shift_R (0x3e) | ||
+ | lock Caps_Lock (0x42) | ||
+ | control Control_L (0x25), Control_R (0x69) | ||
+ | mod1 Alt_L (0x40), Meta_L (0xcd) | ||
+ | mod2 Num_Lock (0x94) | ||
+ | mod3 | ||
+ | mod4 Super_R (0x86), Super_L (0xce), Hyper_L (0xcf) | ||
+ | mod5 ISO_Level3_Shift (0x5c), ISO_Level3_Shift (0x6c), Mode_switch (0x85), Mode_switch (0xcb) | ||
+ | }} | ||
+ | |||
+ | === Finding the keysym column modifier keys === | ||
+ | |||
+ | {{Merge|#Keymap table|The point of this section does not seem to be ''finding'' anything. The meaning of the modifier keys should be explained in [[#Keymap table]] where they are mentioned first.}} | ||
+ | |||
+ | ;ISO_Level3_Shift | ||
+ | :The AltGr key on non-US keyboards calls modifier ISO_Level3_Shift. (On US keyboards, the right-alt {{ic|Alt_R}} has the same function as the left-alt {{ic|Alt_L}}, which makes setting the layout as US international preferable. See [[#Keymap table]].) | ||
+ | ;Mode_switch | ||
+ | :The Mode_switch modifier may be mapped by default to a key that is not on your keyboard. | ||
+ | |||
+ | {{Note|The usage of the modifier names {{ic|ISO_Level3_Shift}} and {{ic|Mode_switch}} is different between xmodmap and [[X_KeyBoard_extension#xmodmap|X Keyboard Extension]]. See also [https://unix.stackexchange.com/questions/55076/what-is-the-mode-switch-modifier-for].}} | ||
+ | |||
+ | === Reassigning modifiers to keys on your keyboard === | ||
+ | |||
+ | {{Note|xmodmap is ''case-sensitive''. Using incorrect case, such as {{ic|Mode_Switch}} instead of the correct {{ic|Mode_switch}} will cause errors.}} | ||
+ | |||
+ | Before assignment, the modifier keys need to be cleared. This applies to both modifiers you intend to assign and modifiers on keys that you intend to use. For example, if you intend to assign {{ic|Caps_Lock}} to your A key and {{ic|B}} to your NumLock key, you need to first clear the modifiers for both {{ic|Caps_Lock}} and {{ic|Num_Lock}}, then assign the keysyms, and finally add back the modifiers. | ||
+ | |||
+ | {{hc|~/.Xmodmap|2= | ||
+ | [...] | ||
+ | clear lock | ||
+ | clear mod2 | ||
+ | keycode 38 = Caps_Lock | ||
+ | keycode 77 = Num_Lock | ||
+ | add lock = Caps_Lock | ||
+ | add mod2 = Num_Lock | ||
+ | }} | ||
+ | |||
+ | {{ic|!}} is a comment, so only the modifiers {{ic|Control}} and {{ic|Mod4}} get cleared in the following example. Then the ''keysyms'' {{ic|Control_L}}, {{ic|Control_R}}, {{ic|Super_L}} and {{ic|Super_R}} are assigned to the opposite modifier. Assigning both left and right to the same modifier means that both keys are treated the same way. | ||
+ | |||
+ | {{hc|~/.Xmodmap|2= | ||
+ | [...] | ||
+ | !clear Shift | ||
+ | !clear Lock | ||
+ | clear Control | ||
+ | !clear Mod1 | ||
+ | !clear Mod2 | ||
+ | !clear Mod3 | ||
+ | clear Mod4 | ||
+ | !clear Mod5 | ||
+ | !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 = | ||
+ | }} | ||
+ | |||
+ | {{Note|The example assumes that the {{ic|Control_L}} and {{ic|Control_R}} keysyms were assigned to the {{ic|Control}} modifier, and {{ic|Super_L}} and {{ic|Super_R}} keysyms to the {{ic|Mod4}} modifier. If you get the following error message {{ic|X Error of failed request: BadValue (integer parameter out of range for operation)}}, you will need to adapt accordingly. Running {{ic|xmodmap}} produces a list of modifiers and keys that are assigned to them.}} | ||
+ | |||
+ | The following example modifies {{ic|CapsLock}} to {{ic|Control}}, and {{ic|Shift+CapsLock}} to {{ic|CapsLock}}: | ||
+ | {{hc|~/.Xmodmap|2= | ||
+ | clear lock | ||
+ | clear control | ||
+ | add control = Caps_Lock Control_L Control_R | ||
+ | keycode 66 = Control_L Caps_Lock NoSymbol NoSymbol | ||
+ | }} | ||
+ | |||
+ | == Reverse scrolling == | ||
+ | |||
+ | {{Merge|Mouse buttons|xmodmap is not the only way to do this.}} | ||
+ | |||
+ | The [http://who-t.blogspot.com/2011/09/natural-scrolling-in-synaptics-driver.html natural scrolling] feature available in OS X Lion (mimicking smartphone or tablet scrolling) can be [https://bbs.archlinux.org/viewtopic.php?id=126258 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 {{ic|~/.Xmodmap}}: | ||
+ | |||
+ | {{hc|~/.Xmodmap|2= | ||
+ | pointer = 1 2 3 '''5 4''' 7 6 8 9 10 11 12 | ||
+ | }} | ||
+ | |||
+ | Then update ''xmodmap'': | ||
+ | $ xmodmap ~/.Xmodmap | ||
+ | |||
+ | == Swapping mouse buttons == | ||
+ | |||
+ | {{Merge|Mouse buttons|xmodmap is not the only way to do this.}} | ||
+ | |||
+ | The left, middle and right mouse buttons correspond to buttons 1,2 and 3 respectively in the synaptics driver. To swap left and right mouse buttons, again simply reverse the order in which they are listed in your {{ic|~/.Xmodmap}}: | ||
+ | |||
+ | {{hc|~/.Xmodmap|2= | ||
+ | pointer = '''3 2 1''' | ||
+ | }} | ||
+ | |||
+ | This should suffice for a simple mouse setup. Again, update ''xmodmap'': | ||
+ | $ xmodmap ~/.Xmodmap | ||
− | + | == Templates == | |
− | + | === Spanish === | |
− | + | {{hc|~/.Xmodmap| | |
− | + | 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 === | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | + | Simplest example of changing {{ic|CapsLock}} into {{ic|Control}}. | |
− | + | {{hc|~/.Xmodmap|<nowiki> | |
− | + | clear lock | |
+ | clear control | ||
+ | keycode 66 = Control_L | ||
+ | add control = Control_L Control_R | ||
+ | </nowiki>}} | ||
− | + | === Turn CapsLock into Control, and LeftControl into Hyper === | |
− | |||
− | |||
− | + | Laptop users may prefer having {{ic|CapsLock}} as {{ic|Control}}. The {{ic|Left Control}} key can be used as a {{ic|Hyper}} modifier (an additional modifier for emacs or openbox or i3). | |
− | |||
− | + | {{hc|~/.Xmodmap|<nowiki> | |
+ | clear lock | ||
+ | clear control | ||
+ | clear mod1 | ||
+ | clear mod2 | ||
+ | clear mod3 | ||
+ | clear mod4 | ||
+ | clear mod5 | ||
+ | keycode 37 = Hyper_L | ||
+ | keycode 66 = Control_L | ||
+ | add control = Control_L Control_R | ||
+ | add mod1 = Alt_L Alt_R Meta_L | ||
+ | add mod2 = Num_Lock | ||
+ | add mod3 = Hyper_L | ||
+ | add mod4 = Super_L Super_R | ||
+ | add mod5 = Mode_switch ISO_Level3_Shift | ||
+ | </nowiki>}} | ||
− | == | + | === Switch every number key N with Shift-N and vice-versa, for Croatian layout === |
− | + | Should work fine for layouts similar to Croatian as well. | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | + | {{hc|~/.Xmodmap|<nowiki> | |
+ | keycode 10 = exclam 1 1 exclam asciitilde dead_tilde asciitilde | ||
+ | keycode 11 = quotedbl 2 2 quotedbl dead_caron caron dead_caron | ||
+ | keycode 12 = numbersign 3 3 numbersign asciicircum dead_circumflex asciicircum | ||
+ | keycode 13 = dollar 4 4 dollar dead_breve breve dead_breve | ||
+ | keycode 14 = percent 5 5 percent degree dead_abovering degree | ||
+ | keycode 15 = ampersand 6 6 ampersand dead_ogonek ogonek dead_ogonek | ||
+ | keycode 16 = slash 7 7 slash grave dead_grave grave | ||
+ | keycode 17 = parenleft 8 8 parenleft dead_abovedot abovedot dead_abovedot | ||
+ | keycode 18 = parenright 9 9 parenright dead_acute apostrophe dead_acute | ||
+ | keycode 19 = equal 0 0 equal dead_doubleacute doubleacute dead_doubleacute | ||
+ | </nowiki>}} | ||
− | + | == See also == | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
*[http://www.x.org/archive/current/doc/man/man1/xmodmap.1.xhtml Current man page] at X.Org Foundation | *[http://www.x.org/archive/current/doc/man/man1/xmodmap.1.xhtml Current man page] at X.Org Foundation | ||
*[http://cweiske.de/howto/xmodmap/allinone.html Multimediakeys with .Xmodmap HOWTO] by Christian Weiske | *[http://cweiske.de/howto/xmodmap/allinone.html Multimediakeys with .Xmodmap HOWTO] by Christian Weiske | ||
*[http://dev-loki.blogspot.com/2006/04/mapping-unsupported-keys-with-xmodmap.html Mapping unsupported keys with xmodmap] by Pascal Bleser | *[http://dev-loki.blogspot.com/2006/04/mapping-unsupported-keys-with-xmodmap.html Mapping unsupported keys with xmodmap] by Pascal Bleser | ||
− | |||
− | |||
*[http://wiki.linuxquestions.org/wiki/List_of_Keysyms_Recognised_by_Xmodmap List of Keysyms Recognised by Xmodmap] on [http://linuxquestions.org LinuxQuestions] | *[http://wiki.linuxquestions.org/wiki/List_of_Keysyms_Recognised_by_Xmodmap List of Keysyms Recognised by Xmodmap] on [http://linuxquestions.org LinuxQuestions] |
Latest revision as of 21:02, 22 April 2018
xmodmap is a utility for modifying keymaps and pointer button mappings in Xorg.
xmodmap is not directly related to X KeyBoard extension (XKB), as it uses different (pre-XKB) ideas on how keycodes are processed within X. Generally, it is only recommended for the simplest tasks. See X KeyBoard extension for advanced layout configuration.
Contents
Introduction
There are two types of keyboard values in Xorg: keycodes and keysyms.
- keycode
- The keycode is the numeric representation received by the kernel when a key or a mouse button is pressed.
- keysym
- The keysym is the value assigned to the keycode. For example, pressing
A
generates thekeycode 73
, which is mapped to thekeysym 0×61
, which matchesA
in 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. This can be shown by running
xmodmap
.
Installation
xmodmap can be installed through the xorg-xmodmap package.
Optionally, install xkeycaps, which is a graphical front-end to xmodmap.
Keymap table
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 57
plus Shift
.
Each keysym column in the table corresponds to a particular combination of modifier keys:
-
Key
-
Shift+Key
-
Mode_switch+Key
-
Mode_switch+Shift+Key
-
ISO_Level3_Shift+Key
-
ISO_Level3_Shift+Shift+Key
Not all keysyms have to be set, but to assign only a latter keysym, use the NoSymbol
value.
To see which keycode corresponds to a key, see Extra keyboard keys#In Xorg for details on the xev utility which will output relevant keycode/keysym information about a key when you press it.
XF86AudioMute
or XF86Mail
. These keysyms can be found in /usr/include/X11/XF86keysym.h
. Many multimedia programs are designed to work with these keysyms out-of-the-box, without the need to configure any third-party application.
Note that xmodmap is influenced by xkbd settings, so all eight keysym are available for the US(intl) xkbd layout but not for the default US (it is missing the ralt_switch symbol defined in level3). To have all 8 keysyms available you should configure the (intl) variant of the keyboard from xorg.conf or add, using US layout as an example, $ setxkbmap -layout 'us(intl)'
before calling xmodmap.
Custom table
To create a key map (i.e. ~/.Xmodmap
):
$ xmodmap -pke > ~/.Xmodmap
To test the changes:
$ xmodmap ~/.Xmodmap
Activating the custom table
With GDM, XDM or LightDM there is no need to source ~/.Xmodmap
. For startx, use:
~/.xinitrc
[[ -f ~/.Xmodmap ]] && xmodmap ~/.Xmodmap
Alternatively, edit the global startup script /etc/X11/xinit/xinitrc
.
Test changes
To make temporary changes:
$ xmodmap -e "keycode 46 = l L l L lstroke Lstroke lstroke" $ xmodmap -e "keysym a = e E"
Modifier keys
xmodmap can also be used to override modifier keys, e.g. to swap Control
and Super
(the Windows key).
Print the current modifier table verbosely (full sample):
$ xmodmap -pm
xmodmap: up to 4 keys per modifier, (keycodes in parentheses): shift Shift_L (0x32), Shift_R (0x3e) lock Caps_Lock (0x42) control Control_L (0x25), Control_R (0x69) mod1 Alt_L (0x40), Meta_L (0xcd) mod2 Num_Lock (0x94) mod3 mod4 Super_R (0x86), Super_L (0xce), Hyper_L (0xcf) mod5 ISO_Level3_Shift (0x5c), ISO_Level3_Shift (0x6c), Mode_switch (0x85), Mode_switch (0xcb)
Finding the keysym column modifier keys
- ISO_Level3_Shift
- The AltGr key on non-US keyboards calls modifier ISO_Level3_Shift. (On US keyboards, the right-alt
Alt_R
has the same function as the left-altAlt_L
, which makes setting the layout as US international preferable. See #Keymap table.) - Mode_switch
- The Mode_switch modifier may be mapped by default to a key that is not on your keyboard.
ISO_Level3_Shift
and Mode_switch
is different between xmodmap and X Keyboard Extension. See also [2].Reassigning modifiers to keys on your keyboard
Mode_Switch
instead of the correct Mode_switch
will cause errors.Before assignment, the modifier keys need to be cleared. This applies to both modifiers you intend to assign and modifiers on keys that you intend to use. For example, if you intend to assign Caps_Lock
to your A key and B
to your NumLock key, you need to first clear the modifiers for both Caps_Lock
and Num_Lock
, then assign the keysyms, and finally add back the modifiers.
~/.Xmodmap
[...] clear lock clear mod2 keycode 38 = Caps_Lock keycode 77 = Num_Lock add lock = Caps_Lock add mod2 = Num_Lock
!
is a comment, so only the modifiers Control
and Mod4
get cleared in the following example. Then the keysyms Control_L
, Control_R
, Super_L
and Super_R
are assigned to the opposite modifier. Assigning both left and right to the same modifier means that both keys are treated the same way.
~/.Xmodmap
[...] !clear Shift !clear Lock clear Control !clear Mod1 !clear Mod2 !clear Mod3 clear Mod4 !clear Mod5 !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 =
Control_L
and Control_R
keysyms were assigned to the Control
modifier, and Super_L
and Super_R
keysyms to the Mod4
modifier. If you get the following error message X Error of failed request: BadValue (integer parameter out of range for operation)
, you will need to adapt accordingly. Running xmodmap
produces a list of modifiers and keys that are assigned to them.The following example modifies CapsLock
to Control
, and Shift+CapsLock
to CapsLock
:
~/.Xmodmap
clear lock clear control add control = Caps_Lock Control_L Control_R keycode 66 = Control_L Caps_Lock NoSymbol NoSymbol
Reverse scrolling
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
:
~/.Xmodmap
pointer = 1 2 3 5 4 7 6 8 9 10 11 12
Then update xmodmap:
$ xmodmap ~/.Xmodmap
Swapping mouse buttons
The left, middle and right mouse buttons correspond to buttons 1,2 and 3 respectively in the synaptics driver. To swap left and right mouse buttons, again simply reverse the order in which they are listed in your ~/.Xmodmap
:
~/.Xmodmap
pointer = 3 2 1
This should suffice for a simple mouse setup. Again, update xmodmap:
$ xmodmap ~/.Xmodmap
Templates
Spanish
~/.Xmodmap
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
Simplest example of changing CapsLock
into Control
.
~/.Xmodmap
clear lock clear control keycode 66 = Control_L add control = Control_L Control_R
Turn CapsLock into Control, and LeftControl into Hyper
Laptop users may prefer having CapsLock
as Control
. The Left Control
key can be used as a Hyper
modifier (an additional modifier for emacs or openbox or i3).
~/.Xmodmap
clear lock clear control clear mod1 clear mod2 clear mod3 clear mod4 clear mod5 keycode 37 = Hyper_L keycode 66 = Control_L add control = Control_L Control_R add mod1 = Alt_L Alt_R Meta_L add mod2 = Num_Lock add mod3 = Hyper_L add mod4 = Super_L Super_R add mod5 = Mode_switch ISO_Level3_Shift
Switch every number key N with Shift-N and vice-versa, for Croatian layout
Should work fine for layouts similar to Croatian as well.
~/.Xmodmap
keycode 10 = exclam 1 1 exclam asciitilde dead_tilde asciitilde keycode 11 = quotedbl 2 2 quotedbl dead_caron caron dead_caron keycode 12 = numbersign 3 3 numbersign asciicircum dead_circumflex asciicircum keycode 13 = dollar 4 4 dollar dead_breve breve dead_breve keycode 14 = percent 5 5 percent degree dead_abovering degree keycode 15 = ampersand 6 6 ampersand dead_ogonek ogonek dead_ogonek keycode 16 = slash 7 7 slash grave dead_grave grave keycode 17 = parenleft 8 8 parenleft dead_abovedot abovedot dead_abovedot keycode 18 = parenright 9 9 parenright dead_acute apostrophe dead_acute keycode 19 = equal 0 0 equal dead_doubleacute doubleacute dead_doubleacute
See also
- Current man page at X.Org Foundation
- Multimediakeys with .Xmodmap HOWTO by Christian Weiske
- Mapping unsupported keys with xmodmap by Pascal Bleser
- List of Keysyms Recognised by Xmodmap on LinuxQuestions