Как читать события с HID-устройства под Ubuntu Jaunty?
Вопрос
У меня есть USB-HID-устройство Linux ( Хама МСЕ), и я могу прочитать его события вручную, прочитав cat /dev/input/event7
и cat /dev/input/event8
.Всякий раз, когда я нажимаю клавишу на устройстве, несколько байтов становятся доступными для чтения с помощью одного из cat
команды выше.На моем компьютере по умолчанию установлен 64-битный рабочий стол Ubuntu Jaunty.
Я думаю, что смогу написать парсер для интерпретации байтов, выдаваемых устройством, или я воспользуюсь либхид если это удобнее.
Мои вопросы:
- Как запретить виртуальным консолям текстового режима получать некоторые нажатия клавиш на устройстве как обычные нажатия клавиш?На данный момент некоторые клавиши устройства приводят к Входить, а BackSpace, а PageUp или цифры цифровой клавиатуры.
- Аналогично, как мне запретить X-серверу получать события клавиатуры и мыши от этого устройства?У меня к компьютеру подключено несколько USB-клавиатур и мышей.Я хочу, чтобы X-сервер получал события от всех из них, кроме этого устройства.
- Как настроить, чтобы при каждом подключении устройства к компьютеру команда
/usr/local/bin/keydumper /dev/input/event7 /dev/input/event8
(или по одной команде для каждого/dev/
путь) будет запущен с надлежащим/dev/
пути подставлены в командной строке?
Решение
Отвечаю на свой вопрос, основанный на ответах разработчиков драйвера USB HID для Linux:
Вопрос 1.и 2.:Делать
ioctl(open("/dev/input/event7", O_RDONLY), EVIOCGRAB, 1);
Пока этот файл handle открыт, сгенерированные события пойдут только на этот файл (не к другому Open () s того же устройства или в системную клавиатуру или пул событий мыши).Не более одного процесса может удерживать EVIOCGRAB на устройстве HID за раз.Lirc может быть сконфигурирован сделать EVIOCGRAB.
Вопрос 3.:Настройте udev для запуска программы после подключения устройства.
Другие советы
К сожалению, у меня недостаточно баллов, чтобы прокомментировать.
Если вы ищете определение EVIOCGRAB, попробуйте
#include <linux/input.h>
Я думаю, что решением всех вопросов может быть написание собственного драйвера фильтрующего устройства или специального драйвера для вашего устройства.Я знаю, что такая вещь (драйвер фильтрующего устройства) доступна в Windows, поэтому что-то подобное может быть и в Linux.В этом драйвере фильтрующего устройства вы можете заблокировать все нежелательные события с целевого устройства, которое вы хотите заблокировать. На самом деле у меня нет трех вопросов, поэтому я не знаю, как на них ответить.