กระทู้ในฟอรัม ArchLinuxนี้มีโปรแกรม C สั้น ๆ ที่สอบถาม xscreensaver สำหรับข้อมูลว่าผู้ใช้ไม่ได้ใช้งานนานแค่ไหนดูเหมือนว่าจะค่อนข้างใกล้เคียงกับความต้องการของคุณ:
#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
ได้ โปรแกรมนี้พิมพ์ "เวลาว่าง" (ผู้ใช้ไม่ขยับ / คลิกด้วยเมาส์ไม่ใช้แป้นพิมพ์) ในหน่วยมิลลิวินาทีดังนั้นสคริปต์ทุบตีที่สร้างขึ้นจากสิ่งนี้อาจมีลักษณะเช่นนี้:
#!/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
วิธีนี้ยังคงต้องการการสำรวจปกติ แต่ทำทุกสิ่งที่คุณต้องการ ...