Este tópico nos fóruns do ArchLinux contém um pequeno programa em C que consulta o xscreensaver por quanto tempo o usuário ficou ocioso, parece ser bem próximo dos seus requisitos:
#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);
}
Salvar como getIdle.c
e compilar com
gcc -o getIdle getIdle.c -lXss -lX11
para obter um arquivo executável getIdle
. Este programa imprime o "tempo ocioso" (o usuário não se move / clica com o mouse, não usa o teclado) em milissegundos, portanto, um script bash que se baseia nisso poderia ter a seguinte aparência:
#!/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
Isso ainda precisa de pesquisas regulares, mas faz tudo que você precisa ...