Вопрос

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

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

Мои вопросы:

  1. Как запретить виртуальным консолям текстового режима получать некоторые нажатия клавиш на устройстве как обычные нажатия клавиш?На данный момент некоторые клавиши устройства приводят к Входить, а BackSpace, а PageUp или цифры цифровой клавиатуры.
  2. Аналогично, как мне запретить X-серверу получать события клавиатуры и мыши от этого устройства?У меня к компьютеру подключено несколько USB-клавиатур и мышей.Я хочу, чтобы X-сервер получал события от всех из них, кроме этого устройства.
  3. Как настроить, чтобы при каждом подключении устройства к компьютеру команда /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.В этом драйвере фильтрующего устройства вы можете заблокировать все нежелательные события с целевого устройства, которое вы хотите заблокировать. На самом деле у меня нет трех вопросов, поэтому я не знаю, как на них ответить.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top