Возможно ли развернуть код C, который пропускает и перезаписывает нажатия клавиш с клавиатуры?

#c #linux #keyboard #x11

#c #linux #клавиатура #x11

Вопрос:

Я использую некоторые «удобные для пользователя» программы, которые требуют, чтобы я время от времени вводил длинные последовательности сочетаний клавиш и других символов. Я нашел несколько инструментов, таких как cnee, но ничего, что могло бы помочь мне автоматизировать эти последовательности без затрат времени и усилий. Я просто добавил исходный код в одну из этих программ (Qt), но у другой много зависимостей, поэтому для ее создания потребуется время.

Будучи также заинтересованным в разработке Linux, мне пришла в голову идея написать модифицированную версию драйвера клавиатуры, которая позволяла бы определять и вызывать макросы с помощью одной выделенной клавиши. Помимо автоматизации моих нажатий клавиш, которые могут создавать или не создавать большую бизнес-модель, это также был бы хороший самообучающийся проект для программирования драйверов Linux.

Насколько сложно было бы реализовать простой драйвер клавиатуры под Linux, чтобы среды с графическим интерфейсом, такие как Gnome, понимали это? Можно перестроить ядро или выполнить некоторые команды с правами root для загрузки этого драйвера, когда это необходимо.

В качестве альтернативы это может быть перехват где-то над драйвером, но в целом, чем ниже, тем лучше.

Комментарии:

1. Это должно быть выполнимо путем генерации поддельных событий нажатия клавиш и освобождения клавиш и отправки их в текущее активное окно (GetInputFocus()).

2. Qt framework никогда не был драйвером клавиатуры Linux. Я адаптировал к своим потребностям некоторые приложения Qt, изменив ярлыки в их исходном коде и перестроив их, но не все приложения достаточно легко создавать из исходного кода.

Ответ №1:

Вам не нужно писать весь драйвер. Вам нужен только C uinput и некоторое время для разработки. Что делать: 0. Поиск узла устройства клавиатуры. вы можете использовать evtest или обнаруживать его динамически. Вы можете пропустить это, если знаете путь к узлу устройства событий клавиатуры (например, /dev/input/event5 ).

  1. open клавиатура по пути.
  2. захват устройства для предотвращения утечки в Xorg / Wayland compositor
  3. создайте uinput устройство с теми же спецификациями.
  4. Используется poll для получения необработанного ввода с клавиатуры и перехватывания событий клавиш.