Как мне прочитать события с устройства HID под Ubuntu Jaunty? - PullRequest
3 голосов
/ 05 октября 2009

У меня есть Linux USB HID устройство ( Hama MCE ), и я могу читать его события вручную, читая cat /dev/input/event7 и cat /dev/input/event8. Всякий раз, когда я нажимаю клавишу на устройстве, для чтения становятся доступны несколько байтов с помощью одной из команд cat, указанных выше. У меня по умолчанию установлена ​​64-разрядная версия Ubuntu Jaunty на компьютере.

Я думаю, что могу написать парсер для интерпретации байтов, испускаемых устройством, или я буду использовать libhid , если это будет более удобно.

Мои вопросы:

  1. Как запретить виртуальным консолям в текстовом режиме получать некоторые нажатия клавиш на устройстве как обычные нажатия клавиш? На данный момент некоторые клавиши устройства приводят к Enter , BackSpace , PageUp или номерам цифровой клавиатуры.
  2. Точно так же, как я могу запретить X-серверу получать события клавиатуры и мыши от этого устройства? У меня есть несколько USB-клавиатур и мышей, подключенных к компьютеру. Я хочу, чтобы X-сервер получал события от всех из них, кроме этого устройства.
  3. Как настроить, чтобы при каждом подключении устройства к компьютеру запускалась команда /usr/local/bin/keydumper /dev/input/event7 /dev/input/event8 (или одна команда для каждого пути /dev/) с правильными путями /dev/, заменяемыми в командной строке ?

Ответы [ 3 ]

5 голосов
/ 11 октября 2009

Отвечая на мой вопрос на основе ответов от разработчиков драйвера USB HID для Linux:

Вопрос 1. и 2 .: Do

ioctl(open("/dev/input/event7", O_RDONLY), EVIOCGRAB, 1);

Пока этот дескриптор файла открыт, генерируемые события будут идти только к этому дескриптору файла (не к другим open () того же устройства или к системная клавиатура или пул событий мыши). Максимум один процесс может содержать успешный EVIOCGRAB на устройстве HID одновременно. Лирк можно настроить сделать EVIOCGRAB.

Вопрос 3. Настройте udev для запуска программы после подключения устройства.

0 голосов
/ 26 января 2017

У меня недостаточно очков, чтобы комментировать, к сожалению.

Если вы ищете определение EVIOCGRAB, попробуйте

    #include <linux/input.h>
0 голосов
/ 09 октября 2009

Я думаю, что решением для всех вопросов может быть написание собственного драйвера устройства фильтра или пользовательского драйвера для вашего устройства. Я знаю, что такая вещь (драйвер устройства фильтра) доступна в Windows, поэтому нечто подобное может быть в Linux. В этом фильтрующем драйвере устройства вы можете заблокировать все нежелательные события от целевого устройства, которое вы хотите заблокировать. У меня нет трех вопросов, поэтому я не знаю, как ответить на это.

...