キーボードが検出されましたが、キーイベントは受信されませんでした。

キーボードが検出されましたが、キーイベントは受信されませんでした。

私は持っていますこれマクロキーボード。

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つの入力に対して簡単なコマンドを実行すると、すべてが正常に機能します。キーボード入力、マクロ、マウス入力、メディア、ボリュームコントロールまで可能です。 (しかし、アプリやWebページを開くためにソフトウェアが必要であることは驚くべきことではありません。)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

実行されると、マクロキーボードに属する4つのインタフェースを出力する必要があります。 rootとして実行するか、udevルールを使用して、次のようにユーザーにインターフェイスへのアクセスを許可します。

SUBSYSTEM=="hidraw" ATTRS{idVendor}=="0483", ATTRS{idProduct}=="5752",  GROUP="yourgroup", OWNER="youruser", MODE="0660"

もちろん、これはまだランダムに試みて発見された汚れたハッキン​​グだけで、なぜ動作するのかわかりません。私はまだその本当の原因に興味があります。

おすすめ記事