macOS 上 hidutil 上重映射按键
引言
最近换了一款 Logi K75m 键盘,但在使用过程中遇到一个痛点:Caps Lock(大写锁定键)反应迟钝。为了防止误触,macOS 对该键设计了一个长按保护机制。在 MacBook 自带键盘上表现尚可,但在一些第三方键盘上,即使是正常的快速点按也经常被识别为“无效”或误触发“长按锁定”。
如果你像我一样有“系统洁癖”,不想为了改一个键位就安装 Karabiner-Elements 这种带驱动且有多个后台进程的重型软件,那么使用系统自带的 hidutil 是最优雅的解决方案。
核心思路
将物理 Caps Lock 键在底层映射为一个系统几乎不使用的功能键(如 F18)。
优点:F18 是普通功能键,没有长按延迟,触发极速。
副作用:失去物理大写锁定功能(可用 Shift + 字母 或快捷键代替)。
操作步骤
临时测试映射
打开 终端 (Terminal),输入以下命令立即生效:
1 | hidutil property --set '{"UserKeyMapping":[ |
注:0x39 代表 Caps Lock,0x6D 代表 F18。
执行后,去 系统设置 -> 键盘 -> 键盘快捷键 -> 输入法 ,将“选择上一个输入源”改为按一下 Caps Lock,此时系统应识别为 F18。
持久化配置(重启不失效)
由于 hidutil 命令在重启后会重置,我们需要创建一个轻量的开机启动项。
在终端执行以下脚本,它会在 ~/Library/LaunchAgents/ 目录下生成一个配置文件:
1 | printf '<?xml version="1.0" encoding="UTF-8"?> |
然后加载该配置:
1 | launchctl load ~/Library/LaunchAgents/com.user.capsfix.plist |
如何取消映射(恢复原状)
如果你换了键盘,或者想要找回原本的大写锁定功能,按照以下两步即可彻底撤销修改:
第一步:卸载启动自动映射
在终端执行:
1 | # 停止自动任务 |
第二步:重置当前映射
直接清空当前的硬件映射表:
1 | hidutil property --set '{"UserKeyMapping":[]}' |
执行完毕后,Caps Lock 将立即恢复原始的大写锁定功能。
第三步:去系统设置中将 Caps Lock 恢复为原本功能(如果之前修改过快捷键)。
去 系统设置 -> 键盘 -> 键盘快捷键 -> 输入法 ,点击 恢复默认 即可。
总结
这种方法利用了 macOS 的原生能力,零内存占用、零后台进程,完美解决了 Logi K75m 等第三方键盘在 Mac 上的“水土不服”。对于追求极致系统响应速度和纯净度的用户来说,这是不二之选。
按键编码
Caps Lock: 0x700000039F18: 0x70000006DPage Up- 0x70000004BHome: 0x70000004APage Down: 0x70000004EEnd: 0x70000004D