Демон Linux для изменения пользовательского потока ввода?

#linux #daemon #hardware-interface

#linux #демон #аппаратный интерфейс

Вопрос:

Я хотел бы написать программу для переназначения пользовательского ввода для таких вещей, как изменение раскладок клавиатуры, но также и для более сложных вещей, таких как создание программы сокращения (например, «t qk fx jmps ovr t lzy dg» выводится как «быстрая лиса перепрыгивает через ленивую собаку»). Я бы предпочел сделать это на уровне X или ниже.

Могу ли я создать какую-то виртуальную клавиатуру на основе фактического пользовательского вывода? В идеале я хотел бы какой-то простой интерфейс (т. Е. Стандартный ввод в программу представляет собой серию событий реального пользовательского ввода, выходные данные — это события пользовательского ввода для виртуальной клавиатуры), но если это невозможно, мне все равно были бы интересны указания на то, как это можно сделать. Я ничего не знаю об аппаратных устройствах Linux, низкоуровневом X или ядре прямо сейчас; на самом деле я довольно новичок в Linux. Ссылки на руководства по «основам» не остались бы без внимания.

Ответ №1:

Для этого можно использовать подсистему событий Linux:

  • Используйте Linux input event interface (evdev) для получения событий с любого устройства ввода. Смотрите также input.h файл заголовка для получения дополнительной информации о реальном API.

  • Используйте EVIOCGRAB ioctl для захвата устройства клавиатуры, чтобы никакие другие приложения пользовательского пространства, кроме вашего демона, не получали никаких событий ввода.

  • Используйте интерфейс uinput для создания новой виртуальной клавиатуры с любыми необходимыми функциями. Смотрите также uinput.h заголовочный файл для получения дополнительной информации об uinput API и этом для читаемого пошагового руководства.

Есть несколько приложений, которые могли бы послужить примером, таких как EvRouter, ESE Key Daemon и мой собственный evmapd.