AZ's Blog » systemd https://azapps.de Einmal mit Profis arbeiten… Sat, 28 Jun 2014 13:46:52 +0000 de-DE hourly 1 http://wordpress.org/?v=4.2.4 Systemd: slock beim Wechseln in den suspend anschalten https://azapps.de/blog/2012/09/27/systemd-slock-beim-wechseln-in-den-suspend-anschalten/ https://azapps.de/blog/2012/09/27/systemd-slock-beim-wechseln-in-den-suspend-anschalten/#comments Thu, 27 Sep 2012 08:00:39 +0000 https://azapps.de/?p=115 In der Zeit vor Systemd war die Prozedur um meinen Rechner schlafen zu legen und den Zugriff für andere zu sperren ziemlich aufwändig: Ich brauchte ganze zwei Tastenkombinationen dafür (SUPER+X für slock und FN+F4 für den Suspend). Lange Zeit (2 Wochen oder so) konnte ich mein Notebook nicht mit schlafen legen und slock anschalten. Dieses Problem habe ich endlich behoben.

Die Anleitung funktioniert genauso einfach auch mit anderen screensavern aber für slock musst du den Code nur kopieren.

Wir benötigen lediglich einen Service, welcher aktiv wird, sobald man versucht den Rechner schlafen zu legen (Suspend oder Hibernate). Dann wird einfach slock gestartet.

Lege dazu einfach ein Unit-File in /usr/lib/systemd/system/slock.service an und fülle dieses mit folgendem Inhalt:

[Unit]
Description=Lock X session using slock
After=sleep.target

[Service]
User=[Dein Username hier]
Type=forking
Environment=DISPLAY=:0
ExecStart=/usr/bin/slock

[Install]
WantedBy=sleep.target

Der Code sollte verständlich sein. Nachdem man den Rechner schlafen legen will, wird slock angeschalten. Ich habe beobachtet, dass slock sofort angeschalten wird und nicht erst nachdem der Rechner aufwacht. Wenn man statt After Sleep hinschreibt, dann wird slock gestartet und erst nachdem man die Sperre aufgehoben hat, wird der Rechner schlafen gelegt. Das ist ziemlich nervig und geht leicht am Ziel vorbei.

Und damit man nicht jedes mal systemctl suspend eintippen muss, habe ich mir in meine Xmonad.hs noch ein Shortcut eingearbeitet. Füge dazu einfach in die Funktion keyBindings noch folgende Zeile ein:

	, mod4Mask > xK_v > spawn "systemctl suspend"

Nachdem du die Konfiguration erneut eingelesen hast (meist MOD+Q), kannst du auch diese Tastenkombination benutzen. Bei mir ist dies MOD+V, da das V so schön praktisch neben dem X (nur slock) liegt. Klingt komisch, ist aber so (NEO).

„Und warum hast du das nicht mit einem Sleep-Hook gemacht?“ – Weil es bei mir nicht ging. Wenn du weißt, wie, schreib einen Kommentar.

]]>
https://azapps.de/blog/2012/09/27/systemd-slock-beim-wechseln-in-den-suspend-anschalten/feed/ 0
Batteriewarnung fürs Thinkpad mit Systemd https://azapps.de/blog/2012/09/26/batteriewarnung-furs-thinkpad-mit-systemd/ https://azapps.de/blog/2012/09/26/batteriewarnung-furs-thinkpad-mit-systemd/#comments Wed, 26 Sep 2012 17:42:24 +0000 https://azapps.de/?p=110 Kennst du das? Du arbeitest grad und dann macht’s „ziup“ und der Bildschirm ist schwarz. Da war wohl der Akku alle. Nachdem mir das bereits einige male passiert ist, habe ich mir heute ein kleines Bash-Script geschrieben, welches fortlaufend auf den Akkustatus schaut und mir Bescheid gibt falls der Saft alle wird.

Zu meiner Verteidigung muss ich sagen, dass ist das erste sinnvolle Bash-Skript, welches ich bisher geschrieben habe.

Abhängigkeiten

Folgende Pakete werden benötigt:

  • systemd (logisch, siehe Titel)
  • TLP (Funktioniert am besten mit Thinkpads)
  • zenity (Für die Popups)

Skripte

Als erstes benötigen wir das eigentliche Skript. Das speichern wir am besten in /usr/lib/systemd/scripts/battery.sh ab:

#!/bin/bash
#Deinen Nutzernamen hier einfügen
USERNAME=foo
#Maximaler Füllstand
BAT_MAX=`cat /sys/class/power_supply/BAT0/energy_full`

#Wurde die Meldung schonmal angezeigt?
LOWER10=0
LOWER5=0
LOWER1=0

#Service mach mal...
while true; do
#Aktuellen Wert einlesen
    BAT_NOW=`cat /sys/class/power_supply/BAT0/energy_now`
    PERCENT=`gawk " BEGIN {OFMT=\"%.0f\";print (100/$BAT_MAX) * $BAT_NOW}"`
#    echo $PERCENT
#Überprüfen auf Prozentstand
    if [[ $PERCENT -le 10 && $LOWER10 -ne 1 ]] ; then
        sudo -u $USERNAME zenity --info --text "Akku unter 10% ($PERCENT)"
        LOWER10=1
    fi
    if [[ $PERCENT -le 5 && $LOWER5 -ne 1 ]] ; then
        sudo -u $USERNAME zenity --warning --text "Akku unter 5% ($PERCENT)"
        LOWER5=1
    fi
    if [[ $PERCENT -le 1 && $LOWER1 -ne 1 ]] ; then
        LOWER1=1
        systemctl suspend
    fi
    sleep 10
done

[edit]nun musst du nur noch die eine $USERNAME-Variable ändern[/edit]

Dann brauchen wir noch ein Unit-File, auf dessen Basis systemd das Skript startet. Das liegt unter /usr/lib/systemd/system/battery.service:

[Unit]
Description=Looking for Battery State

[Service]
Type=simple
Environment=DISPLAY=:0
ExecStart=/usr/lib/systemd/scripts/battery.sh

[Install]
WantedBy=multi-user.target

Aktiviere den Service noch mit sudo systemctl enable battery.service und wenn du das sofort brauchst, machst du ein sudo systemctl start battery.service.

Viel Spaß damit. Auf Verbesserungen am Code freue ich mich natürlich immer.

]]>
https://azapps.de/blog/2012/09/26/batteriewarnung-furs-thinkpad-mit-systemd/feed/ 0