发布于
610 字 · 4 分钟

键位映射:在 Linux 和 Windows 上自定义键盘布局

AI 摘要

作者
  • avatar
    姓名
    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 来实现键位映射。

操作步骤

修改注册表有风险,建议先备份注册表或创建系统还原点。

  1. Win + R 打开运行对话框,输入 regedit 打开注册表编辑器
  2. 导航到:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard Layout
  3. 右键 → 新建 → 二进制值,命名为 Scancode Map
  4. 右键 Scancode Map → 修改,输入映射数据
  5. 重启计算机使更改生效

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 键值,然后重启计算机即可恢复默认键位。

参考

版权声明

除非另有说明,本文内容采用 CC BY-NC-SA 4.0 许可协议。转载请注明出处。