키보드가 감지되었지만 키 이벤트가 수신되지 않았습니다.

키보드가 감지되었지만 키 이벤트가 수신되지 않았습니다.

나는 가지고있다이것매크로 키보드.

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

실행되면 매크로 키보드에 속하는 4개의 인터페이스가 출력되어야 한다. 루트로 실행하거나 udev 규칙을 사용하여 다음과 같이 사용자에게 인터페이스에 대한 액세스 권한을 부여합니다.

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

물론 이것은 여전히 ​​무작위로 시도하여 발견된 더러운 해킹일 뿐이며 왜 작동하는지 모르겠습니다. 나는 아직도 그 진정한 원인에 관심이 있으니, 그가 무엇을 하고 있는지 아는 사람이 나에게 깨달음을 주고 싶다면 그렇게 하십시오.

관련 정보