27 Dezember 2012 15:32

Desktop automatisch beim Standby sperren

Wie bereits in "awesome WM im Schnelldurchlauf" angekündigt kommt hier eine kurze Anleitung, wie man seinen Linux-Desktop automatisch sperren kann, wenn der Rechner (bzw. meistens das Notebook) in den Standby geht.

Von den üblichen Desktop Environments wird dies bereits automatisch gemacht (z.B. ist krunner bei KDE dafür verantwortlich). Da ich jedoch kein krunner laufen habe (braucht viel Arbeitsspeicher und die wichtigsten Funktionen habe ich in meiner awesome wibox drin), sperrt sich der Desktop nicht mehr automatisch.

Eine Alternative zur Sperrfunktion von krunner ist xlock (z.B. aus dem Paket xlockmore). Wir müssen also irgendwie dafür sorgen, dass beim Wechsel in den Standby xlock gestartet wird. Die meisten Distributionen setzen auf pm-utils um auf Events der Energieverwaltung zu reagieren, daher nehmen wir das. Dazu muss lediglich ein kleines Script in /etc/pm/sleep.d gepackt werden.

Das Problem ist, dass die Scripts in /etc/pm unter dem Benutzer root ausgeführt werden. Beim Entsperren müsste man somit das root-Passwort eingeben, also nicht wie gewünscht das Benutzerpasswort. Wir können jedoch mittels su xlock unter einem anderen Benutzer starten. Damit reduziert sich das Problem auf das Finden des aktuell eingeloggten Benutzers.

Das ist leider auch nicht ganz trivial. Je nach Distribution kann man das an unterschiedlichen Stellen erfahren. Ggf. können auch mehrere Benutzer gleichzeitig eingeloggt sein – für welchen Benutzer soll man dann den Desktop sperren? Daher ist das folgende Script, welches bei mir unter /etc/pm/sleep.d/22xlock liegt, lediglich ein Kompromiss, der in den meisten Fällen funktioniert.

#!/bin/bash
user=`ps aux | grep -m1 'bin/x-[s]ession-manager' | awk '{print $1}'`
running=`ps aux | grep -m1 'x[l]ock'`

[[ -z "$running" ]] || exit 0
[[ -n "$user" ]] || exit 0

case $1 in
    hibernate)
        su $user -c "xlock -mode blank -display :0&"
        ;;
    suspend)
        su $user -c "xlock -mode blank -display :0&"
        ;;
    thaw)
        ;;
    resume)
        ;;
    *)  echo "The xlock-on-sleep script is broken"
        ;;
esac

Das merkwürdige [s] bzw. [l] beim grep ist notwendig, damit der grep-Aufruf selbst nicht erkannt wird. Bisher hatte ich mit diesem Script keine Probleme, dennoch sollte man nicht vergessen, dass auch xlock keinen absoluten Schutz bietet (eher eine Hürde). Das sinnvollste ist immer noch das vollständige Abschalten und eine verschlüsselte Festplatte.

Update 16.04.2013

Beim Wechsel von KDM zu LightDM ist mir aufgefallen, dass dieses Script nicht mehr lief. Das liegt daran, dass nicht der Alias x-session-manager, sondern startkde direkt aufgerufen wird. Die Zeile ist dann entsprechend anzupassen.

Update 08.07.2013

Es gibt eine aktualisierte Version:

#!/bin/sh

user="insert user here"

if pidof xlock > /dev/null; then
    exit 0
fi

case $1 in
    hibernate|suspend)
        su -c 'DISPLAY=:0 xlock -mode blank &' "$user"
        ;;
    thaw|resume)
        ;;
esac

Hier muss man entweder den Benutzernamen eintragen oder ihn irgendwie anders bestimmen.

Kommentare

Powered by BetaBlog
Login | RSS Beiträge RSS Kommentare Impressum