У меня есть код Python, который взаимодействует с беспроводной цифровой USB-клавиатурой. Я хотел бы иметь возможность обнаруживать устройство по имени, но оно отображается как несколько устройств ввода. В 1_:
# ls -l /dev/input/by-id
total 0
lrwxrwxrwx 1 root root 9 Sep 25 14:30 usb-MOSART_Semi._2.4G_Keyboard_Mouse-event-kbd -> ../event0
lrwxrwxrwx 1 root root 9 Sep 25 14:30 usb-MOSART_Semi._2.4G_Keyboard_Mouse-if01-event-mouse -> ../event1
lrwxrwxrwx 1 root root 9 Sep 25 14:30 usb-MOSART_Semi._2.4G_Keyboard_Mouse-if01-mouse -> ../mouse0
И используя модуль evdev
:
>>> import evdev
>>> devices = [evdev.InputDevice(dev) for dev in evdev.list_devices()]
>>> for device in devices:
... print(device.fn, device.name)
...
/dev/input/event1 MOSART Semi. 2.4G Keyboard Mouse
/dev/input/event0 MOSART Semi. 2.4G Keyboard Mouse
Очевидно, ядро может отличить устройство -kbd
от устройства -mouse
, но как мне сделать это определение в моем коде? Решение, которое я придумал на данный момент, использует тот факт, что устройство «клавиатура» включает в себя KEY_KP...
возможности, поэтому я могу сделать это:
def is_keyboard(device):
return evdev.ecodes.KEY_KP1 in device.capabilities()[evdev.ecodes.EV_KEY]
... но это кажется скорее эвристическим, чем надежным тестом. Есть ли способ с помощью модуля evdev
или альтернативы определить, является ли данное устройство ввода клавиатурой или мышью (или их комбинацией, напоминающей комбинацию франкенштейна)?