- 发布于
键位映射:在 Linux 和 Windows 上自定义键盘布局
AI 摘要
- 作者

- 姓名
- Corner430
- 社交账号

键盘上有些按键使用频率很低(比如 Caps Lock),却占据了很好的位置。通过键位映射,可以把这些按键重新分配为更常用的功能,提升操作效率。
Linux(X11)键位映射
在使用 X11 的 Linux 发行版上,键位映射非常简单。
方法:修改 evdev 键码文件
编辑 /usr/share/X11/xkb/keycodes/evdev 文件,找到需要交换的按键定义并修改。
例如,交换 Caps Lock 和左 Ctrl:
sudo vim /usr/share/X11/xkb/keycodes/evdev
找到以下两行:
<CAPS> = 66;
<LCTL> = 37;
将数字交换:
<CAPS> = 37;
<LCTL> = 66;
保存后注销重新登录即可生效。
使用 setxkbmap(临时生效)
如果只需要临时交换 Caps Lock 和 Ctrl,可以用 setxkbmap:
# 交换 Caps Lock 和左 Ctrl
setxkbmap -option ctrl:swapcaps
# 将 Caps Lock 映射为 Ctrl
setxkbmap -option ctrl:nocaps
# 还原默认
setxkbmap -option
将命令写入 ~/.xprofile 可以实现登录时自动生效。
Windows 键位映射
Windows 可以通过修改注册表中的 Scancode Map 来实现键位映射。
操作步骤
修改注册表有风险,建议先备份注册表或创建系统还原点。
- 按
Win + R打开运行对话框,输入regedit打开注册表编辑器 - 导航到:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard Layout - 右键 → 新建 → 二进制值,命名为
Scancode Map - 右键
Scancode Map→ 修改,输入映射数据 - 重启计算机使更改生效
Scancode Map 数据格式
以将 Caps Lock 映射为左 Ctrl 为例,输入:
00 00 00 00 00 00 00 00
02 00 00 00 1D 00 3A 00
00 00 00 00
数据结构说明:
| 部分 | 内容 | 说明 |
|---|---|---|
| 第 1 部分 | 00 00 00 00 00 00 00 00 | 版本信息,固定 8 个 00 |
| 第 2 部分 | 02 00 00 00 | 映射条目数(包括结尾的终止符),低位在前。1 条映射 = 02,2 条 = 03 |
| 第 3 部分 | 1D 00 3A 00 | 每 4 字节一组:前 2 字节是目标键扫描码,后 2 字节是原始键扫描码 |
| 结尾 | 00 00 00 00 | 终止符,固定 4 个 00 |
扫描码在注册表中需要低位在前。例如左 Ctrl 的扫描码是
001D,写入时为1D 00。
还原方法
删除注册表中的 Scancode Map 键值,然后重启计算机即可恢复默认键位。
参考
版权声明
- 作者: Corner430
- 标题: 键位映射:在 Linux 和 Windows 上自定义键盘布局
- 链接: https://corner430-ai-blog.vercel.app/blog/键位映射
- 许可协议: CC BY-NC-SA 4.0
除非另有说明,本文内容采用 CC BY-NC-SA 4.0 许可协议。转载请注明出处。