web-dev-qa-db-ja.com

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

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

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

53
Malabarba

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

wmctrl -l 

現在開いているウィンドウをリストします(gnomeパネルを含む)。

wmctrl -a STRING

タイトルにSTRINGが含まれているウィンドウにフォーカスを移動します。複数のウィンドウがその条件を満たす場合、どうなるかわかりません。
私の場合、コマンドは:

wmctrl -a Firefox
80
Malabarba

wmctrlxdotoolと組み合わせて使用​​すると、フォーカスをFirefoxに切り替えて、キーボードまたはマウスの操作を実行できます。

この例では:

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)キーを押す
10
Christopher

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、...

猫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
4
swj