
Ich werde bald ein ganzes Computerlabor (ca. 50 PCs) von Windows 7 auf Ubuntu 14.04 LTS migrieren müssen. Da es sich um eine Universität handelt, wird es 99 % der Zeit (wenn nicht 100 %) von Studenten genutzt. Es gibt keine zentrale Datenbank mit Benutzerkonten und Anmeldeinformationen, daher wird jeder PC nur zwei Konten haben, admin
wobei guest
letzteres für die automatische Anmeldung konfiguriert ist (abgesehen von einigen Anpassungen gemäßdieses Tutorial).
Wenn die PCs eingeschaltet sind und sich das Gastkonto automatisch anmeldet, wird nach dem Laden des Fenstermanagers als erstes dieses Dialogfeld angezeigt:
Es gibt jedoch zwei Probleme:
- Die allererste Person, die um 9 Uhr morgens am Computer sitzt, sieht das Dialogfeld, klickt auf „OK“, verwendet den PC, verlässt ihn, beendet die Sitzung nicht und sperrt den Bildschirm nicht (weil Benutzer), und der zweite Benutzer und die nächsten sehen die Meldung nicht
- Es gibt weitere relevante Informationen, die ich den Laborbenutzern weitergeben möchte (Laborregeln usw.).
Mit diesem Szenario im Hinterkopf möchte ich ein Dialogfeld haben, das diesem hier sehr ähnlich ist (aber mit einem anderen, von mir festgelegten Text), das immer dann angezeigt wird, wenn ein Computer beispielsweise 15 Minuten lang nicht verwendet wird. (Für diese Frage nehmen wir an, dass „nicht verwendet“ keine Tastatur- oder Mausaktivität bedeutet.)
Ich wurde angewiesen, Wie stellt Ubuntu Inaktivität fest, bevor es angehalten wird? Und Wie kann ein Skript die Leerlaufzeit eines Benutzers erkennen? und verwende Ruby- oder Sheel-Skripte, aber ich kann nicht programmieren.
Gibt es einen einfacheren Weg, um das zu erreichen, was ich brauche?
Antwort1
Verwendenxautolock
xautolock -time 15 -locker notify-send -t time "Title" "message_here" -i "path/to/icon"
oder verwenden Sie Zenity oder einen beliebigen Dialog.
Sehenhttp://manpages.ubuntu.com/manpages/trusty/man1/xautolock.1.html
Edit: Nach der Bearbeitung der Frage ging der OP mit Zenity
xautolock -time 15 -locker "zenity --text='<text here>' --warning"
Antwort2
Wenn Sie das folgende Skript im Hintergrund ausführen, wird die Leerlaufzeit alle 5 Sekunden überprüft. Wenn die Leerlaufzeit eine bestimmte Zeitspanne (in Minuten) überschreitet, wird eine Meldung angezeigt, die in einer Textdatei definiert ist (über ein Zenity-Fenster).
#!/usr/bin/env python3
import subprocess
import time
#########################################
t=15
textfile = "/path/to/message_textfile"
#########################################
with open(textfile, "r") as text:
message = text.read()
while 1!=0:
get_idle = subprocess.Popen(["xprintidle"], stdout=subprocess.PIPE)
result = get_idle.communicate()[0].decode("utf-8")
if int(result)/60000>t:
if warning_given == "yes":
pass
else:
subprocess.Popen(["zenity", "--warning", "--no-wrap", "--text="+message, ])
warning_given = "yes"
else:
warning_given = "no"
time.sleep(5)
Wie benutzt man
Installieren
xprintidle
:sudo apt-get install xprintidle
Kopieren Sie das Skript in eine leere Datei, stellen Sie die Leerlaufzeit (
t
) in Minuten ein und geben Sie den Pfad zur Textdatei an, die Ihren Nachrichtentext enthält. Speichern Sie es alsset_warning.py
Führen Sie es mit dem Befehl aus
python3 /path/to/set_warning.py
Anmerkungen
- Aus Komfortgründen (und um Kontrolle über das Textlayout zu haben) wird der Text aus einer externen Textdatei entnommen. Zeilenumbrüche etc. werden exakt aus der Textdatei in Ihre Nachricht kopiert. Da die
--no-wrap
Option von zenity verwendet wird, können Siebrauchendie Rückgaben zu nutzen, da Ihre Nachricht sonst zu allgemein wird. - Die Art und Weise, wie die Nachricht angezeigt wird, kann mit anderen Zenity-Optionen „optimiert“ werden.
Antwort3
Und das habe ich letztendlich gemacht:
xautolock -time 15 -locker "zenity --text='<text here>' --warning"
Ich habe diese Zeile als Eintrag zu den Sitzungs-Apps des Kontos hinzugefügt, mit dem eine Softverknüpfung besteht /etc/guest-session/skel
, sodass sie bei jedem Start der Gastsitzung ausgeführt wird.