Batteriewarnung fürs Thinkpad mit Systemd

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.