首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >多媒体键盘重映射

多媒体键盘重映射
EN

Ask Ubuntu用户
提问于 2021-12-23 09:18:02
回答 1查看 750关注 0票数 1

我有一个G7BTS遥控器,它有键盘和多媒体按钮。除了"OK“按钮之外,它的大多数按钮都工作得很好。

OK按钮有一个键代码353,这意味着KEY_SELECT。但是我的ubuntu 20.04不认识它。

以下是我所做的一些研究:

  1. sudo evtest

产出:

代码语言:javascript
复制
/dev/input/event9:  G7BTS Keyboard
/dev/input/event10: G7BTS Mouse
/dev/input/event11: G7BTS Consumer Control
/dev/input/event12: G7BTS System Control
  1. grep "" /sys/class/input/event11/device/id/*

产出:

代码语言:javascript
复制
/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:0300
  1. sudo evtest /dev/input/event11

产出:

代码语言:javascript
复制
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 ------------
  1. /etc/udev/hwdb.d/60-keyboard.hwdb

我试图将OK按钮重新映射为“enter”。

60-keyboard.hwdb文件内容:

代码语言:javascript
复制
# G7BTS
evdev:input:b0005v045Ep0041*
 KEYBOARD_KEY_c0041=enter
  1. sudo udevadm hwdb --test='evdev:input:b0005v045ep0041*'

产出:

代码语言:javascript
复制
KEYBOARD_KEY_c0041=enter

到目前为止,当我按OK按钮时,仍然看不到xev中的任何输出。

如有任何建议和帮助,将不胜感激。

EN

回答 1

Ask Ubuntu用户

回答已采纳

发布于 2021-12-29 03:27:47

谢谢大家。

我花了几天时间才找到解决办法,终于找到了正确的解决办法。

参考

将扫描码映射到密钥码

背景

X协议的版本11只支持单字节密钥编码.因此,255以上的密钥代码被忽略。到目前为止,Ubuntu20.04LTS仍然使用X协议的版本11。

我的G7BTS远程键盘有一个“OK”按钮。此按钮的密钥代码为353。在“xev”中,当按下此按钮时,不会发生任何事情。

溶液

简单地说,解决方案是创建一个hwdb配置文件,用于将某些键重新映射到其他键。

udev

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内核调制解调器标识:

代码语言:javascript
复制
evdev:input:b<bus_id>v<vendor_id>p<product_id>e<version_id>-<modalias>

其中、和是四位数的十六进制大写供应商、产品和版本ID。

如何找到上面的ids是关键。

代码语言:javascript
复制
install hardinfo
sudo apt install hardinfo
software – System Profiler – Input Devices – G7BTS Comsumer Control
代码语言:javascript
复制
Device Information
 Name       G7BTS Comsumer Control
 Type       keyboard
 Bus        0x0005
 Vender     0x045e
 Product    0x0041
 Version    0x0300

另一件重要的事情是获取“OK”按钮的扫描代码。

代码语言:javascript
复制
install evtest
sudo apt-get install evtest
sudo evtest
代码语言:javascript
复制
No 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”

代码语言:javascript
复制
sudo evtest /dev/input/event11

然后按“确定”按钮,输出如下

代码语言:javascript
复制
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”按钮的扫描代码。

使hwdb文件

现在,我们有我们需要的ids和扫描代码。将它们放入上面所述的“通用输入设备(也是USB )”中,最后我们有了下面的配置文件G7BTS.hwdb:

代码语言:javascript
复制
evdev:input:b0005v045Ep0041e0300*
 KEYBOARD_KEY_c0041=enter

在上下文中,“OK”按钮映射到“enter”键。你可以把它映射到你想要的任何键中。

将文件放入目标

代码语言:javascript
复制
sudo mv G7BTS.hwdb /etc/udev/hwdb.d/

更新

代码语言:javascript
复制
sudo udevadm hwdb --update
sudo udevadm trigger --verbose 

测试

代码语言:javascript
复制
sudo udevadm hwdb --test='evdev:input:b0005v045Ep0041e0300*'

结果是

代码语言:javascript
复制
KEYBOARD_KEY_c0041=enter

The End

这是重新映射键的所有步骤。这些重新映射在重新启动后仍然有效。

票数 2
EN
页面原文内容由Ask Ubuntu提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://askubuntu.com/questions/1383427

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档