Bashコマンドラインで、実行中のプロセスの特定のウィンドウにフォーカスを当てる方法はありますか?プロセスの名前、番号、その他必要なものはすべて知っているものとします。
たとえば、Firefoxの単一のインスタンスを実行しているが、最小化されている(またはその上に他のウィンドウがある)場合。私は、Firefoxウィンドウをアクティブウィンドウにして、そのウィンドウにフォーカスを与えるbashコマンドを必要としています。
Wmctrlコマンドがその仕事をしているようです。すでにインストールされていますが、誰かが必要に応じてリポジトリで利用できます。
wmctrl -l
現在開いているウィンドウをリストします(gnomeパネルを含む)。
wmctrl -a STRING
タイトルにSTRINGが含まれているウィンドウにフォーカスを移動します。複数のウィンドウがその条件を満たす場合、どうなるかわかりません。
私の場合、コマンドは:
wmctrl -a Firefox
wmctrl
をxdotool
と組み合わせて使用すると、フォーカスをFirefoxに切り替えて、キーボードまたはマウスの操作を実行できます。
この例では:
wmctrl -R firefox && \
xdotool key --clearmodifiers ctrl+t ctrl+l && \
xdotool type --delay=250 google && \
xdotool key --clearmodifiers Tab Return
以下のステップが実行されます。
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