我有这宏键盘。
在 Windows 上它可以按预期工作,但在 Linux 下(具有最新操作系统的 Raspberry Pi 0w 和 Debian 12 的桌面安装)却不能。据我所知,它已被检测到,但我没有从中得到任何事件。
$ sudo dmesg | grep hid
[ 881.432956] hid-generic 0003:0483:5752.000E: hiddev0,hidraw1: USB HID v1.11 Device [Vaydeer 9-key Smart Keypad] on usb-0000:00:15.0-2/input0
[ 881.494769] hid-generic 0003:0483:5752.000F: input,hidraw2: USB HID v1.11 Keyboard [Vaydeer 9-key Smart Keypad] on usb-0000:00:15.0-2/input1
[ 881.496033] hid-generic 0003:0483:5752.0010: hiddev1,hidraw3: USB HID v1.11 Device [Vaydeer 9-key Smart Keypad] on usb-0000:00:15.0-2/input2
[ 881.559126] hid-generic 0003:0483:5752.0011: input,hidraw4: USB HID v1.11 Mouse [Vaydeer 9-key Smart Keypad] on usb-0000:00:15.0-2/input3
$ sudo evtest
No device specified, trying to scan all of /dev/input/event*
Available devices:
/dev/input/event0: AT Translated Set 2 keyboard
/dev/input/event1: Sleep Button
/dev/input/event10: HDA Digital PCBeep
/dev/input/event11: HDA Intel PCH Front Headphone
/dev/input/event12: HDA Intel PCH HDMI/DP,pcm=3
/dev/input/event13: HDA Intel PCH HDMI/DP,pcm=7
/dev/input/event14: HDA Intel PCH HDMI/DP,pcm=8
/dev/input/event15: Vaydeer 9-key Smart Keypad
/dev/input/event16: Vaydeer 9-key Smart Keypad Mouse
/dev/input/event17: Vaydeer 9-key Smart Keypad Consumer Control
/dev/input/event18: Vaydeer 9-key Smart Keypad System Control
/dev/input/event2: Lid Switch
/dev/input/event3: Power Button
/dev/input/event4: ELAN0501:00 04F3:305B Mouse
/dev/input/event5: ELAN0501:00 04F3:305B Touchpad
/dev/input/event6: Video Bus
/dev/input/event7: Acer WMI hotkeys
/dev/input/event8: PC Speaker
/dev/input/event9: HD WebCam: HD WebCam
Select the device event number [0-18]: 15
Input driver version is 1.0.1
Input device ID: bus 0x3 vendor 0x483 product 0x5752 version 0x111
Input device name: "Vaydeer 9-key Smart Keypad"
Supported events:
Event type 0 (EV_SYN)
Event type 1 (EV_KEY)
Event code 1 (KEY_ESC)
Event code 2 (KEY_1)
Event code 3 (KEY_2)
Event code 4 (KEY_3)
Event code 5 (KEY_4)
Event code 6 (KEY_5)
Event code 7 (KEY_6)
Event code 8 (KEY_7)
Event code 9 (KEY_8)
Event code 10 (KEY_9)
Event code 11 (KEY_0)
Event code 126 (KEY_RIGHTMETA)
...
Event code 127 (KEY_COMPOSE)
Event type 4 (EV_MSC)
Event code 4 (MSC_SCAN)
Event type 17 (EV_LED)
Event code 0 (LED_NUML) state 0
Event code 1 (LED_CAPSL) state 0
Event code 2 (LED_SCROLLL) state 0
Event code 3 (LED_COMPOSE) state 0
Event code 4 (LED_KANA) state 0
Key repeat handling:
Repeat type 20 (EV_REP)
Repeat code 0 (REP_DELAY)
Value 250
Repeat code 1 (REP_PERIOD)
Value 33
Properties:
Testing ... (interrupt to exit)
如果我尝试使用任何其他键盘,使用 evtest 我可以看到按键事件,而使用这个键盘我什么也得不到。
该产品没有明确声明与Linux兼容,但我以前从未遇到过不兼容的键盘。有什么我可以尝试让它发挥作用,或者至少更深入地研究这个问题吗?
答案1
我在 Raspberry Pi 上尝试这个东西时遇到了同样的问题。找到这篇文章后,我尝试查看相应的/dev/hidraw*
输入以查看数据是否到达那里。
所以我做了一个cat /dev/hidraw7
,实际上看到了一些事件被收到。而且,令我完全惊讶的是,键盘奇迹般地开始按预期工作。事实证明,只要有东西在监听原始接口,它就可以工作!
对启动后键盘提供的 4 个输入运行一个简单的命令,一切正常。键盘输入、宏、鼠标输入甚至媒体和音量控制。 (不过,打开应用程序和网页需要该软件,这并不奇怪。)cat /dev/hidrawX > /dev/null &
我编写了这个简单的脚本来在所有相关的 hidraw 界面上运行 cat ,灵感来自关于如何将它们映射到设备名称的博客文章 经过阿瓦尼蒂斯·克里斯托斯:
#!/bin/bash
FILES=/dev/hidraw*
for f in $FILES
do
FILE=${f##*/}
DEVICE="$(cat /sys/class/hidraw/${FILE}/device/uevent | grep HID_NAME | cut -d '=' -f2)"
if [ "$DEVICE" == "Vaydeer 9-key Smart Keypad" ]
then
printf "%s \t %s\n" $FILE "$DEVICE"
cat /dev/${FILE} > /dev/null &
fi
done
执行时,应输出属于宏键盘的四个接口。以 root 身份运行它,或者使用 udev 规则让您的用户访问接口,如下所示:
SUBSYSTEM=="hidraw" ATTRS{idVendor}=="0483", ATTRS{idProduct}=="5752", GROUP="yourgroup", OWNER="youruser", MODE="0660"
当然,这仍然只是一个肮脏的黑客,通过尝试随机的东西发现的,我根本不知道它为什么有效。我仍然对其真正的原因感兴趣,所以如果任何知道他在做什么的人想要启发我 – 请这样做。