Hacking Limbo

Reading / Coding / Hacking

用 xmodmap 更改键盘按键映射

好久没更新 Blog 了,来篇水文充充数吧。一个多月前买了一个小键盘,手感很好,可惜就是一些键位按起来不顺手,比如 Ctrl 要整只手后退才能按到,比如我熟悉的 Win 键的位置放了一个菜单键(对 Awesome 党来说无法接受咯),于是研究了一下 xmodmap 的用法,把 Ctrl 和 Caps Lock 互换,再把菜单键映射成 Win 键。

xmodmap 用起来很简单,关键在于怎样获取 keycode 和目标键位的名称。以下内容来自 man xmodmap + Google + 自己的试验。

  • 查看 keycode 可以用 xmodmap -pke | grep <键位名称>,当然也可以用 xev 捕捉(不过这个干扰信息实在太多了)

  • 找到 keycode 和目标键位名称之后,在 ~/.Xmodmap 里写入你想要的按键映射,最常用的语法是 keycode <actual key number>=<target key>,比如 keycode 89 = F4 就将 PageDown 键变成了 F4 键(估计没什么人会这么干的啦)。

  • 如果要设定在 Shift 键按下之后的映射,比如将 Shift + F4 变成 F5,可以这样写:keycode 70 = F4 F5。第一个代表普通状态的映射,第二个是 Shift 按下后的行为。

  • 多媒体按键(通常笔记本的键盘上有一堆)的 keycode 等信息可以在 XKeysymDB 这个文件里找到,这个文件通常是在 /usr/share/X11(我这里不知道为什么没有)

  • KDE 的用户可能需要在 ~/.xprofile 里加入这段代码:

    if [ -f $HOME/.Xmodmap ]; then
          /usr/bin/xmodmap $HOME/.Xmodmap
    fi
  • Emacs 特有的问题:如果你将某个键映射为 Meta 的话,在 Emacs 里 Alt 键就会失效(原因不明),解决方法是在 Emacs 里再将 Meta 映射为别的按键……