Table of Contents
怎么在 Ubuntu 上用 WinKey / Fn / Ctrl / Tab 键替换 Esc 键
在 Ubuntu 下可以用 xmodmap 改键,把不常用的按键映射成 Esc。这对 Vim 用户尤其有用:Esc 位置偏远,而 WinKey、Fn、右 Ctrl 或 Tab 往往更容易按到。
先确认 keycode
首先需要知道每个按键对应的 keycode。可以使用 xev 在键盘 layout 相同的电脑上查看:
xev
运行后按下目标按键,在终端输出里查找类似下面的内容:
keycode 9 (keysym 0xff1b, Escape)
我这里查到:
Esc的keycode是9,keysym 是Escape。- WinKey 的
keycode是115,通常对应Super_L。 - 右 Ctrl 的
keycode是105,对应Control_R。 - 某些键盘上 Fn / WakeUp 键的
keycode是151,对应XF86WakeUp。 - Tab 的
keycode通常是23,对应Tab。
不同键盘、不同系统版本可能不完全一样,所以请以 xev 的实际输出为准。
写入 .Xmodmap
在用户家目录下建立或编辑 .Xmodmap 文件:
nano ~/.Xmodmap
把需要的映射写进去,保存后重新登录即可。也可以先手动加载测试:
xmodmap ~/.Xmodmap
用 WinKey 替换 Esc
如果想让 WinKey 变成 Esc,并让原来的 Esc 变成 WinKey,可以写成:
keycode 9 = Super_L
keycode 115 = Escape
如果只想让 WinKey 变成 Esc,不改原来的 Esc,只保留第二行即可:
keycode 115 = Escape
用 Fn / WakeUp 键替换 Esc
部分键盘的 Fn 键本身不会被系统直接识别;如果 xev 能看到它输出 XF86WakeUp 或类似键值,可以这样设置:
keycode 9 = XF86WakeUp
keycode 151 = Escape
如果只想把该键改成 Esc,只写:
keycode 151 = Escape
用右 Ctrl 替换 Esc
右 Ctrl 属于 Control modifier,改键前后最好先从 Control 组合中移除,再加回需要保留的键。把右 Ctrl 改成 Esc 可以写成:
remove Control = Control_R
keycode 105 = Escape
如果还想把原来的 Esc 改成右 Ctrl,再写:
keycode 9 = Control_R
add Control = Control_R
完整版本如下:
remove Control = Control_R
keycode 9 = Control_R
keycode 105 = Escape
add Control = Control_R
用 Tab 替换 Esc
如果想把 Tab 改成 Esc:
keycode 23 = Escape
如果想交换 Tab 和 Esc:
keycode 9 = Tab
keycode 23 = Escape
恢复默认设置
如果改错了,可以临时清空当前用户的自定义映射:
mv ~/.Xmodmap ~/.Xmodmap.bak
然后重新登录,或重启 X 会话。再次修改前,建议重新用 xev 确认 keycode。
