У меня есть два основных варианта:
- X11: используйте расширение XTest (
XTestFakeDeviceKeyEvent
, XTestFakeRelativeMotionEvent
и т. Д.)
- Модуль ввода.
Первый использует поддельные устройства ввода (попробуйте запустить xinput list
в оболочке), которые присутствуют на большинстве (всех?) X серверов. Каждый вызов одной из функций XTestFake*
генерирует входное сообщение X.
Второй - модуль ядра, который позволяет пользовательскому приложению создавать устройства ввода и отправлять события ввода. Вы просто открываете устройство /dev/uinput
, отправляете несколько ioctl
s для его настройки, а затем write
непосредственно вводите события.
И, конечно, вы можете написать драйвер входного ядра!