¿Cómo puede un script detectar el tiempo de inactividad de un usuario?

33

Quiero verificar, dentro de un script bash, cuánto tiempo ha estado inactivo el usuario de una sesión X.

El usuario mismo no tiene que usar bash, sino solo X. Si el usuario acaba de mover el mouse, por ejemplo, una buena respuesta sería "inactivo durante 0 segundos". Si no ha tocado la computadora en 5 minutos, una buena respuesta sería "inactiva por 300 segundos"

La razón para no usar xautolock de inmediato es poder implementar un comportamiento complejo. Por ejemplo, si el usuario está inactivo durante 10 minutos, intente suspenderlo; si está inactivo durante más 5 minutos, cierre (sé que suena extraño, pero suspender no siempre funciona aquí ...)

josinalvo
fuente

Respuestas:

38

Acabo de encontrar una manera simple de hacerlo.

Hay un programa llamado xprintidle que hace el truco

obtener el tiempo de inactividad (en milisegundos) es tan simple como

xprintidle

y para instalar

apt-get install xprintidle

Para los administradores de sistemas, también funciona de forma remota

De una sesión ssh :

export DISPLAY=:0 && sudo -u john xprintidle

donde john es el usuario conectado a la sesión X en la máquina remota.

josinalvo
fuente
4

Responde desde aquí :

En bash

w | tr -s " " | cut -d" " -f1,5 | tail -n+3

le proporciona un par de nombre de usuario / tiempo de inactividad para cada shell. Entonces, básicamente, puede obtener la información inactiva a través del comandow

Dan
fuente
¿Cómo cuenta esto las interacciones con X que no son a través de un terminal? Como, digamos un movimiento del mouse dentro de un firefox. Si el usuario mueve el mouse, me gustaría obtener la respuesta "no inactivo" o "inactivo durante 0 segundos"
josinalvo
@josinalvo wsolo te da el tiempo de inactividad en ese terminal en particular, creo.
Dan
3
Ese tiempo de inactividad es, de hecho, el tiempo de ejecución, el tiempo de actividad del proceso (QUÉ columna de la salida w). Por lo tanto, no da idea de cuánto tiempo ha estado inactivo el usuario en su sesión X.
rosch