Wie kann ein Skript die Leerlaufzeit eines Benutzers erkennen?

33

Ich möchte in einem Bash-Skript überprüfen, wie lange der Benutzer einer X-Sitzung inaktiv war.

Der Benutzer selbst muss nicht bash verwenden, sondern nur X. Wenn der Benutzer zum Beispiel nur die Maus bewegt, wäre eine gute Antwort "für 0 Sekunden untätig". Wenn er den Computer in 5 Minuten nicht berührt hat, wäre eine gute Antwort "für 300 Sekunden im Leerlauf"

Der Grund, warum xautolock nicht sofort verwendet wird, ist die Fähigkeit, ein komplexes Verhalten zu implementieren. Wenn der Benutzer beispielsweise 10 Minuten im Leerlauf ist, versuchen Sie, den Vorgang zu unterbrechen. Wenn er 5 Minuten im Leerlauf ist, schalten Sie ihn aus.

josinalvo
quelle

Antworten:

38

Habe gerade einen einfachen Weg gefunden, es zu tun.

Es gibt ein Programm namens xprintidle, das den Trick macht

Das Abrufen der Leerlaufzeit (in Millisekunden) ist so einfach wie

xprintidle

und zu installieren

apt-get install xprintidle

Für Sysadmins funktioniert es auch aus der Ferne

Aus einer SSH-Sitzung :

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

Dabei ist John der Benutzer, der bei der X-Sitzung auf dem Remotecomputer angemeldet ist.

josinalvo
quelle
4

Antwort von hier :

In Bash

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

gibt Ihnen ein Benutzername / Idletime-Paar für jede Shell. Grundsätzlich können Sie die Leerlaufinformationen über den Befehl abrufenw

Dan
quelle
Wie werden Interaktionen mit X gezählt, die nicht über ein Terminal erfolgen? Sagen wir eine Mausbewegung in einem Firefox. Wenn der Benutzer die Maus bewegt, möchte ich die Antwort "nicht im Leerlauf" oder "für 0 Sekunden im Leerlauf" erhalten
Josinalvo
@ Josinalvo wgibt Ihnen nur die Leerlaufzeit in diesem bestimmten Terminal, denke ich.
Dan
3
Diese Leerlaufzeit ist in der Tat die Laufzeit, die Betriebszeit des Prozesses (WHAT-Spalte der w-Ausgabe). Es gibt also keine Vorstellung davon, wie lange der Benutzer in seiner X-Sitzung untätig war.
Rosch