Bildschirm sperren durch Suspend

Klappt man das Notebook zusammen und ein “Suspend” wird erfolgreich durchgeführt, so ist der Bildschirm, wenn alles klappt, nach dem “Erwachen” wieder so, wie er zuvor war. Das ist grundsätzlich gut; im Hinblick auf die Sicherheit jedoch eine Katastrophe. Klappt man das Notebook zu, ist es ratsam, dass man sich erst mal wieder anmelden sollte, bevor es dann weitergeht.

Für die Bildschirmsperrung wird exemplarisch slock verwandt.

Idee

Wird ein “Suspend” ausgeführt, so wird zuvor die Datei /etc/rc.suspend ausgeführt. Will man also, dass ein Kommando ausgeführt wird, bevor der Rechner “entschläft”, so kann man das eben hier konfigurieren.

Problem

Das Tool zum Sperren des Bildschirms ist natürlich ein X11-Anwendung, die durch “root” aufgerufen wird. Das bedeutet, dass “root” auf dem Bildschirm des Nutzers, hier “user”, ausführen muss.

Lösung

Es bedarf also eines Befehls, der als root-Nutzer ausgeführt wird, welcher wiederum eine X11-Anwendung auf dem Bildschirm des jeweilig angemeldet Nutzers ausführt. Hierfür muss auf etwas schwarze X11-Magie zurückgegriffen werden, indem ein paar Umgebungsvariablen “verdreht” werden.

Befehl

/usr/bin/su -l user -c 'setenv DISPLAY :0.0; setenv XAUTHORITY /home/user/.Xauthority; /usr/local/bin/slock &'

Erklärung

Der Befehl su wechselt den Benutzer auf (in diesem Fall) “user”. Mit eben diesen Nutzerrechten werden zwei Umgebungsvariablen (DISPLAY & XAUTHORITY) gesetzt, um darauf folgend dann slock aufzurufen. Das “&” am Ende des Befehls ist wichtig, da sonst der Befehl nicht im Hintergrund gestartet wird und somit das “suspend”-Skript blockiert. Sollte das Skript beim “Aufwachen” noch blockiert bzw. noch nicht abgearbeitet sein, wird es durch /etc/rc.resume beendet. Damit wäre dann auch slock beendet.

Hinweis

Man sollte diesen Aufruf möglichst weit oben, am besten direkt nach den Kommentaren, im Skript /etc/rc.suspend einfügen, so dass der Befehl auch wirklich ausgeführt wird.