检测到键盘但未收到按键事件

检测到键盘但未收到按键事件

我有宏键盘。

在 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"

当然,这仍然只是一个肮脏的黑客,通过尝试随机的东西发现的,我根本不知道它为什么有效。我仍然对其真正的原因感兴趣,所以如果任何知道他在做什么的人想要启发我 – 请这样做。

相关内容