交换 Escape 和 Caps_Lock

交换电脑的 Escape 和 Caps_Lock

我在平时操作电脑时候,EscCaps_Lock 要常用的多,但是手指按下 Caps_Lock 要更加方便,因此想要把键位修改

Windows

修改注册表来交换按键

1
2
3
4
Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard Layout]
"Scancode Map"=hex:00,00,00,00,00,00,00,00,03,00,00,00,3a,00,01,00,01,00,3a,00,00,00,00,00

修复到没有更换的状态

1
2
3
4
Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard Layout]
"Scancode Map"=hex:00,00,00,00,00,00,00,00,03,00,00,00,3a,00,01,00,01,00,3a,00,00,00,00,00

保存后更改后缀名为 .reg 双击重启即可交换

Linux

修改 ~/.Xmodmap 文件即可,如果没有这个文件可以手动新建

Xev

首先在命令行运行 xev 命令, 就会弹出一个窗口,这时按下任何键,在终端都会输出一串信息,里面包含了这个按键对应的编码(keycode)

通过执行命令可以查询到,Escape对应的编码是 9, Caps_Lock是66

Xmodmap

安装

xmodmap can be installed through the xorg-xmodmap package.

Optionally, install xkeycaps, which is a graphical front-end to xmodmap.

安装 xorg-xmodmap 即可,也可以安装 xkeycaps 来进行图形化的配置。

之后运行命令即可生成当前映射的键盘布局(可选)

1
xmodmap -pke > ~/.Xmodmap

执行这条命令使配置文件生效

1
xmodmap ~/.Xmodmaps

新建~/.Xmodmap,加入以下代码(编辑刚生成的文件的话,找到keycode分别为9和66的那一行更改)

1
2
keycode 9 = Caps_Lock NoSymbol Caps_Lock
keycode 66 = Escape NoSymbol Escape

每一个 keycode 后面配置的是按下这个键以及结合修饰键的效果,可以查看 Arch Wiki

每个键码后面都跟着映射到的键符。上面的例子意思是:键码57被映射到小写n键符,而大写N键符则对应按下Shift输入的57号键码。

表中的每一列键符都对应着一个特定的修饰键组合,Key为键码所对应的按键:

  1. Key
  2. Shift+Key
  3. Mode_switch+Key
  4. Mode_switch+Shift+Key
  5. ISO_Level3_Shift+Key
  6. ISO_Level3_Shift+Shift+Key

并非所有的键符都必须设置,但如果要跳过一个键符,请将其值设为NoSymbol

此时使配置生效发现,按下Esc和Caps_Lock之后都可以大写锁定,这是因为没有清除掉原有的Caps_Lock绑定的大写锁定功能

在重排之前,需要清除修饰键。原来的键和新的键都得清除。例如,如果您打算将Caps_Lock换到A键,将B换成NumLock键,那么Caps_Lock,Num_Lock,A,B四个键都得清除,然后分配键位,最后再把他们加回来。

因此加上

1
2
clear lock
add lock = Caps_Lock

就可以完成更改,使配置生效即可

一般这样的键位在编辑文件时经常用到,可以将其加入 /etc/profile 或者.zshrc

1
if [ -f ~/.Xmodmap ]; then xmodmap ~/.Xmodmap; fi

这样每次打开 zsh 都可以自动设置键位


修改~/.Xmodmap 的方式对于 Minecraft 不生效,如果使用的是 KDE, 可以直接在系统设置里面对此进行设置,可以对 Minecraft 也生效