Вопрос по linux, hook, input, keyboard – Как использовать событие клавиатуры в Linux, используя подсистему ввода

6

Я пишу программу для Linux на C, и мне нужно перехватывать определенные нажатия клавиш.

Используя подсистему ввода (чтение / запись / dev / input / eventX), я могу получить нажатие на клавиатуру (используя функции «чтение») или имитировать нажатие на клавиатуру (используя функцию «запись»).

При использовании & quot; читать & quot; функция, я могу захватить нажатия клавиш пользователя, но это событие распространяется, и я не знаю, как его использовать.

Демо-коды: int devfd = open (device, ...); / * Откройте устройство ядра "/ dev / input / eventX"./ read(devfd, ...); / Прочитайте событие клавиатуры./ write(devfd, ...); / Имитация события клавиатуры. * / zccoding
Не нужно комментировать свой вопрос. Вы можете отредактировать вопрос, включив в него любую дополнительную информацию, и отформатировать источник. Убедитесь, что ваш источник понятен тем, кто ответит. bytebuster

Ваш Ответ

1   ответ
5

По умолчанию входные события передаются всем прослушивающим приложениям и драйверам. Тем не менее, приложение может получить устройство черезevdev интерфейс - взгляните наEVIOCGRAB ioctl(), Это позволило бы только этому конкретному приложению получать события от этого конкретного устройства.

Проблема с этим подходом заключается в том, что вы не можете предотвратить распространение определенного события.after это получено - вы можете только захватить устройство заранее, что бы затем захватитьall События. Поэтому, если вы хотитеfilter входные события вы должны использовать обходной путь.

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

Похожие вопросы