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 ウィンドウはフォーカスを取得せず、キーストロークも認識しませんでした。

そこで、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 アプリケーションを実行しました。

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

関連情報