换了 Arch Linux 之后,感觉需要用到 vim 的场景也变多了。那么干脆把 CapsLock 映射成 Escape 好了,反正我也基本不怎么用 CapsLock.

我们主要用到一个包 interception-dual-function-keys,通过监听内核,可以做到在指定的键盘上拦截输入,然后产生一个新输入给系统处理。

首先安装~他会有一个依赖是 interception-tools

1
sudo pacman -S interception-dual-function-keys

然后编辑或创建文件 /etc/interception/dual-function-keys/my-mapping.yaml(取名随意,我这里用了 my-mapping 和教程保持一致),然后输入以下内容

1
2
3
4
5
6
7
8
TIMING:
TAP_MILLISEC: 200 # 轻按判定阈值:200毫秒内按下并抬起则视为轻按
DOUBLE_TAP_MILLISEC: 0 # 双击功能间隔:0表示不启用双击功能

MAPPINGS:
- KEY: KEY_CAPSLOCK # 监听 Caps Lock 键
TAP: KEY_ESC # 轻按时映射为 Escape
HOLD: KEY_LEFTCTRL # 按住时为 Left Ctrl

然后再在 /etc/interception/udevmon.d/ 下编辑或创建文件 caps2esc.yaml,输入以下内容

1
2
3
- JOB: "intercept -g $DEVNODE | dual-function-keys -c /etc/interception/dual-function-keys/my-mappings.yaml | uinput -d $DEVNODE"
DEVICE:
NAME: "AT Translated Set 2 keyboard"

这个文件的意思就是:监听 DEVICE.NAME 这个输入设备,然后执行 JOB(也就是刚才写的 mapping.yaml 配置文件)进行替换。

然后重新启动 udevmon 服务就可以了

1
2
sudo systemctl enable udevmon
sudo systemctl restart udevmon

大功告成~