无法使用 HWDB 重新映射 Microsoft 键盘上的按键

无法使用 HWDB 重新映射 Microsoft 键盘上的按键

我正在尝试使用 HWDB 重新映射LCtrlCapsLock的 Microsoft Wired Keyboard 600,但无论出于什么原因,系统都看不到我所做的更改。

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:*作为设备标识符时,更改正确地应用于我的笔记本电脑键盘,所以我知道我用来重新映射按键的规则和过程应该是正确的,这一定是错误标识符的问题(虽然我已经五次检查过它)。

任何帮助将不胜感激。

答案1

事实证明我指定了错误的扫描码类型。使用 获取键码时evtest,您会得到以下输出(假设按下了左移键):

...
Event: time xxx.xxx, type 4 (EV_MSC), code 4 (MSC_SCAN), value 700e1
Event: time xxx.xxx, type 1 (EV_KEY), code 42 (KEY_LEFTSHIFT), value 0
...

我使用的代码是标准密钥代码 (42)。但事实证明,这是错误的。

你应该在 hwdb 文件中指定的实际代码是扫描码来自该MSC_SCAN行(在此示例中为 ,700e1前面是 单词value

这有效:

evdev:input:b*v045Ep07F8*
 KEYBOARD_KEY_70039=leftctrl
 KEYBOARD_KEY_700e0=capslock

参考:重新绑定键盘按键@altlinux.org(虽然是俄文,但这是我在网上找到的强调这种细微差别的最全面的文章)

我清楚地记得在笔记本电脑上使用基本扫描码时它们能够正常工作。我不太清楚为什么会这样。也许它们恰好与EV_MSC某些类型的键盘上的扫描码相匹配。

相关内容