Отправлять нажатия клавиш в неактивное приложение с графическим интерфейсом, не занимая клавиатуру
Как объясняет заголовок, я пытаюсь использовать терминал для отправки команд в виде нажатий клавиш в приложение с графическим интерфейсом, которое свернуто.
Здесь, в Stack, много похожих вопросов, и есть отличные ответы, но у меня есть, в основном, три проблемы с решениями, которые я видел: большинство решений нуждаются в автоматизированном приложении, чтобы быть активным. Или я не могу нормально использовать клавиатуру во время работы скрипта/процесса. Или хуже, решение работает только на ОС Windows.
Мне нужно то, что этот человек спросил 2 месяца назад: отправлять нажатия клавиш в определенное окно (в фоновом режиме), но пока что-то делать, но я хочу это в Linux. Я использую Kubuntu 18.10, если это поможет.
xdotool был близко, но я не мог заставить его отправлять команды в определенное окно или PID. Он также использует "мою клавиатуру", поэтому я не могу, например, написать эссе/код/просматривать онлайн, пока работает xdotool. У Pexpect тоже есть эта последняя проблема.
Похоже, AutoHotKey будет работать, но это только для Windows, и я пытаюсь не использовать Wine. То же самое с pywin32.
клавиатура (https://github.com/boppreh/keyboard) выглядит неплохо, но она не может отправить команду конкретному приложению. То же самое с PyAutoGUI.
Я выбрал тег Python, потому что большинство решений, которые я видел, используют Python, но я открыт для любого языка.
Ответы
Ответ 1
Используйте вложенный X-сервер для ввода нажатий клавиш без изменения фокуса или захвата клавиатуры. Подтверждение концепции:
Xephyr -resizeable :13
export DISPLAY=:13
xterm
xdotool type rhabarber
Вложенный X-сервер Xephyr
запускается и будет прослушивать локальный X-сокет 13 (тогда как: 0 обычно идентифицирует текущий запущенный X-сервер, но при одновременном запуске нескольких сеансов он может быть выше). Затем мы устанавливаем переменную окружения DISPLAY равной: 13, поэтому любое запускаемое нами приложение X будет подключаться к Xephyr; xterm
является нашим целевым приложением здесь. Используя xdotool
или любой другой инструмент, мы можем отправлять нажатия клавиш.
Поскольку целевой X-сервер идентифицируется с помощью $DISPLAY
, приложения могут запускаться или вводить события, инициированные также из других источников. При необходимости вы также можете запустить облегченный оконный менеджер в Xephyr, например, чтобы "развернуть" приложение так, чтобы оно заполняло все окно Xephyr.