怎么在Ubuntu上用WinKey/Fn/Ctrl/Tab键替换Esc键

怎么在 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)

我这里查到:

  • Esckeycode9,keysym 是 Escape
  • WinKey 的 keycode115,通常对应 Super_L
  • 右 Ctrl 的 keycode105,对应 Control_R
  • 某些键盘上 Fn / WakeUp 键的 keycode151,对应 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。

Leave a Reply