ターミナルの前で過ごす時間を計りたいです。ターミナルがフォーカスを獲得/喪失したときに開始および停止するある種のタイマーを用意するのが最善の方法だと思います。そして、それは複数の端末で動作する必要があります...
何か案は? 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があれば、それを通知します。あなたはそこから焦点を決定する方法を理解することができます。 :)
適切なFOCUSメッセージについては、Xウィンドウメッセージをリッスンする必要があると思います。それがどれほど簡単/難しいかはわかりませんが。
または https://stackoverflow.com/questions/1014822/how-to-know-which-window-has-focus-and-how-to-change-it フォーカスのあるウィンドウの決定について説明しますそして、いくつかのオプションを提供します。その手法を使用して、ループで実行し、フォーカスの変更を追跡することができます。
ターミナルで統計を実行し、アクセス時間または変更時間を取得できます。
stat /dev/pts/2