Energiesparmodus unter Linux
Vor etwa anderthalb Jahren habe ich mir ein neues Notebook zugelegt. Es ist diesmal ein Dell geworden, weil einige der Modelle sogar Linux-zertifiziert sind. Da ich beruflich auch ein Dell Notebook nutze und dort lange Zeit Linux drauf laufen hatte, wusste ich, dass ich mit einem Dell eigentlich nicht viel falsch machen kann.
So war es dann auch und im Grunde lief alles von Anfang an problemlos. Hier und da ein paar kleine Anpassungen – kennt man ja. Ein Unterschied fiel mir nach einiger Zeit dann aber doch noch auf: Schicke ich das System in den Energiesparmodus (Suspend-to-RAM), wacht es irgendwann von selbst auf und bleibt dann an. Das ist natürlich maximal ungünstig, wenn sich der Akku schnell entlädt und sich das Notebook zudem aufheizt. Aber selbst wenn es nicht von selbst erwacht, ist der Energiebedarf immer noch deutlich höher.
Mein altes Notebook unterstützte den Deep Sleep ACPI-Modus S3, wodurch ich es mitunter wochenlang in den Energiesparmodus versetzen konnte. Mein Dell unterstützt diesen Modus leider nicht mehr, wie so viele andere Notebookmodelle auch nicht. Stattdessen kommt dort Modern Standby zum Einsatz.
Deep Sleep entstand in den 1990er Jahren, die jahrzehntelang dominierte und auch unter Linux zuverlässig funktionierte. Durch die Entwicklung von Smartphones und Tablets wurde der Markt jedoch von Always-Connected Funktionen, wie sie bei iOS und Android üblich sind, vorangetrieben. Microsoft führte daraufhin Modern Standby ein, auch um Hintergrundupdates zu ermöglichen. In der Folge setzen viele Hardware-Hersteller zunehmend nur noch auf diesen Standard – wohl auch, um Kosten zu sparen.
Kann man machen nix.
Damit sich zumindest der Akku nicht vollständig entleert, wenn das Notebook im Rucksack liegt, habe ich mir zwei kleine Shellskripte geschrieben. Sie sorgen beim ungewollten Erwachen aus dem Energiesparmodus dafür, dass dieser schnell wiederaufgenommen wird. Gewolltes Aufwachen wird durch Drücken der STRG-Taste signalisiert.
Das erste Skript smartsleep.sh
wird bei Ein- und Aufwachvorgängen des Systems ausgeführt:
- Protokolliert Systemzustände (Eintritt/Verlassen des Energiesparmodus)
- Ermittelt den Zustand von Laptop-Deckel und angeschlossener Dockingstation
- Wartet auf Druck der STRG-Taste während des Aufwachvorgangs
- Steuert den Daemon über Signale (USR1/USR2)
Das zweite Skript smartsleepd
läuft im Hintergrund und handhabt die Aufwach-Logik:
- Empfängt Signale von
smartsleep.sh
- Wechselt erneut in den Schlafmodus, wenn keine STRG-Taste gedrückt wurde