0

I have this macro keyboard.

On Windows it works as expected, but under Linux (both a Raspberry Pi 0w with the latest OS and a desktop installation of Debian 12) it doesn't. It is detected as far as I understand, but I get no events from it.

$ 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)

If I try with any other keyboard, with evtest I can see the key pressed events, with this one I get nothing.

The product is not explicitly declared to be compatible with Linux, but I never encountered an incompatible keyboard before. Is there anything I could try to make it work, or at least to dig deeper into the problem?

2
  • Most special-purpose keyboards want to be set up by the host PC every power cycle so that they know which button causes which sequence of key codes to be emitted. So, you need some kind of control software for it. Commented Dec 8, 2023 at 19:58
  • 1
    @MarcusMüller this macro keyboard can be setup with its software on one machine and work (the way it was setup) in another (windows) machine without its software
    – flagg19
    Commented Dec 9, 2023 at 20:16

1 Answer 1

2

I ran into the same problem when trying out this thing on a Raspberry Pi.  After finding this post, I tried having a look at the corresponding /dev/hidraw* inputs to see whether data arrives there.

So I did a cat /dev/hidraw7 and actually saw some events being received.  And, to my total surprise, the keyboard miraculously started to work as expected.  Turns out it just works as soon as something is listening to the raw interface!

Run a simple cat /dev/hidrawX > /dev/null & for the 4 inputs the keyboard provides after bootup, and everything works.  Keyboard inputs, macros, mouse inputs and even media and volume controls.  (Opening applications and web pages requires the software though, unsurprisingly.)

I wrote this simple script to run cat on all relevant hidraw interfaces, inspired by a blog post on how to map them to device names by Arvanitis Christos:

#!/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

When executed, it should output the four interfaces belonging to the macro keyboard.  Either run it as root or give your user access to the interfaces with a udev rule like this:

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

Of course this is still just a dirty hack, found by trying out random things, and I have no idea why it works at all.  I would still be interested in the actual reason for this, so if anyone who knows what he is doing wants to enlighten me – please do.

2
  • 1
    Wow... just wow... it works. I would really love to know why!
    – flagg19
    Commented Mar 22 at 17:31
  • Confirmed working with a 4-key variant of that keypad. Thx!
    – MWiesner
    Commented Mar 25 at 14:13

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .