Как получить USB HID ID нажатых клавиш клавиатуры

Что я хочу сделать: получить USB HID ID, когда я нажимаю клавиши своей по- настоящему эргономичной клавиатуры, чтобы иметь возможность перепрограммировать прошивку клавиатуры.

Я знаю, что есть список от Microsoft с большим количеством идентификаторов USB HID.

Но было бы легче найти идентификатор ключа, просто набрав его и увидев его в программе. Особенно для некоторых медиа-ключей, которые я не нахожу в этом списке от Microsoft.

Существует ли такая программа? Может быть программа командной строки. Linux предпочтительнее, но Windows будет вариант.

PS: я видел, что у этого вопроса на stackoverflow есть интересный ответ. Но я не могу найти /dev/usb/hiddev0 в моей системе (Fedora 17).

Обновить

В этом вопросе ответ @Andy Ross помог мне по крайней мере получить некоторый вывод при нажатии клавиши. я сделал

xxd -c 144 /dev/input/by-path/pci-0000:00:1a.0-usb-0:1.1:1.0-event-kbd

Но это все еще не очень читабельно. И не всегда одно и то же, когда я нажимаю одну и ту же клавишу.

Update2

В этом вопросе связан скрипт на python, который читает устройство ввода и должен его распечатать. Но на этом компьютере на работе у меня нет прав доступа к устройству с помощью этого сценария Python.

2 ответа

Решение

Ответ:

su -c "while true; do od --read-bytes=144 --width=144 -x /dev/input/event3 | awk 'NF > 1 { print \$12 }'; done"

Explanition

С помощью команды дерева я нашел это

$ tree /dev/input/by-path
/dev/input/by-path/
├── pci-0000:00:1a.0-usb-0:1.1:1.0-event-kbd -> ../event3
├── pci-0000:00:1a.0-usb-0:1.1:1.1-event -> ../event4
├── pci-0000:00:1d.2-usb-0:1:1.0-event-mouse -> ../event2
└── pci-0000:00:1d.2-usb-0:1:1.0-mouse -> ../mouse0

Итак /dev/input/event3 моя клавиатура

od Команда сбрасывает файлы в восьмеричном и других форматах.

  • С -x Опция это сбрасывает шестнадцатеричный.
  • И с --width=144 опция выдает только одну строку за нажатие клавиши (длина одной строки составляет 144 байта).
  • вариант --read-bytes=144 квиты od после 144 байт.

awk Команда печатает 12-е поле из всей строки. Это только если количество полей NF больше 1, потому что каждая вторая строка - это просто разрыв строки.

while true Цикл вокруг всего, потому что, если я наберу несколько буквенных букв, это сломается. Я не получаю больше результатов, только 0000, Но od Команда прекращает чтение после 144 байт (нажатие одной клавиши). После этого он перезапускается. Конечно, есть лучшее решение для этого, но это хороший обходной путь.

Пример вывода (я несколько раз нажал Return, RightCtrl и Backspace, что дает мне правильные числа при сравнении с этим документом из Microsoft (PDF) или документом из этого текстового файла)

0028
0028
0028
00e4
00e4
00e4
002a
002a
002a

xev в линуксе вам поможет.

Удачи.

Другие вопросы по тегам