特定のウィンドウにフォーカスするBashコマンド


50

bashコマンドラインで、実行中のプロセスの特定のウィンドウにフォーカスを与える方法はありますか。プロセスの名前、番号、その他必要なものはすべて知っていると仮定します。

たとえば、Firefoxの単一のインスタンスを実行しているが、最小化されている(またはその上に他のウィンドウがある)場合。Firefoxウィンドウをアクティブウィンドウにすることで、Firefoxウィンドウを表示してフォーカスを与えるbashコマンドが必要です。

回答:


78

wmctrlコマンドが仕事をしているようです。すでにインストールされていますが、必要に応じてリポジトリで利用できます。

wmctrl -l 

現在開いているウィンドウ(gnomeパネルを含む)を一覧表示します。

wmctrl -a STRING

タイトルにSTRINGを含むウィンドウにフォーカスを与えます。複数のウィンドウがその条件を満たす場合、どうなるかわかりません。
私の場合、コマンドは次のとおりです。

wmctrl -a Firefox

6
誰かが読んでいるのを見てうれしいし、私はただ自分自身にとりとめがない。=)
マラバルバ


これは、kvmなど、フォーカスを奪うウィンドウでデバッガーターゲットを起動するときに、フォーカスをgdb(デバッガー)に戻すのに最適です。GDBコマンドを使用しshell wmctrl -a something何かがあなたのデバッガの端末タイトルで何かですが。
-doug65536

本当にありがとう、これは純粋な金です、私はいくつかのChromeウィンドウで保留中の作業をすべて失い、どういうわけかバックグラウンドで消えたのではないかと心配しました!
オスマール

9

wmctrlと組み合わせて使用すると、xdotoolFirefoxにフォーカスを切り替えて、キーボードまたはマウスのアクションを実行できます。

この例では:

wmctrl -R firefox && \
  xdotool key --clearmodifiers ctrl+t ctrl+l && \
  xdotool type --delay=250 google && \
  xdotool key --clearmodifiers Tab Return

次の手順が実行されます。

  1. 最初に一致するFirefoxウィンドウにフォーカスを合わせる
  2. 新しいブラウザタブを開きます
  3. アドレスバーにフォーカスを置きます
  4. 「google」と入力します
  5. 最初のブラウザのオートコンプリート結果へのタブ
  6. Return(またはEnter)キーを押します

4

私のubuntu pcで使用する以下のスクリプトはどうですか?ユースケースはこのようなものです。

   $ ./focus_win.sh 1            # focus on a application window that executed at first
   $ ./focus_win.sh 2            # second executed application window

キーボードのカスタムショートカットで割り当ててから使用しています。ctrl + 1、ctrl + 2、...

cat focus_win.sh

#! /bin/sh

if [ "" = "$1" ] ; then
    echo "usage $0 <win index>"
    exit 1;
fi

WIN_ID=`wmctrl -l | cut -d ' ' -f1 | head -n $1 | tail -n 1`

if [ "" = "$WIN_ID" ] ; then
    echo "fail to get win id of index $1"
    exit 1;
fi
wmctrl -i -a $WIN_ID
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.