Получить ввод с клавиатуры без рута и без х11

Я пытаюсь захватить ввод с клавиатуры в программе на C / C ++, не требуя привилегий root и без использования X11 XNextEvent().

Я пытался открыть устройство напрямую, но по очевидным причинам безопасности для доступа к оборудованию напрямую требуются права доступа root. Устройство, которое я пытаюсь открыть, это /dev/input/by-id/(my keyboard name here), которое отображается на канал событий (/dev/input/event<#>), для чтения которого требуется root.

Библиотека X11 позволяет мне записывать события клавиатуры (используя XNextEvent), но я не могу полагаться на то, что клиент, на котором установлен X11, установлен в тех случаях, когда он хочет работать без головы и без графического интерфейса.

Мне нужно иметь возможность захватывать все клавиши клавиатуры, включая shift , alt , ctrl и super (windows или mac) ключ. Предпочтительно, я также хотел бы захватывать мультимедийные клавиши, такие как воспроизведение, увеличение / уменьшение громкости и т. Д., И только когда приложение находится в фокусе.

Кто-нибудь знает, как я мог бы это сделать?

Я думал просто сделать два разных пути кода для ввода, один для безголового, в котором они будут получать события, просто используя stdin (но это не будет ловить клавишу Shift (AFAIK), а другой путь использует X11, но я бы хотел, если возможно, поддерживать только одну систему ввода с клавиатуры.

2
задан 8 July 2015 в 22:38

1 ответ

Лучшее решение, которое я мог найти, состоит в том, чтобы сделать отдельного демона, которые работают как сервис, которые контролируют /dev/input/.. события и позволяют другим пользовательским инструментам, чтобы соединиться с собой и прислушаться к входным событиям.

Думают что-то та замена XEvent. (приносящий те входные события к пространству пользователя)

0
ответ дан 9 July 2015 в 08:38

Другие вопросы по тегам:

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