接上篇,我们说说 X 的键盘映射,网上已经有不少文章,所以我只简要重复一下。当然看 man 手册永远是重要的。
可以使用命令 xev 得到按键的 keycode ,使用 xmodmap -pke 得到当前的映射,修改,然后像下面这样设置。
xmodmap -e "keycode NUMBER = KEYSYMNAME ..."
如果写成配置文件,通常使用 .xmodmaprc ,然后用运行 xmodmap .xmodmaprc 加载,我是把下面这行加进 .xinitrc 里面,startx 过程中就执行了。
xmodmap ~/.xmodmaprc
下面是我的 .xmodmaprc。完成两件事,一是把 Escape Caps_Lock 和 Control 调换了一下,二是把 F1-12 定义为切换终端 1-12 ,F1-F12 用 Shift+F? 代替。
! switch Escape and Caps_Lock for emacs
remove Lock = Caps_Lock
keycode 66 = Escape
keycode 9 = Caps_Lock
add Lock = Caps_Lock
! set original Menu to Control_R
remove Control = Control_R
keycode 135 = Control_R
add Control = Control_R
! switch console with F1-12
! Shift-F? is the original F?
keycode 67 = XF86Switch_VT_1 F1
keycode 68 = XF86Switch_VT_2 F2
keycode 69 = XF86Switch_VT_3 F3
keycode 70 = XF86Switch_VT_4 F4
keycode 71 = XF86Switch_VT_5 F5
keycode 72 = XF86Switch_VT_6 F6
keycode 73 = XF86Switch_VT_7 F7
keycode 74 = XF86Switch_VT_8 F8
keycode 75 = XF86Switch_VT_9 F9
keycode 76 = XF86Switch_VT_10 F10
keycode 95 = XF86Switch_VT_11 F11
keycode 96 = XF86Switch_VT_12 F12
格式与 Console 下面类似,是的。唯一值得一说的是
keycode NUMBER = KEYSYMNAME ...
这种格式,KEYSYMNAME 最多可以支持到8列,但是 man 手册说后4列不是每个 X server 都支持,而前4列先后是:plain Key, Shift+Key, Mode_switch+Key, Mode_switch+Shift+Key 。如果你要用到 Mode_switch 用上面语法定义一个键就可以了。
就是这些了,但是 X 把键盘的映射实现得很复杂,我是没有耐心再研究了,如果有兴趣可以看看 /usr/share/X11/xkb/ 下面那些东西,再找东西读读。呵!
阅读(4840) | 评论(0) | 转发(0) |