published
tags: i3 systemd i3lock

Bildschirm sperren wenn der Laptopdeckel geschlossen wird - mit systemd und i3lock

Gestern habe ich Arch Linux frisch auf meinem Laptop aufgesetzt. Leider weicht meine persönliche Ansicht dessen, was passieren soll, wenn der Laptopdeckel geschlossen wird von dem ab, was systemd tatsächlich tut. Im Folgenden will ich daher kurz erläutern, wie man das Standardverhalten ändert und den Bildschirm mit i3lock bzw. einem kleinen Shellscript sperrt, wenn der Deckel geschlossen wird.

Verhalten von systemd anpassen

Die relevante Datei, die hierfür angepasst werden muss, ist die /etc/systemd/logind.conf. In der [Login] Sektion sollte sich unter anderem ein Eintrag namens HandleLidSwitch befinden. Dieser muss - sofern nicht bereits auskommentiert - auskommentiert werden, der Wert muss auf lock gesetzt werden. Das sollte dann irgendwie so ausschauen (auskommentierte Einträge habe ich weg gelassen):

[Login]
HandleLidSwitch=lock

Nachdem man anschließend systemd-logind.service neugestartet hat, sendet systemd beim Schließen des Laptopdeckels ein Locksignal. Leider reagiert i3/i3lock nicht ohne einen weiteren kleinen Tweak darauf.

i3lock als X screenlocker verwenden

Um dafür zu sorgen, dass i3lock auf das Signal von systemd reagiert, wird xss-lock benötigt. Das Paket bekommt man auch aus dem AUR. Ich habe das Paket xss-lock-git gewählt, da das andere Paket anscheinend einen Bug enthält, der dafür gesorgt hat, dass ein Prozessorkern ständig vollständig ausgelastet war.

Anschließend muss in die ~/.i3/config folgender Eintrag eingefügt werden:

exec xss-lock -- i3lock -lock&

Nachdem man sich einmal abgemeldet und wieder angemeldet hat (oder den Befehl alternativ einmal manuell ausführt), sollte nach dem Schließen des Laptopdeckels i3lock anspringen.

Eyecandy: Lockscript, das den Bildschirm verpixelt

Ein Kommilitone hat sich ein kleines Lockscript geschrieben, das ich noch ein wenig angepasst habe und ich natürlich keinem vorenthalten will:

scrot /tmp/tmp_lock.png
mogrify -scale 5% -scale 2000%  /tmp/tmp_lock.png
i3lock -i /tmp/tmp_lock.png 

Damit das Script funktioniert, müssen scrot und imagemagick installiert sein. Scrot ist ein Screenshot-Tool. Wen der Beep des Rechners beim anfertigen eines Screenshots nervt, der kann sich auch eine gepatchte Variante (scrot-no-beep) aus dem AUR holen oder den Beep manuell und global deaktivieren (über ALSA oder Treiberblacklist). mogrify ist Teil des Imageagick-Projekts und ein Kommandozeilentool für Bildbearbeitung. Der Befehl in Zeile 2 des Lockscripts skaliert den vorher angelegten Screenshot auf 5% herunter, dieses klein skalierte Bild wird anschließend auf 2000% hochskaliert, weswegen es die selbe Größe hat wie der ursprüngliche Screenshot. Durch das herunterskalieren geht jedoch viel Information verloren, was im Effekt der Verpixelung resultiert. Zuletzt wird i3lock mit dem Bild als Parameter aufgerufen.

So sieht das dann aus (die Seite die du gerade ansiehst war im Firefox geöffnet, als ich den Deckel geschlossen habe):

Screenshot des Lockscripts mit scrot und mogrify

Das Script speichert man einfach irgendwo wo man es wieder findet ab und macht es mit chmod +x <Dateiname> ausführbar. Der oben angelegte Eintrag in der ~/.i3/config muss angepasst werden, damit jedes mal beim Schließen des Deckels das Script aufgerufen wird. Statt i3lock muss der <Pfad zum Script> eingetragen werden, so zum Beispiel:

exec xss-lock -- ~/.lockscript -lock&

Fertig! Wenn man den Laptopdeckel schließt, wird das Script aufgerufen, macht einen Screenshot, verpixelt ihn und setzt ihn als Hintergrund für i3lock.