1 introduce

xmodmap能够重新映射键盘上键的布局,通常情况下,你不会需要对键盘做重新映射,只有在特定情况下,比如emacs,需要频繁操作Ctrl键,但是偏偏US标准键盘上,Ctrl键的位置就很不合理,通常我们都会切换Caps_Lock和Ctrl_L的位置(以前的UNIX键盘Ctrl_R的位置就是在A键的旁边),达到方便操作的目的,下面文字主要是记录我自己的映射信息

2 一些特殊键的标准位置

下面是我的ubuntu上几个特殊键的位置,包括shift,ctrl,alt,super/win,menu键:

keycode 133 = Super_L NoSymbol Super_L$
keycode 134 = Super_R NoSymbol Super_R
keycode 135 = Menu NoSymbol Menu
keycode  50 = Shift_L NoSymbol Shift_L
keycode  62 = Shift_R NoSymbol Shift_R
keycode  66 = Caps_Lock NoSymbol Caps_Lock
keycode  37 = Control_L NoSymbol Control_L
keycode  105 = Control_R NoSymbol Control_R

你可以通过如下命令获取: $xmodmap -pke > xmodmap.out

3 我期望的效果

  • 切换CapsLock和Ctrl-L
  • 映射menu键为Ctrl-R
  • 映射Ctrl-R键为Shift-R
  • 取消menu键(当然你也可以把Shift-R键映射为menu,我嫌这个键容易错误触发中断工作,所以取消)

4 设置xmodmap的方法

你只需要在你的home目录下建立一个.Xmodmap的文件,在这个文件里面完成你的映射即可,无须其他操作(我的ubuntu是12.04)。重新映射键的三个主要步骤:

4.1 取消原先键映射

这里通过clear语法实现,下面是一些特殊键的表达1

clear Shift
clear Lock
clear Control
clear Mod1
clear Mod2
clear Mod3
clear Mod4
clear Mod5

我主要关注shift、lock、control、mod1和mod4,其中mod1表示alt,mod4表示super,这里我只需要取消下面几个:

clear Shift
clear Lock
clear Control
clear Mod4

4.2 设定新的映射关系

keycode  66 = Control_L
keycode  37 = Caps_Lock
keycode 133 = Super_L
keycode 134 = Control_R
keycode 135 = Control_R
keycode 50  = Shift_L
keycode 62  = Shift_R
!keycode 62  = Menu
keycode 105 = Shift_R

4.3 绑定映射关系

!add mod1    = Alt_R Alt_L Meta_R Meta_L
add Shift   = Shift_R Shift_L
add Lock    = Caps_Lock
add Control = Control_R Control_L
add Mod4    = Super_R Super_L Menu

完成之后,保存你的xmodmap文件,可以通过如下命令立即生效:

$xmodmap ~/.Xmodmap

Footnotes:



blog comments powered by Disqus