多媒体键盘重新映射

多媒体键盘重新映射

我有一个 G7BTS 遥控器,它有键盘和多媒体按钮。除了“OK”按钮外,它的大多数按钮都可以正常工作。

OK 按钮的键码为 353,代表 KEY_SELECT。但我的 ubuntu 20.04 无法识别它。

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

  1. sudo evtest

输出:

/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/*

输出:

/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

输出:

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

我尝试将“确定”按钮重新映射为“输入”。

60-keyboard.hwdb文件内容:

# G7BTS
evdev:input:b0005v045Ep0041*
 KEYBOARD_KEY_c0041=enter
  1. sudo udevadm hwdb --test='evdev:input:b0005v045ep0041*'

输出:

KEYBOARD_KEY_c0041=enter

到目前为止,当我按下 OK 按钮时,仍然无法在 xev 中看到任何输出。

任何建议和帮助都将不胜感激。

答案1

感谢大家。

我花了好几天的时间才找到解决方案,最后我找到了正确的方法。

参考

将扫描码映射到键码

背景

X 协议版本 11 仅支持单字节键代码。因此,255 以上的键代码将被忽略。到目前为止,Ubuntu 20.04 LTS 仍使用 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 键盘):

evdev:input:b<bus_id>v<vendor_id>p<product_id>e<version_id>-<modalias>

其中 <bus_id>、<vendor_id> 和 <version_id> 是 4 位十六进制大写供应商、产品和版本 ID

如何找到上面的那些id才是关键

install hardinfo
sudo apt install hardinfo
software – System Profiler – Input Devices – G7BTS Comsumer Control
Device Information
 Name       G7BTS Comsumer Control
 Type       keyboard
 Bus        0x0005
 Vender     0x045e
 Product    0x0041
 Version    0x0300

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

install evtest
sudo apt-get install evtest
sudo evtest
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”

sudo evtest /dev/input/event11

然后按“OK”按钮,输出如下

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 文件

现在,我们得到了需要的id和扫描码,把它们放到上面的“USB内核modalias识别的通用输入设备(也可以是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

结束

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

答案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 替换为你的键盘事件)

相关内容