GNU/Linux >> Linux の 問題 >  >> Linux

ターミナルからGUIプログラムにキーストローク(f5)を送信する方法は?

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

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

承認された回答:

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では、これにより現在のタブが再読み込みされます。


Linux
  1. 起動時にGUIプログラムを実行しますか?

  2. コマンドラインからGNOMEターミナルで新しいタブを開く方法は?

  3. ターミナルウィンドウからLinuxでファイルを作成するには?

  1. LinuxでターミナルからWebを検索する方法

  2. Dockerコンテナで実行されるプログラムにシグナルを送信するには?

  3. ターミナルから特定の日時に Linux をシャットダウンするには?

  1. SSMTPを使用してLinuxターミナルから電子メールを送信する方法

  2. コマンドラインからGUI Linuxプログラムを起動する方法はありますが、コマンドラインとは別ですか?

  3. Gnome (Ubuntu):ターミナルからコマンドラインを使用してプログラムウィンドウを前面に表示する方法は?