Comment un script peut-il détecter le temps d'inactivité d'un utilisateur?

33

Je veux vérifier, dans un script bash, depuis combien de temps l'utilisateur d'une session X est inactif.

L'utilisateur lui-même ne doit pas nécessairement utiliser bash, mais seulement X. Si l'utilisateur vient de déplacer la souris, par exemple, une bonne réponse serait "inactif pendant 0 secondes". S'il n'a pas touché l'ordinateur en 5 minutes, une bonne réponse serait "inactif pendant 300 secondes"

La raison pour ne pas utiliser immédiatement xautolock est de pouvoir implémenter un comportement complexe. Par exemple, si l'utilisateur est inactif pendant 10 minutes, essayez de le suspendre, s'il est inactif pendant plus de 5 minutes, éteignez-le (je sais que ça a l'air bizarre, mais suspendre ne fonctionne pas toujours ici ...)

Josinalvo
la source

Réponses:

38

Je viens de trouver un moyen simple de le faire.

Il y a un programme appelé xprintidle qui fait le tour

Obtenir le temps d'inactivité (en millisecondes) est aussi simple que

xprintidle

et installer

apt-get install xprintidle

Pour les administrateurs système, cela fonctionne aussi à distance

A partir d'une session SSH :

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

où john est l'utilisateur connecté à la session X sur la machine distante.

Josinalvo
la source
4

Réponse d' ici :

En bash

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

vous donne une paire nom d'utilisateur / idletime pour chaque shell. Donc, fondamentalement, vous pouvez obtenir les informations inactives via la commandew

Dan
la source
Comment cela compte-t-il les interactions avec X qui ne passent pas par un terminal? Comme, disons un mouvement de souris à l'intérieur d'un firefox. Si l'utilisateur déplace la souris, j'aimerais obtenir la réponse «non inactif» ou «inactif pendant 0 secondes»
josinalvo
@ josinalvo wvous donne simplement le temps d'inactivité dans ce terminal particulier, je pense.
Dan
3
Ce temps d'inactivité est en fait le temps d'exécution, le temps de disponibilité du processus (colonne WHAT de la sortie w). Cela ne donne donc aucune idée de la durée pendant laquelle l'utilisateur est resté inactif dans sa session X.
Rosch