Отправлять нажатия клавиш в неактивное приложение с графическим интерфейсом, не занимая клавиатуру - программирование
Подтвердить что ты не робот

Отправлять нажатия клавиш в неактивное приложение с графическим интерфейсом, не занимая клавиатуру

Как объясняет заголовок, я пытаюсь использовать терминал для отправки команд в виде нажатий клавиш в приложение с графическим интерфейсом, которое свернуто.

Здесь, в Stack, много похожих вопросов, и есть отличные ответы, но у меня есть, в основном, три проблемы с решениями, которые я видел: большинство решений нуждаются в автоматизированном приложении, чтобы быть активным. Или я не могу нормально использовать клавиатуру во время работы скрипта/процесса. Или хуже, решение работает только на ОС Windows.

Мне нужно то, что этот человек спросил 2 месяца назад: отправлять нажатия клавиш в определенное окно (в фоновом режиме), но пока что-то делать, но я хочу это в Linux. Я использую Kubuntu 18.10, если это поможет.

xdotool был близко, но я не мог заставить его отправлять команды в определенное окно или PID. Он также использует "мою клавиатуру", поэтому я не могу, например, написать эссе/код/​​просматривать онлайн, пока работает xdotool. У Pexpect тоже есть эта последняя проблема.

Похоже, AutoHotKey будет работать, но это только для Windows, и я пытаюсь не использовать Wine. То же самое с pywin32.

клавиатура (https://github.com/boppreh/keyboard) выглядит неплохо, но она не может отправить команду конкретному приложению. То же самое с PyAutoGUI.

Я выбрал тег Python, потому что большинство решений, которые я видел, используют Python, но я открыт для любого языка.

4b9b3361

Ответ 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.