ユーザーがアイドル状態になってから何分経過したかを確認するにはどうすればよいですか?

ユーザーがアイドル状態になってから何分経過したかを確認するにはどうすればよいですか?

ユーザーがキーボードとマウスを最後にタッチしてから何分アイドル状態になっているかを表示するスクリプトを書きたいと思います。例:

#!/bin/bash
while true
do
 command_lines...
 ...
 sleep 60
 echo $var
done

結果:

コンピュータ/ユーザーは 1 分間アイドル状態になります。

コンピュータ/ユーザーは 2 分間アイドル状態になります。

...

コンピュータ/ユーザーは 5 分間アイドル状態になります。

...

それはできますか?Bash、Python などで可能です。

答え1

man ページによると、「w」コマンドが役立つはずです:

w - ログオンしているユーザーとそのユーザーの操作内容を表示します。

# w | awk '{if (NR!=1) {print $1,$5 }}'
USER IDLE
root 0.00s

答え2

キーボードとマウスは、マルチユーザー システムでは明確な概念ではありません。マルチユーザー システムでは、マシン上で複数の X サーバーが実行され、そのうちのいくつかは 1 つ以上の物理キーボードまたはマウスに接続され、いくつかは接続されていません。また、マシン上で実行されている端末が接続するリモート X サーバー、SSH 経由で実行される bash シェル、および「bash」がユーザーから入力を取得する方法は他にも多数あります...

「xprintidle」は、接続している X サーバーのアイドル時間を表示します (その X サーバーはローカルまたはリモートの場合があります。ローカルであっても、システム上で現在アクティブなサーバーであるとは限りません)。

$TTY の変更時刻は、端末のアイドル時間を示します。stat -c %Y "$TTY" は秒単位の最終変更時刻で、"$(date +%s)" から減算できます (GNU システムの場合)。

関連情報