Como um script pode detectar o tempo ocioso de um usuário?

33

Quero verificar, dentro de um script bash, quanto tempo o usuário de uma sessão X ficou ocioso.

O próprio usuário não precisa usar o bash, mas apenas o X. Se o usuário acabou de mover o mouse, por exemplo, uma boa resposta seria "inativo por 0 segundos". Se ele não tocar no computador em 5 minutos, uma boa resposta seria "inativa por 300 segundos"

O motivo para não usar o xautolock imediatamente é poder implementar algum comportamento complexo. Por exemplo, se o usuário estiver ocioso por 10 minutos, tente suspender; se ele estiver ocioso por mais 5 minutos, desligue (eu sei que parece estranho, mas a suspensão nem sempre funciona aqui ...)

josinalvo
fonte

Respostas:

38

Acabei de encontrar uma maneira simples de fazer isso.

Existe um programa chamado xprintidle que faz o truque

obter o tempo ocioso (em milissegundos) é tão simples quanto

xprintidle

e instalar

apt-get install xprintidle

Para administradores de sistemas, ele também funciona remotamente

De uma sessão ssh :

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

onde john é o usuário conectado à sessão X na máquina remota.

josinalvo
fonte
4

Resposta daqui :

Na festança

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

fornece um par de nome de usuário / idletime para cada shell. Então, basicamente, você pode obter as informações ociosas através do comandow

Dan
fonte
como isso conta as interações com o X que não passam por um terminal? Tipo, digamos um movimento do mouse dentro de um firefox. Se o usuário está se movendo o mouse, eu gostaria de obter a resposta "não idle", ou "inactivo durante 0 segundos"
josinalvo
@josinalvo wapenas fornece o tempo ocioso nesse terminal específico, eu acho.
Dan
3
Na verdade, esse tempo ocioso é o tempo de execução, o tempo de atividade do processo (coluna WHAT da saída w). Portanto, não dá idéia de quanto tempo o usuário está ocioso em sua sessão X.
rosch