W jaki sposób skrypt może wykryć czas bezczynności użytkownika?

33

Chcę sprawdzić w skrypcie bash, jak długo użytkownik sesji X był bezczynny.

Sam użytkownik nie musi używać bash, ale tylko X. Jeśli użytkownik po prostu przesunął mysz, na przykład dobrą odpowiedzią byłoby „bezczynność przez 0 sekund”. Jeśli nie dotknie komputera w ciągu 5 minut, dobrą odpowiedzią byłoby „bezczynność przez 300 sekund”

Powodem, dla którego nie należy od razu używać xautolock, jest możliwość zaimplementowania pewnych złożonych zachowań. Na przykład, jeśli użytkownik jest bezczynny przez 10 minut, spróbuj zawiesić, jeśli jest bezczynny przez więcej 5 minut, wyłącz (wiem, że to brzmi dziwnie, ale zawieszenie nie zawsze działa tutaj ...)

josinalvo
źródło

Odpowiedzi:

38

Właśnie znalazłem prosty sposób, aby to zrobić.

Istnieje program o nazwie xprintidle, który załatwia sprawę

uzyskanie czasu bezczynności (w milisekundach) jest tak proste, jak

xprintidle

i zainstalować

apt-get install xprintidle

W przypadku sysadmins działa również zdalnie

Z sesji ssh :

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

gdzie john to użytkownik zalogowany do sesji X na zdalnym komputerze.

josinalvo
źródło
4

Odpowiedź stąd :

W bash

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

daje ci nazwę użytkownika / parę idletime dla każdej powłoki. Zasadniczo możesz uzyskać bezczynne informacje za pomocą poleceniaw

Dan
źródło
Jak to się liczy interakcje z X, które nie są przez terminal? Na przykład powiedz ruch myszy wewnątrz firefoxa. Jeśli użytkownik porusza myszą, chciałbym uzyskać odpowiedź „bezczynność” lub „bezczynność przez 0 sekund”
josinalvo
@ josinalvo wpo prostu daje ci czas bezczynności w tym konkretnym terminalu.
Dan
3
Ten czas bezczynności to w rzeczywistości czas działania, czas działania procesu (CO kolumna wyjścia w). Nie ma więc pojęcia, jak długo użytkownik był bezczynny w swojej sesji X.
rosch