web-dev-qa-db-ja.com

端末に焦点を当てたプログラムを起動する

コマンドラインからの入力の取得と他のプログラムの起動を組み合わせたスクリプトを作成しています。したがって、スクリプトは次のようになります。

...
launch program
Read input from the terminal
...

問題は、プログラムを起動すると(バックグラウンドで起動した場合でも)、ターミナルがフォーカスを失い、起動したプログラムがアクティブになることです。

デフォルトのUbuntuコマンドで端末に焦点を合わせたプログラムを起動するにはどうすればよいですか?

ありがとうございました

6
Vndtta

端末のタイトルがわかっている場合は、プログラムを開いた後に wmctrl コマンドを使用して元のタイトルに切り替えることができます(ウィンドウが開いていると、新しいプログラムがフォアグラウンドにあるようにも見えません)すぐに開き、sleepコマンドは必要ありません):

wmctrl -a <WIN-TITLE>

<WIN-TITLE>は完全なタイトルである必要はありません。たとえば、タイトルがTESTINGの場合、TESTは機能します。

プログラムを開くのにかかる時間によっては、sleepコマンドを使用して、端末への切り替えを遅らせる必要がある場合があります。次のように使用できます:sleep <SECONDS>s

スクリプト内から端末のタイトルを設定するには、次を使用します。

NAME="NEW_TITLE"; echo -en "\033]0;$NAME\a"

詳細については、 この回答 を参照してください。

たとえば、プログラムをバックグラウンドで開く小さなスクリプトを次に示します。

NAME="Opening program..."; echo -en "\033]0;$NAME\a"
$1&
sleep 0.75s
wmctrl -a "Opening program"
2
iBelieve