我正在尝试使用 HWDB 在我的 Microsoft 有线键盘 600 上重新映射LCtrl,CapsLock但无论出于何种原因,系统都看不到我所做的更改。
这就是我的hwdb
规则的样子:
evdev:input:b*v045Ep07F8*
KEYBOARD_KEY_3a=leftctrl
KEYBOARD_KEY_1d=capslock
供应商和型号代码来自lsusb
并在/sys/devices/pci0000:00/*
将配置文件复制到 后,在键盘配置中/etc/udev/hwdb.d
运行systemd-hwdb update
和发出没有任何更改。udevadm trigger
我也试过:
- 重新启动 - 没有帮助。
- 将总线明确指定为
0003
— 没有帮助。 - 确认
evtest
我使用的键码对我的键盘是正确的——是的,这些键码是正确的。 - 确认已应用的规则已在列表中列出
sudo udevadm info /sys/class/input/eventX
——是的,新规则已列出,这应该意味着它们已成功应用?然而,这些键的行为方式与以前相同。
E: KEYBOARD_KEY_1d=capslock
E: KEYBOARD_KEY_3a=leftctrl
E: ID_USB_DRIVER=usbhid
当我evdev:atkbd:dmi:*
用作设备标识符时,更改已正确应用于我的笔记本电脑键盘,因此我知道我用来重新映射键的规则和过程应该是正确的,这一定是标识符错误的问题(尽管我已经检查了五次)。
任何帮助将不胜感激。
原来我指定了错误类型的扫描码。使用 获取键代码时
evtest
,您会得到以下输出(假设按下左移按钮):我使用的代码是标准密钥代码 (42)。但事实证明,这是错误的。
您应该在 hwdb 文件中指定的实际代码是该行的扫描码
MSC_SCAN
(在本例中,它是700e1
,前面是单词value
)这有效:
参考:Rebinding Keyboard Keys @ altlinux.org(它是俄语,但它是我在网上找到的最全面的文章,强调了细微差别)
我清楚地记得在我的笔记本电脑上使用基本的扫描码并且它们可以正常工作。我不太确定为什么会这样。也许它们碰巧与
EV_MSC
某些类型的键盘上的扫描码匹配。