Gibt es ein Problem bei der Verwendung von xdotool zum Weiterleiten von Tastenanschlägen an Java-Fenster?

Gibt es ein Problem bei der Verwendung von xdotool zum Weiterleiten von Tastenanschlägen an Java-Fenster?

Ich verwende Fedora 22 (Linux) und habe eine Java-Anwendung, die von anderen geschrieben wurde und an die ich Tastatureingaben senden möchte. Ich habe versucht, xdotool auf verschiedene Weise zu verwenden, aber ich kann weder den Fokus auf die Java-Anwendung setzen noch ihr Tastatureingaben senden.

Die App wird mit javaws mit folgender Kommandozeile gestartet:

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

Mein erster Versuch, Tastenanschläge zu senden, erfolgte mit diesem Befehl:

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

Aber nichts geschah. Das Java-Fenster erhielt weder den Fokus noch erkannte es meine Tastenanschläge.

Also habe ich die PID des Java-Prozesses nachgeschlagen und versucht, den Prozess anhand seiner PID zu identifizieren.

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

Gleiches Ergebnis. Schließlich habe ich versucht, das Fenster mit „selectwindow“ zu identifizieren.

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

Nach dem Eingeben des Befehls änderte sich der Cursor in ein Quadrat. Ich bewegte die Maus zum Java-Fenster und klickte, aber auch das funktionierte nicht.

Um dies weiter zu untersuchen, habe ich eine andere Java-Anwendung mit dem folgenden Befehl ausgeführt:

java -jar appname.jar

xdotool konnte weder den Fokus setzen noch Tastenanschläge an dieses Fenster senden.

Nachdem ich die xdotool-Dokumentation gelesen habe, weiß ich, dass einige Programme dessen Eingabe nicht akzeptieren. Kann ich etwas tun, z. B. diesen Java-Apps verschiedene Befehlszeilenargumente übergeben, damit sie auf die Tastenanschläge von xdotool reagieren?

Hier sind einige Informationen zu den von mir verwendeten Java- und Xdotool-Versionen:

$ 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

Antwort1

Die Fensterfokussierung ist Aufgabe des Fenstermanagers. Ich gehe davon aus, dass Sie einen verwenden. So fokussieren Sie ein Fenster am besten:

xdotool search --name 'Window title' windowactivate

xdotool verwendet 2 Mechanismen zum Senden von Tastenereignissen, die XTESTErweiterung für Ereignisse zum Senden an den aktuellen Fokus und XSendEvent()zum Senden von Ereignissen an ein bestimmtes Fenster. Letzteres generiert Ereignisse mit einemSynthetikFlag, das von manchen Anwendungen als Sicherheitsrisiko eingestuft wird. Daher wird das Ereignis ignoriert.

Sie können jedoch weiterhin „echte“ Tastenereignisse mit xdotool senden, müssen aber kein explizites Fenster angeben. Nachdem Sie den Fokus auf Ihr Fenster verschoben haben, verwenden Sie

xdotool type Hello; xdotool key Return

verwandte Informationen