web-dev-qa-db-ja.com

端末からGUIプログラムにキーストローク(F5)を送信する方法は?

Raspberry PiをChromium(キオスクモード)と組み合わせて使用​​して、いくつかの統計を表示しています。 Piにはキーボードが接続されていないため、 ターミナルからChromium(タブ)プロセスにキーストロークを送信するためのソリューション を検索しました。通常の入力は機能しますが、このソリューションを介してF5(特別なキー:ブラウザーの更新)などを送信するにはどうすればよいですか?

# pidof chromium
20809 20790 20788 20786 20783
# echo 'some text' > /proc/20809/fd/0
40
burnersk

GUIプログラムは標準入力から読み取らず、入力を Xサーバー から取得します。ウィンドウにキーストロークを挿入するツールがあります。 xdotool はかなり一般的で便利です。

キーストロークを送信したいウィンドウIDを見つける必要があります。これはxdotoolで行うことができます。 xdotool search --class ChromeはすべてのChromeウィンドウのウィンドウIDのリストを返します。これが複数のウィンドウを返す場合は、必要なものを選択する必要があります。xdotool search --nameクラスではなくタイトルで一致します。 wmctrl の出力を解析して、目的のウィンドウIDを抽出することもできます。

正しいウィンドウIDが見つかったら、xdotoolを呼び出してキーストロークを挿入できます。残念ながら、多くのアプリケーションは合成イベント、つまり別のアプリケーションによって送信されたキーストロークやマウスイベントを拒否します。これは、Chromeの現在のバージョンの場合です。別のメカニズムから別のアプリケーションからキーストロークを挿入することは可能ですが、ウィンドウをフォーカスする必要があります。これらはすべてxdotoolで行うことができますが、フォーカスがすぐにちらつき、Chromeウィンドウに戻ります。次のスニペットは F5 最初のChromeウィンドウに(多少任意の順序で))。

xdotool search --class Chrome windowactivate --sync %1 key F5 windowactivate $(xdotool getactivewindow)

または、古いバージョンのxdotoolの場合:

xdotool windowactivate $(xdotool search --class Chrome) &&
xdotool key F5 &&
xdotool windowactivate $(xdotool getactivewindow)

これが送信することを覚えておいてください F5 そのウィンドウに、それをどうするかを決めるのはプログラム次第です。 Chromeでは、これにより現在のタブが再読み込みされます。

上記で提案された解決策は、このようなxdotoolを使用しました

 xdotool key --windowid <window> <keystroke>

うまくいきませんでした。いくつかの実験の後、私は到着しました

 xdotool windowactivate --sync <window> key <keystroke>

それが機能しているように見えたら、スクリプトをいくつか定義し、.lircrcファイルを次のように更新しました。

http://pcfellow.com/ClementineRemote.html

15
Mike

Chromiumを使用してカスタムWebページを表示し、定期的に更新したい場合は、次のタグを追加できます。

<meta http-equiv="refresh" content="5">

5秒ごとに自動的に更新します(必要に応じて短くまたは長く設定できます)。

4
André Borie

Raspbian Wheezyを実行しているRaspberry Piでも同様の使用例がありました。 Chromeキオスクモードを使用してタブを回転する必要がありました(残念ながら、これを行う拡張機能をインストールして古いChromeを使用することはもはや合理的ではありません)。受け入れられた回答の例いくつかのタイプミスがあるか、単に私のソフトウェアバージョンでは動作しません。これが私にとって有効なものです。

xdotool key --window "$(xdotool search --class Chromium | head -1)" Ctrl+Tab
4
Ben Brian

私はこれまで、オートホットキーを使用してキーを送信するなどの操作を行ってきましたが、Linuxでは利用できませんが、Googleをすばやく検索すると、IronAHKがあることがわかります( http://www.ironahk.net/ =)まだ利用できるドキュメントは多くありませんが、それでうまくいくかもしれません。

2
hafnero