ArchLinux forumlarındaki bu iş parçacığı , kullanıcının ne kadar süre boşta kaldığı hakkında bilgi almak için xscreensaver'ı sorgulayan kısa bir C programı içerir, bu gereksinimlerinize oldukça yakın görünmektedir:
#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);
}
Bunu farklı kaydet getIdle.c
ve derle
gcc -o getIdle getIdle.c -lXss -lX11
yürütülebilir bir dosya almak için getIdle
. Bu program milisaniye içinde "boşta kalma süresi" (kullanıcı fare ile hareket etmiyor / tıklamıyor, klavye kullanmıyor) yazdırıyor, bu nedenle üzerine kurulu bir bash betiği şöyle görünebilir:
#!/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
Bu hala düzenli oylamaya ihtiyaç duyuyor, ancak ihtiyacınız olan her şeyi yapıyor ...