OK, que has intentado? ¿Qué dijo google? ¿Has intentado descubrir cómo el protector de pantalla detecta esto? Tómese el tiempo de buscar antes de publicar preguntas aquí y lea Cómo hacer una buena pregunta .
terdon
Solo encontré un programa xautolockpero no hay ejemplos
Respuestas:
20
Utilizo un programa llamado xprintidlepara averiguar el tiempo de inactividad X, que supongo que utiliza la misma fuente de datos que los protectores de pantalla. xprintidleya no parece tener un flujo ascendente, pero el paquete Debian está vivo y bien.
Es una aplicación muy simple: devuelve la cantidad de milisegundos desde la última interacción X:
(nota: debido al sistema subyacente, siempre dará un valor en ms ligeramente inferior al tiempo de inactividad "real").
Puede usar esto para crear una secuencia de comandos que ejecute una secuencia determinada después de cinco minutos de inactividad mediante, por ejemplo:
#!/bin/sh# Wanted trigger timeout in milliseconds.
IDLE_TIME=$((5*60*1000))# Sequence to execute when timeout triggers.
trigger_cmd(){
echo "Triggered action $(date)"}
sleep_time=$IDLE_TIME
triggered=false
# ceil() instead of floor()while sleep $(((sleep_time+999)/1000));do
idle=$(xprintidle)if[ $idle -ge $IDLE_TIME ];thenif! $triggered;then
trigger_cmd
triggered=true
sleep_time=$IDLE_TIME
fielse
triggered=false
# Give 100 ms buffer to avoid frantic loops shortly before triggers.
sleep_time=$((IDLE_TIME-idle+100))fidone
El desplazamiento de 100 ms se debe a la peculiaridad observada anteriormente que xprintidlesiempre devolverá un tiempo ligeramente inferior al tiempo de inactividad "real" cuando se ejecuta de esta manera. Funcionará sin este desplazamiento, y luego será más preciso a una décima de segundo, pero activará la xprintidleverificación frenéticamente durante los últimos milisegundos antes de que finalice un intervalo. No es un cerdo de rendimiento de ninguna manera, pero me parece poco elegante.
He usado un enfoque similar en un script de Perl (un complemento irssi) durante bastante tiempo, pero lo anterior se acaba de escribir y no se ha probado realmente, excepto por algunas ejecuciones de prueba durante la escritura.
Pruébelo ejecutándolo en un terminal dentro de X. Recomiendo configurar el tiempo de espera en, por ejemplo, 5000 ms para pruebas, y agregarlo set -xdirectamente a continuación #!/bin/shpara obtener una salida informativa para ver cómo funciona.
Una vez que se instalaron, compilé lo anterior así:
$ gcc xidle.c -o xidle -lX11 -lXext -lXss
Puede ver que es capaz de informar la cantidad de segundos que X está detectando como tiempo inactivo ejecutándolo así:
$ while[1];do./xidle ; sleep 2;done0.0050001.9480003.9540005.9590007.9650000.073000<--- moved the mouse here which resets it
0.035000
Usando este ejecutable, podría crear un script que pueda hacer algo como esto, monitoreando el tiempo de inactividad informado por xidle.
$ while[1];do idle=$(./xidle);[ $( echo "$idle > 5"| bc )-eq 0]&& echo "still < 5"|| echo "now > 5";
sleep 2;done
still <5
still <5
still <5
now >5
now >5
still <5
still <5
still <5
Lo anterior muestra still < 5hasta que hayan transcurrido 5 segundos de inactividad, momento en el que comienza a decir now > 5, lo que significa que han pasado más de 5 segundos.
NOTA: Puede incorporar su notify-send 'a'en el ejemplo anterior.
xautolock
pero no hay ejemplosRespuestas:
Utilizo un programa llamado
xprintidle
para averiguar el tiempo de inactividad X, que supongo que utiliza la misma fuente de datos que los protectores de pantalla.xprintidle
ya no parece tener un flujo ascendente, pero el paquete Debian está vivo y bien.Es una aplicación muy simple: devuelve la cantidad de milisegundos desde la última interacción X:
(nota: debido al sistema subyacente, siempre dará un valor en ms ligeramente inferior al tiempo de inactividad "real").
Puede usar esto para crear una secuencia de comandos que ejecute una secuencia determinada después de cinco minutos de inactividad mediante, por ejemplo:
El desplazamiento de 100 ms se debe a la peculiaridad observada anteriormente que
xprintidle
siempre devolverá un tiempo ligeramente inferior al tiempo de inactividad "real" cuando se ejecuta de esta manera. Funcionará sin este desplazamiento, y luego será más preciso a una décima de segundo, pero activará laxprintidle
verificación frenéticamente durante los últimos milisegundos antes de que finalice un intervalo. No es un cerdo de rendimiento de ninguna manera, pero me parece poco elegante.He usado un enfoque similar en un script de Perl (un complemento irssi) durante bastante tiempo, pero lo anterior se acaba de escribir y no se ha probado realmente, excepto por algunas ejecuciones de prueba durante la escritura.
Pruébelo ejecutándolo en un terminal dentro de X. Recomiendo configurar el tiempo de espera en, por ejemplo, 5000 ms para pruebas, y agregarlo
set -x
directamente a continuación#!/bin/sh
para obtener una salida informativa para ver cómo funciona.fuente
Yo uso
xssstate
para tales fines. Está disponible ensuckless-tools
paquete en Debian o Ubuntu , o en sentido ascendente .Luego puede usar el siguiente script de shell:
fuente
Aquí hay una aplicación C que encontré que puedes compilar.
Necesita un par de bibliotecas para construir. En mi sistema Fedora 19 necesitaba las siguientes bibliotecas:
Una vez que se instalaron, compilé lo anterior así:
Puede ver que es capaz de informar la cantidad de segundos que X está detectando como tiempo inactivo ejecutándolo así:
Usando este ejecutable, podría crear un script que pueda hacer algo como esto, monitoreando el tiempo de inactividad informado por
xidle
.Lo anterior muestra
still < 5
hasta que hayan transcurrido 5 segundos de inactividad, momento en el que comienza a decirnow > 5
, lo que significa que han pasado más de 5 segundos.NOTA: Puede incorporar su
notify-send 'a'
en el ejemplo anterior.Referencias
fuente
bsd ports (paquetes de colección) tiene un programa que puede hacer esto:
http://man.openbsd.org/OpenBSD-current/man1/xidle.1
está disponible, por ejemplo, aquí:
http://distcache.freebsd.org/local- distfiles / novel / xidle-26052015.tar.bz2
construir como:
tenga en cuenta que el programa necesita contener la ruta completa al binario, ya que se pasa a execv ().
fuente