Ich möchte ein Skript schreiben, das anzeigt, wie viele Minuten der Benutzer inaktiv war. Seit der letzten Berührung von Tastatur und Maus. Beispiel:
#!/bin/bash
while true
do
command_lines...
...
sleep 60
echo $var
done
Ergebnis:
Der Computer/Benutzer ist 1 Minute lang im Leerlauf.
Der Computer/Benutzer ist 2 Minuten lang im Leerlauf.
...
Der Computer/Benutzer ist 5 Minuten lang im Leerlauf.
...
Können wir das machen? Es kann in Bash, Python usw. sein.
Antwort1
Der Befehl „w“ aus der Manpage sollte helfen:
w - Zeigt an, wer angemeldet ist und was die Person tut.
# w | awk '{if (NR!=1) {print $1,$5 }}'
USER IDLE
root 0.00s
Antwort2
Tastatur und Maus sind auf einem Mehrbenutzersystem kein klares Konzept, da auf dem Rechner mehrere X-Server laufen können, von denen einige an eine oder mehrere physische Tastaturen oder Mäuse angeschlossen sind und andere nicht. Oder es können Remote-X-Server sein, mit denen sich auf dem Rechner laufende Terminals verbinden, oder Bash-Shells, die über SSH laufen, und es gibt noch viele weitere Möglichkeiten für „Bash“, Eingaben von einem Benutzer entgegenzunehmen …
„xprintidle“ gibt Ihnen die Leerlaufzeit des X-Servers an, mit dem Sie verbunden sind (der X-Server kann lokal oder remote sein, auch lokal, er muss nicht unbedingt der aktuell aktive auf dem System sein).
Die Änderungszeit von $TTY gibt Aufschluss über die Leerlaufzeit des Terminals. stat -c %Y "$TTY" ist die letzte Änderungszeit in Sekunden, die Sie von "$(date +%s)" abziehen können (wenn Sie auf einem GNU-System sind).