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


40

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

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

回答:


51

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では、これにより現在のタブがリロードされます。


4
--windowidフラグが今ある--window(コマンドは、できるだけ多くを警告しています)
ルイ・マドックス

2
--titleオプションは、今ある--name(コマンドを忠実に限り警告し)
jpaugh

2
ネストは完全に不要である必要があります xdotool search --class Chrome key F5
phil294

1
@Blauhirn古いバージョンのxdotoolではネストが必要でした。しかし、おかげで、新しい構文も表示するように回答を更新しました。
ジル 'SO-悪であるのをやめる'

ああ、私はこれを更新しているので、Chromeは最近合成イベントを拒否します。ため息
ジル「SO-悪であるのをやめる」

15

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

 xdotool key --windowid <window> <keystroke>

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

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

動作しているように思えたので、いくつかのスクリプトを定義し、.lircrcファイルを次のように更新しました。

http://pcfellow.com/ClementineRemote.html


最初の例がうまくいかないのはなぜですか?キーストロークをフォーカスされていないウィンドウに送信すると便利です。
ジェレミア

1
@ Geremia、xdotoolドキュメントのSENDEVENT NOTES記載されている理由により、おそらく機能しません。
ジャンテルメ

4

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

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

4

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

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

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


2
惜しいしかし、私はしないで自分のTwitterの、私のISPと私は監視する必要が他のサイトの監視ソフトウェア;)私はおそらく前にこれを言及している必要があります
burnersk

4
ユーザースクリプトを使用して、そのタグをページに挿入できます。キープレスをウィンドウに送信するよりも脆弱なソリューションになる可能性があります。
シェルバン

2

私は歴史的にキーを押すなどの操作を行うために自動ホットキーを使用していましたが、Linuxでは利用できませんが、Googleの簡単な検索ではIronAHK(http://www.ironahk.net/)があまりないことがわかりますドキュメントはまだ入手可能ですが、それでうまくいくかもしれません。


リンクは機能しなくなりました。
アントニンプロチャスカ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.