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

関連情報