Возникают ли проблемы с использованием xdotool для перенаправления нажатий клавиш в окна Java?

Возникают ли проблемы с использованием xdotool для перенаправления нажатий клавиш в окна Java?

Я использую Fedora 22 (Linux) и имею приложение Java, написанное другими, которому я хочу отправлять нажатия клавиш. Я пробовал использовать xdotool разными способами, но не могу ни установить фокус на приложение Java, ни отправить ему нажатия клавиш.

Приложение запускается с помощью javaws с помощью следующей командной строки:

javaws -J-XX:MaxPermSize=512M -J-d64 -J-Xms1G -J-Xmx1G /path/to/java/file

Моя первая попытка отправить ему нажатия клавиш была сделана с помощью этой команды:

xdotool search --name 'Window title' windowraise windowfocus --sync key H e l l o Return

Но ничего не произошло. Окно Java не получило фокус и не увидело мои нажатия клавиш.

Поэтому я посмотрел PID процесса Java и попытался идентифицировать процесс по его PID.

xdotool search --pid 1234 windowraise windowfocus --sync key H e l l o Return

Тот же результат. Наконец, я попробовал идентифицировать окно с помощью 'selectwindow'.

xdotool selectwindow windowraise windowfocus --sync key H e l l o Return

После ввода команды курсор изменился на квадрат. Я переместил мышь в окно Java и щелкнул, но это тоже не сработало.

Для дальнейшего исследования я запустил другое приложение Java с помощью следующей команды:

java -jar appname.jar

xdotool также не смог установить фокус или отправить нажатия клавиш в это окно.

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

Вот некоторая информация о версиях Java и xdotool, которые я использую:

$ java -version
openjdk version "1.8.0_65-debug"
OpenJDK Runtime Environment (build 1.8.0_65-debug-b17)
OpenJDK 64-Bit Server VM (build 25.65-b01-debug, mixed mode)

$ xdotool --version
xdotool version 2.20110530.1

решение1

Фокусировка окна — это работа оконного менеджера. Я предполагаю, что вы используете один из них. Лучший способ сфокусировать окно:

xdotool search --name 'Window title' windowactivate

xdotool использует 2 механизма для отправки ключевых событий, XTESTрасширение для событий для отправки в текущий фокус и XSendEvent()для отправки событий в заданное окно. Последнее генерирует события ссинтетическийфлаг, который некоторые приложения считают угрозой безопасности, поэтому игнорируйте событие.

Однако вы все еще можете отправлять «реальные» ключевые события с помощью xdotool, но вы не должны явно указывать окно. После перемещения фокуса на ваше окно используйте

xdotool type Hello; xdotool key Return

Связанный контент