ユーザーが非アクティブ(システムアイドル)状態になったら、コマンドを実行したいと思います。たとえば、
echo "You started to be inactive."
また、ユーザーが再びアクティブにした場合(システムはもはやアイドル状態ではありません):
echo "You started to be active, again."
これにはシェルスクリプトが必要です。タイマー/間隔なしでこれは可能ですか?たぶんシステムイベントですか?
ベストアンサー1
ArchLinuxフォーラムのこの投稿ユーザーがアイドル状態の期間に関する情報を取得するためにxscreensaverを照会する短いCプログラムが含まれています。これはあなたの要求に非常に近いようです。
#include <X11/extensions/scrnsaver.h>
#include <stdio.h>
int main(void) {
Display *dpy = XOpenDisplay(NULL);
if (!dpy) {
return(1);
}
XScreenSaverInfo *info = XScreenSaverAllocInfo();
XScreenSaverQueryInfo(dpy, DefaultRootWindow(dpy), info);
printf("%u\n", info->idle);
return(0);
}
別の名前で保存しgetIdle.c
てコンパイルしてください
gcc -o getIdle getIdle.c -lXss -lX11
実行可能ファイルをインポートしますgetIdle
。プログラムは「アイドル時間」をミリ秒単位で印刷します(ユーザーがマウスを移動またはクリックせず、キーボードを使用しない)、これに基づいて構築されたbashスクリプトは次のとおりです。
#!/bin/bash
idle=false
idleAfter=3000 # consider idle after 3000 ms
while true; do
idleTimeMillis=$(./getIdle)
echo $idleTimeMillis # just for debug purposes.
if [[ $idle = false && $idleTimeMillis -gt $idleAfter ]] ; then
echo "start idle" # or whatever command(s) you want to run...
idle=true
fi
if [[ $idle = true && $idleTimeMillis -lt $idleAfter ]] ; then
echo "end idle" # same here.
idle=false
fi
sleep 1 # polling interval
done
それでも定期的なポーリングが必要ですが、必要なすべての操作を実行します。