#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.