質問: linuxで端末がフォーカスを取得したことを検出するにはどうすればよいですか? ターミナルの前で過ごす時間を計りたいです。ターミナルがフォーカスを獲得/喪失したときに開始および停止するある種のタイマーを用意するのが最善の方法だと思います。そして、それは複数の端末で動作する必要があります...何か案は? gnomeを使用しています。
回答: ターミナルシェルが独自のxウィンドウidに簡単にアクセスできる場合は、おそらく何か問題があります。それらは互いに何の関係もありません-例えばscreen内で長いジョブを実行することができます(そして実行する必要があります)。理論的には、世界中の任意の数の端末に出力できます。そうは言っても、この問題を解決する方法は、次のプロンプトのように、端末の「ステータス」/「タイトル」を更新してシェルのpidを報告するプロンプトの機能を使用することです。ps1=\u@\h:\w\$\ \[\e]2;\u@\h:\w [$$]\a\] このプロンプトとpid6399でシェルを表示する疑似端末には、user@host:~ [6399]のようなタイトルが付いています。 次に、 wmctrl のようなツールを使用して、次のようなbashスクリプトを記述できます。win_from_pid() { type wmctrl &>/dev/null || return 1 wmctrl -l | awk '/^.*\['"$1"'\]$/ { print $1 }' } これにより、ウィンドウリストが検索され、そのタイトルで終わるxウィンドウidが表示されます。したがって、関数win_from_pid $$は、スクリプトを実行している同じホスト上のウィンドウidがあれば、それを通知します。あなたはそこから焦点を決定する方法を理解することができます。 :)