我有一个G7BTS遥控器,它有键盘和多媒体按钮。除了"OK“按钮之外,它的大多数按钮都工作得很好。
OK按钮有一个键代码353,这意味着KEY_SELECT。但是我的ubuntu 20.04不认识它。
以下是我所做的一些研究:
sudo evtest产出:
/dev/input/event9: G7BTS Keyboard
/dev/input/event10: G7BTS Mouse
/dev/input/event11: G7BTS Consumer Control
/dev/input/event12: G7BTS System Controlgrep "" /sys/class/input/event11/device/id/*产出:
/sys/class/input/event11/device/id/bustype:0005
/sys/class/input/event11/device/id/product:0041
/sys/class/input/event11/device/id/vendor:045e
/sys/class/input/event11/device/id/version:0300sudo evtest /dev/input/event11产出:
Testing ... (interrupt to exit)
Event: time 1640250050.701930, type 4 (EV_MSC), code 4 (MSC_SCAN), value c0041
Event: time 1640250050.701930, type 1 (EV_KEY), code 353 (KEY_SELECT), value 1
Event: time 1640250050.701930, -------------- SYN_REPORT ------------/etc/udev/hwdb.d/60-keyboard.hwdb我试图将OK按钮重新映射为“enter”。
60-keyboard.hwdb文件内容:
# G7BTS
evdev:input:b0005v045Ep0041*
KEYBOARD_KEY_c0041=entersudo udevadm hwdb --test='evdev:input:b0005v045ep0041*'产出:
KEYBOARD_KEY_c0041=enter到目前为止,当我按OK按钮时,仍然看不到xev中的任何输出。
如有任何建议和帮助,将不胜感激。
发布于 2021-12-29 03:27:47
谢谢大家。
我花了几天时间才找到解决办法,终于找到了正确的解决办法。
将扫描码映射到密钥码
X协议的版本11只支持单字节密钥编码.因此,255以上的密钥代码被忽略。到目前为止,Ubuntu20.04LTS仍然使用X协议的版本11。
我的G7BTS远程键盘有一个“OK”按钮。此按钮的密钥代码为353。在“xev”中,当按下此按钮时,不会发生任何事情。
简单地说,解决方案是创建一个hwdb配置文件,用于将某些键重新映射到其他键。
udev提供了一个名为hwdb的内置函数来维护/etc/udev/hwdb.bin中的硬件数据库索引。数据库是从目录/usr/lib/udev/hwdb.d/、/run/udev/hwdb.d/和/etc/udev/hwdb.d/中具有.hwdb扩展名的文件编译的。默认的扫描代码到密钥代码映射文件是/usr/lib/udev/hwdb.d/60-keyboard.hwdb。
通用输入设备(也是USB键盘),由usb内核调制解调器标识:
evdev:input:b<bus_id>v<vendor_id>p<product_id>e<version_id>-<modalias>其中、和是四位数的十六进制大写供应商、产品和版本ID。
如何找到上面的ids是关键。
install hardinfo
sudo apt install hardinfo
software – System Profiler – Input Devices – G7BTS Comsumer ControlDevice Information
Name G7BTS Comsumer Control
Type keyboard
Bus 0x0005
Vender 0x045e
Product 0x0041
Version 0x0300另一件重要的事情是获取“OK”按钮的扫描代码。
install evtest
sudo apt-get install evtest
sudo evtestNo device specified, trying to scan all of /dev/input/event*
Available devices:
/dev/input/event0: Lid Switch
/dev/input/event1: Sleep Button
/dev/input/event2: Power Button
/dev/input/event3: AT Translated Set 2 keyboard
/dev/input/event4: SynPS/2 Synaptics TouchPad
/dev/input/event5: TPPS/2 IBM TrackPoint
/dev/input/event6: ThinkPad Extra Buttons
/dev/input/event7: Video Bus
/dev/input/event8: Integrated Camera: Integrated C
/dev/input/event9: G7BTS Keyboard
/dev/input/event10: G7BTS Mouse
/dev/input/event11: G7BTS Consumer Control
/dev/input/event12: G7BTS System Control
/dev/input/event13: HDA Intel PCH Mic
/dev/input/event14: HDA Intel PCH Dock Mic
/dev/input/event15: HDA Intel PCH Headphone
/dev/input/event16: HDA Intel PCH Dock Headphone
/dev/input/event17: HDA Intel PCH HDMI/DP,pcm=3
/dev/input/event11: HDA Intel PCH HDMI/DP,pcm=7
/dev/input/event19: HDA Intel PCH HDMI/DP,pcm=8
Select the device event number [0-19]: ^C注意“/dev/input/Event11”
sudo evtest /dev/input/event11然后按“确定”按钮,输出如下
Event: time 1640238746.775220, type 4 (EV_MSC), code 4 (MSC_SCAN), value c0041
Event: time 1640238746.775220, type 1 (EV_KEY), code 353 (KEY_SELECT), value 0
Event: time 1640238746.775220, -------------- SYN_REPORT ------------注意“价值c0041”。这个值c0041是“OK”按钮的扫描代码。
现在,我们有我们需要的ids和扫描代码。将它们放入上面所述的“通用输入设备(也是USB )”中,最后我们有了下面的配置文件G7BTS.hwdb:
evdev:input:b0005v045Ep0041e0300*
KEYBOARD_KEY_c0041=enter在上下文中,“OK”按钮映射到“enter”键。你可以把它映射到你想要的任何键中。
sudo mv G7BTS.hwdb /etc/udev/hwdb.d/sudo udevadm hwdb --update
sudo udevadm trigger --verbose sudo udevadm hwdb --test='evdev:input:b0005v045Ep0041e0300*'结果是
KEYBOARD_KEY_c0041=enter这是重新映射键的所有步骤。这些重新映射在重新启动后仍然有效。
https://askubuntu.com/questions/1383427
复制相似问题