Слушайте USB-клавиатуру с Python
Настройка: минималистический Linux (OpenWRT на маршрутизаторе ASUS), USB-клавиатура (предположим, что я знаю имя устройства, например /dev/hiddev 0)
Цель: написать питон (или оболочку, в этом случае я могу использовать его как прокси для python) script, который будет прослушивать это устройство и выполнять некоторые действия на основе пользовательского ввода
В начале - достаточно, чтобы эхо вводить введенные символы в текстовый файл с заданным именем.
PyUSB выглядит очень запутанным.
Я в порядке с PySerial, хотя я не уверен, подходит ли ему эта задача - при попытке открыть устройство он говорит: "serial.serialutil.SerialException: не удалось настроить порт: (22," Invalid argument ")"
UPD: ну, ну, тривиальный ответ был "cat/dev/input/event1"
Но вывод действительно загадочный - любой намек на его интерпретацию (как коды символов)?
UPD UPD: hexdump/dev/input/event1 намного лучше!
он дает 6 9 кортежей для каждого нажатия клавиши (я полагаю, 3 для ключа вниз, 3 для ключа)
Вероятно, это не было бы , поэтому было сложно его расшифровать.
Но более гражданский путь по-прежнему высоко ценится
http://svn.navi.cx/misc/trunk/python/evdev/evdev.py выглядит интересным...
Ответы
Ответ 1
http://svn.navi.cx/misc/trunk/python/evdev/evdev.py - это реальный ответ - вывод очень подробный и готовый .poll()
метод, который возвращает события.
единственная проблема, с которой я столкнулся - с ошибкой readMetadata() с ошибкой 22. Затем я прокомментировал ее вызов, и он работал как шарм
На самом деле, я загрузил более новую версию из http://autokey.googlecode.com/svn/trunk/src/lib/evdev.py
Добавить: чтобы узнать фактическое событиеN,
cat /proc/bus/input/devices
и внимательно прочитайте его
Ответ 2
Для тех, кто узнает этот вопрос позже (как это случилось со мной): есть замечательная библиотека Георгия Валкова для evdev:
https://github.com/gvalkov/python-evdev
http://python-evdev.readthedocs.org/en/latest/index.html