Есть много способов сделать это, от написания фактического драйвера устройства до написания X-клиентов для генерации X-событий (например, с использованием расширения XTest), до использования интерфейсов ядра для ввода событий подсистемы ввода.
Я бы пошел с последним и использовал подсистему uinput
. Это часть практически всех последних ядер и предоставляет /dev/uinput
, который вы можете регулярно открывать и выполнять различные действия ioctl
для создания устройств ввода из обычного пространства пользователя.
Обратите также внимание, что некоторые механизмы для этого уже существуют. Устройства Bluetooth Human Interface, которые прекрасно работают в Linux, являются одним из примеров. rinputd , демон для прослушивания клиентов rinput и генерации событий uinput на основе отправляемых данных. Другой. Возможно, вы захотите сделать приложение Android активным клиентом rinput.