通过 udev/hwdb.d 自定义键盘映射不起作用

通过 udev/hwdb.d 自定义键盘映射不起作用

背景:我买了 Microsoft Natural Ergonomic Keyboard 4000,但有几个键在 Ubuntu 下根本不起作用,例如 F1-F10 键。我的机器上运行着 Ubuntu 14.04.2 LTS。

我的解决方案:我创建了文件/etc/udev/hwdb.d/61-keyboard-local.hwdb并设置了一些自定义规则:

keyboard:usb:v045ep00db*
 KEYBOARD_KEY_0x1008ff27=pageup
 KEYBOARD_KEY_0x1008ff26=pagedown
 KEYBOARD_KEY_0xff6a=F1
 KEYBOARD_KEY_0x1008ff6b=F5

我通过 获得了十六进制代码xev。例如,对于应该是密钥的密钥F1xev返回

KeyRelease event, serial 37, synthetic NO, window 0x4400001,
    root 0xa2, subw 0x0, time 1746028, (12,-12), root:(61,40),
    state 0x10, keycode 146 (keysym 0xff6a, Help), same_screen YES,
    XLookupString gives 0 bytes: 
    XFilterEvent returns: False

更改文件后,我运行udevadm hwdb --updateudevadm trigger重新启动了笔记本电脑。

问题:未将相应功能分配给相应的键。

答案1

  • 那一个xev是关键符号keysym,这里是想法:

    /键盘/ → scancode→ /输入驱动程序/ → keycode→ /X 服务器 XKB/ →keysym

    man xev说:- 打印内容X事件

  • 因此,您要查找的是键盘的早期硬件数据,即scancode。可以使用以下方法找到它evtest

    man evtest 事件测试- 输入设备事件监视器和查询工具

    1. 安装

      sudo apt-get install evtest
      
    2. 跑步

      sudo evtest
      

      输出

      Event: time 1435906588.943349, type 4 (EV_MSC), code 4 (MSC_SCAN), value 3b
      Event: time 1435906588.943349, type 1 (EV_KEY), code 59 (KEY_F1), value 1
      

      扫描码是3b

答案2

我使用以下信息在 Ubuntu 20.04 中得到了一个可用的外接键盘https://www.foell.org/justin/remapping-keyboard-keys-in-ubuntu-with-udev-evdev/

  1. 用于sudo evtest查找有关键盘的信息,例如:
Input driver version is 1.0.1
Input device ID: bus 0x5 vendor 0x5ac product 0x24f version 0x11b
Input device name: "Keychron K6 Keyboard"
  1. 用于sudo evemu-describe查找键盘的属性,包括前导零。在输出中,您可以找到类似以下内容:
# Properties:
N: Keychron K6 Keyboard
I: 0005 05ac 024f 011b
  1. 像你之前那样创建 .hwdb 文件,但是包括所有前导 000, 和将任何十六进制符号改为大写喜欢:
# Input device ID: bus 0x5 vendor 0x5ac product 0x24f version 0x11b
# evdev:input:b<bus_id>v<vendor_id>p<product_id>e<version_id>-<modalias>
evdev:input:b0005v05ACp024F*

  1. 您不必重新启动系统,只需执行以下操作:
$ sudo systemd-hwdb update
$ sudo udevadm trigger
  1. 你可以使用以下方法检查你的键盘是否已正确映射$ udevadm info /dev/input/event20(将 event20 替换为你的键盘事件)

相关内容