Xmodmap (简体中文)
Xmodmap is a utility for modifying keymaps and pointer button mappings in Xorg.
Contents
介绍
在每次按下键盘时, Linux 内核都会生成一个 Code。 Code 同 keycodes表
比较,然后决定按下的是什么。
而 Xorg 使用自己的 Keycodes表 来参与这个过程。 每一个 Keycode 属于一个 keysym
。 一个 keysym 就像一个 function 被 Keycode 调用执行。 Xmodmap 允许你编辑 keycode-keysym 之间的关系。
Keymap表
以可被解释的格式打印当前 Keymap表,
$ xmodmap -pke
keycode 57 = n N
每条 Keymap 之后都跟随要被映射的 keysyms
。 下面的例子表明 keycode 57
被映射到小写 n, 同时大写 N 映射于 57
+ Shift
每个 keysym列 都对应指定的键组合:
-
Key
-
Shift+Key
-
mode_switch+Key
-
mode_switch+Shift+Key
-
AltGr+Key
-
AltGr+Shift+Key
在 keysym组合 没有被指定时, 使用 NoSymbol
代替。
使用 xev 来查看每个键对应的 keymap.
Custom table
You can create your own map and store it in your home directory (i.e. ~/.Xmodmap
). Print the current keymap table into a configuration file:
xmodmap -pke > ~/.Xmodmap
Make the desired changes to ~/.Xmodmap
and then test the new configuration with:
xmodmap ~/.Xmodmap
To activate your custom table when starting Xorg add the following:
~/.xinitrc
if [ -f $HOME/.Xmodmap ]; then /usr/bin/xmodmap $HOME/.Xmodmap fi
Alternatively, edit the global startup script /etc/X11/xinit/xinitrc
.
Test changes
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"
Special keys/signals
You can also also edit the keys: Shift
, Ctrl
, Alt
and Super
(there always exists a left and a right one (Alt_R=AltGr))
At first you have to delete/clear the signals that should be edited. In the beginning of your ~/.Xmodmap
:
!clear Shift !clear Lock clear Control !clear Mod1 !clear Mod2 !clear Mod3 clear Mod4 !clear Mod5 keycode 8 = ...
Remember, !
is a comment so only Control
and Mod4
(Standard: Super_L Super_R) get cleared.
Write the new signals at the end of ~/.Xmodmap
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 =
The Super
keys have now been exchanged with the Ctrl
keys.
附加一个将CapsLock
映射成Control
, Shift+CapsLock
映射成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 can be mimicked 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
.
Open ~/.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:
xmodmap ~/.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.
Additional resources
- Current man page at X.Org Foundation
- Multimediakeys with .Xmodmap HOWTO by Christian Weiske
- Mapping unsupported keys with xmodmap by Pascal Bleser
- How to retrieve scancodes by Marvin Raaijmakers
- List of Keysyms Recognised by Xmodmap on LinuxQuestions