23 Oktober 2016 10:04

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.

Die Startseite von YouTube

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.

Kommentare

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