Difference between revisions of "Xmodmap (简体中文)"

From ArchWiki
Jump to: navigation, search
(fix categories - not an English article)
Line 29: Line 29:
 
每个 keysym列 都对应指定的键组合:
 
每个 keysym列 都对应指定的键组合:
  
# {{Keypress|Key}}
+
# {{ic|Key}}
# {{Keypress|Shift+Key}}
+
# {{ic|Shift+Key}}
 
# {{Keypress|mode_switch+Key}}
 
# {{Keypress|mode_switch+Key}}
 
# {{Keypress|mode_switch+Shift+Key}}
 
# {{Keypress|mode_switch+Shift+Key}}
# {{Keypress|AltGr+Key}}
+
# {{ic|AltGr+Key}}
# {{Keypress|AltGr+Shift+Key}}
+
# {{ic|AltGr+Shift+Key}}
  
 
在 keysym组合 没有被指定时, 使用 {{ic|NoSymbol}} 代替。
 
在 keysym组合 没有被指定时, 使用 {{ic|NoSymbol}} 代替。
Line 64: Line 64:
 
== Special keys/signals ==
 
== Special keys/signals ==
  
You can also also edit the keys: {{Keypress|Shift}}, {{Keypress|Ctrl}}, {{Keypress|Alt}} and {{Keypress|Super}} (there always exists a left and a right one (Alt_R=AltGr))
+
You can also also edit the keys: {{ic|Shift}}, {{ic|Ctrl}}, {{ic|Alt}} and {{ic|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 {{ic|~/.Xmodmap}}:
 
At first you have to delete/clear the signals that should be edited. In the beginning of your {{ic|~/.Xmodmap}}:
Line 77: Line 77:
 
  keycode  8 =
 
  keycode  8 =
 
  ...
 
  ...
Remember, {{ic|!}} is a comment so only {{Keypress|Control}} and {{Keypress|Mod4}} (Standard: Super_L Super_R) get cleared.
+
Remember, {{ic|!}} is a comment so only {{ic|Control}} and {{ic|Mod4}} (Standard: Super_L Super_R) get cleared.
  
 
Write the new signals at the end of {{ic|~/.Xmodmap}}
 
Write the new signals at the end of {{ic|~/.Xmodmap}}
Line 89: Line 89:
 
  add Mod4    = Control_L Control_R
 
  add Mod4    = Control_L Control_R
 
  !add Mod5    =
 
  !add Mod5    =
The {{Keypress|Super}} keys have now been exchanged with the {{Keypress|Ctrl}} keys.
+
The {{ic|Super}} keys have now been exchanged with the {{ic|Ctrl}} keys.
  
 
== Reverse Scrolling ==
 
== Reverse Scrolling ==

Revision as of 11:20, 1 September 2013

Summary help replacing me
A general overview of modifying keymaps and pointer mappings with xmodmap.
Related
Xorg
Extra Keyboard Keys
Extra Keyboard Keys in Xorg
Extra Keyboard Keys in Console

Xmodmap is a utility for modifying keymaps and pointer button mappings in Xorg.

介绍

在每次按下键盘时, 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列 都对应指定的键组合:

  1. Key
  2. Shift+Key
  3. Template:Keypress
  4. Template:Keypress
  5. AltGr+Key
  6. AltGr+Shift+Key

在 keysym组合 没有被指定时, 使用 NoSymbol 代替。

使用 xev 来查看每个键对应的 keymap.

Tip: There are predefined descriptive keycodes that make mapping additional keys easier (e.g. XF86AudioMute, XF86Mail). Those keycodes can be found in: /usr/include/X11/XF86keysym.h

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.

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