Entries tagged unblank

Automatisches Ausloggen im Kiosk Modus bei Inaktivitaet mithilfe von xscreensaver

Posted on 11. April 2013 Comments

Das Problem bei Rechnern im Kiosk Modus ist, dass die Benutzer sich manchmal nicht ausloggen und so prinzipiell jeder, der sich als nächstes an den Rechner setzt einfach diverse Accounts übernehmen kann, weil z.B. die Cookies noch vorhanden sind. Dieser Artikel basiert auf dem vorherigen Raspberry Pi als Kiosk mit resourcenschonendem Browser und VESA Mount. Da dieser Brower sich neu startet, wenn der Prozess mit 5 Sekunden Pause nicht läuft, kann man ihn einfach killen.

Zur Messen der Inaktivität haben sich die Leute vom xscreensaver-Projekt schon genug Gedanken gemacht, also möchte ich das hier nutzen, statt etwas eigenes zu schrieben oder timeoutd zu nutzen. Die Timeout Zeit setzt man in ~/.xscreensaver.

In den man-pages von xscreensaver-command findet man folgendes Perl-Skript. Ich habe es ein bisschen meinen Anforderungen angepasst. Perl muss natürlich vorher installiert werden.

sudo apt-get install perl

Es piped in der Variable IN den Befehl xscreensaver-command -watch, welcher den xscreensaver beobachtet. Sollte dort nun also die Meldung BLANK(Bildschirmschoner geht an) oder LOCK(Bildschirmschoner lockt) auftauchen(passiert nach der eben definierten Zeit), dann deaktiviert er ihn sofort wieder, killt den Browser und setzt ein flag. Das wiederrum löst UNBLANK aus(Bildschirmschoner geht aus) und das flag wird zurückgesetzt, da er sonst im nächsten Schleifendurchlauf sofort wieder den Browser killen würde. Durch das Skript aus dem eben genannten Artikel prüft der Rechner sowieso, ob der Browser läuft und wenn nicht, startet den Prozess. Damit wird nach spätestens 5 Sekunden der Browser neu gestartet und man muss ihn hier nicht starten. Die Datei habe ich xscreensaver-command.pl genannt, nach /usr/local/bin geschoben und in den Autostart in .xsession eingetragen.

Code (Download)

 

my $blanked = 0;
open (IN, "xscreensaver-command -watch  |");
while(<IN>) {
        if (m/^(BLANK|LOCK)/) {
                if (!$blanked) {
                        # Schliesse Browser
                        # Starte Browser neu
                        print "Deaktiviere xscreensaver...\n";
                        system "xscreensaver-command -deactivate";
                        print "Beende Browser...\n";
                        system "killall browser-repat";
                        print "In 5 Sekunden wird der Browser neu gestartet";
                        $blanked = 1;
                 }
        } elsif (m/^UNBLANK/) {
                $blanked = 0;
        }
}