저는 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 창에 포커스가 없거나 키 입력이 표시되지 않습니다.
그래서 Java 프로세스의 PID를 찾아 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 -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은 두 가지 메커니즘을 사용하여 주요 이벤트를 보내고, XTEST
현재 초점을 맞춘 확장에 이벤트를 보내고, XSendEvent()
지정된 창에 이벤트를 보냅니다. 후자는 이벤트를 생성합니다.인조플래그가 지정되면 일부 응용 프로그램에서는 이것이 보안 위험이 있음을 의미한다고 생각하여 이벤트를 무시합니다.
그러나 xdotool을 사용하여 "실제" 키 이벤트를 보낼 수는 있지만 창을 명시적으로 제공해서는 안 됩니다. 포커스를 창으로 옮긴 후
xdotool type Hello; xdotool key Return