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

背景 :我得到了微软自然人体工学键盘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得到了hex代码。 例如,对于应该是F1键的键, xev返回

 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 ,另外,重新启动了我的笔记本电脑。

问题 :相应的function未分配给相应的键。

  • 来自xev是关键符号keysym ,这里的想法是:

    / keyboard /→ scancode →/ input driver /→ keycode →/ X server XKB /→ keysym

    man xev说: xev – 打印X事件的内容

  • 所以,你要找的是键盘的早期硬件数据,即scancode 。 它可以使用evtest找到

    man evtest 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