Lockscreen beim Suspend (Reloaded)
Nutzt man kein vollständiges Desktop Environment, steht man vor der Frage, wie man beim Suspend automatisch einen Lockscreen aktivieren kann. In den letzten Jahren habe ich dafür systemd genutzt, was prinzipiell funktioniert, aber einige Haken hat.
In diesem Artikel zeige ich, wie ich von slock zu i3lock gewechselt bin und dadurch den Fingerprintreader zum Entsperren nutzen kann. Außerdem stelle ich ein kleines Script vor, um den Bildschirminhalt in verpixelter Form für den Sperrbildschirm zu verwenden.
Fingerprintreader mit i3lock
i3lock ist eine Weiterentwicklung von slock und unterstützt (neben einer Animation bei der Eingabe des Passworts) den Authentifizierungsdienst PAM, wodurch auf einfache Weise ein Fingerprintreader mittels fprint genutzt werden kann. Es muss lediglich der Inhalt von /etc/pam.d/i3lock durch Folgendes ersetzt werden:
auth required pam_env.so
auth sufficient pam_unix.so try_first_pass likeauth nullok
auth sufficient pam_fprintd.so
Anschließend stehen verschiedene Möglichkeiten zum Entsperren zur Verfügung:
- Eingabe des Passworts und Enter
- Enter und Scannen des Fingers
- Eingabe eines falschen Passworts, anschließend wird automatisch der Fingerabdruck verlangt
- Drei falsch gescannte Fingerabdrücke führen zu einem fehlgeschlagenen Entsperren
Automatisch Sperren beim Suspend
Nutzt man systemd-(System)-Units zum Starten von Benutzerprogrammen, laufen diese nicht in der Benutzersession. Das funktioniert zwar meistens trotzdem, ist aber etwas unsauber. In diesem Fall funktioniert der Fingerprintreader leider nicht, weil dieser eine Session voraussetzt. Ziel ist es daher, den Lockscreen aus einer bestehenden Benutzersession heraus zu starten.
systemd sorgt bereits dafür, dass beim Suspend ein entsprechendes Signal gesendet wird. Dieses wird u.a. auch durch größere Lösungen aus den Desktop Environments genutzt. Glücklicherweise gibt es ein kleines Programm, welches das Signal abfangen kann und einen Befehl ausführen kann: xss-lock
Leider hat dieses Programm einen kleinen Nachteil: Es reagiert nicht nur auf den Suspend, sondern auch auf das automatische Ausschalten des Bildschirms. Ich habe einen Fork erstellt, welcher eine zusätzliche Option --ignore-blank
anbietet. Arch-Nutzer können direkt das PKGBUILD verwenden.
Nun muss xss-lock nur noch beim Einloggen gestartet werden, beispielsweise durch einen Eintrag in die ~/.xinitrc:
(xss-lock --ignore-blank -- i3lock -c 000000 &)
-c 000000
sorgt für einen schwarzen Sperrbildschirm und wer ihn auch beim Ausschalten des Bildschirms (siehe xset dpms
) haben möchte, lässt einfach --ignore-blank
weg.
Alles verpixelt
Manche mögen einen einfarbigen Sperrbildschirm (ich habe die letzten fünf Jahre nichts anderes genutzt). Manche mögen es aber auch etwas kreativer. i3lock bietet dafür die Möglichkeit, ein beliebiges PNG-Bild als Hintergrund zu verwenden.
Ich habe ein kleines Script i3lock-pixelate geschrieben, welches einen Screenshot des aktuellen Bildschirminhalts macht und verpixelt. Es lässt sich als direkter Ersatz für i3lock nutzen, also i3lock-pixelate
oder mit Optionen wie i3lock-pixelate -u
(zum Ausblenden der Passworteingabeanimation).
#!/bin/bash
BACKGROUND=$(mktemp /tmp/i3lock-pixelate.XXXXX)
SCALEFACTOR=3
function finish {
rm "$BACKGROUND"
}
trap finish EXIT
import -window root jpeg:"$BACKGROUND"
SIZE=$(identify -format "%[fx:w]x%[fx:h]" "$BACKGROUND")
convert -scale $SCALEFACTOR% -sample $SIZE\! jpeg:"$BACKGROUND" -quality 11 png24:"$BACKGROUND"
i3lock -i "$BACKGROUND" "$@"
Neben i3lock wird ImageMagick benötigt. Die Stärke der Verpixelung lässt sich über SCALEFACTOR
beeinflussen: Je kleiner, desto größer sind die Pixel.
Mit kleinen Modifikationen am convert
-Befehl lassen sich auch andere Effekte realisieren. Beispielsweise kann ein Text oder eine Grafik eingefügt werden. Seid kreativ!
Nachtrag
Die Erweiterung von i3lock hat mir keine Ruhe gelassen und so habe ich einen Wrapper geschrieben: i3lockmore fügt zwei Optionen --pixelate [scalefactor]
und --dpms timeout
hinzu. Details finden sich in der README.