systemctl suspend
systemctl hibernate
systemctl hybrid-sleep
** Wenn noch Strom da war: Sofort aus dem RAM (wie Suspend).
** Wenn der Akku leer war: Von der Festplatte (wie Hibernate).
| Komponente | Wert |
|---|---|
| Modell | ThinkPad X13 Gen 3 AMD (21CM002GGE) |
| CPU | AMD Ryzen 5 PRO 6650U (Rembrandt) |
| GPU | Radeon 680M |
| BIOS | R22ET76W (1.46) |
| Kernel | 7.0.10-arch1-1 |
| RAM | 16 GB |
| Storage | 1,8 TB NVMe (LUVS-verschlüsselt, ext4) |
Arch Linux (und systemd) verwendet standardmäßig *Suspend (s2idle)* beim Zuklappen des Deckels.
Das Problem: Der ThinkPad X13 Gen 3 AMD unterstützt im BIOS *nur S0 (s2idle), S4 (Hibernate) und S5 (Power Off)*.
S3 (Deep Sleep) wurde von Lenovo bei den neueren AMD-Modellen entfernt.
ACPI: PM: (supports S0 S4 S5)
s2idle (Modern Standby) ist bekanntermaßen fehleranfällig – besonders bei AMD Rembrandt.
Die GPU (amdgpu) und diverse Controller haben Probleme, korrekt aus s2idle aufzuwachen.
*Das Ergebnis im Alltag:* Deckel zu → System geht in s2idle → wacht beim Aufklappen oft nicht mehr auf.
Oder: Das System rödelt mit zugeklapptem Deckel weiter, weil s2idle nicht korrekt funktioniert.
Da S3 (Deep Sleep) im BIOS fehlt und s2idle unzuverlässig ist, wurde auf *Hibernate (S4)* umgestellt.
Hibernate schreibt den gesamten RAM-Inhalt auf die Festplatte und fährt das System komplett herunter.
Beim Aufwachen wird der RAM-Inhalt von der Festplatte zurückgeladen – das System ist exakt im gleichen
Zustand wie vor dem Hibernate.
| Suspend (s2idle) | Hibernate (S4) | |
|---|---|---|
| Einschlafen | ~1-2 Sek | ~3-8 Sek |
| Aufwachen | ~1-2 Sek | ~5-10 Sek |
| Zuverlässigkeit | Schlecht (AMD Rembrandt) | Sehr gut |
| Stromverbrauch | Gering (RAM bleibt aktiv) | Null (System aus) |
Auf einer NVMe ist Hibernate spürbar, aber nicht dramatisch langsamer als Suspend.
Hibernate benötigt Swap ≥ RAM. Da kein Swap vorhanden war, wurde ein 16 GB Swap-File erstellt.
sudo fallocate -l 16G /swapfile sudo chmod 600 /swapfile sudo mkswap /swapfile sudo swapon /swapfile
*Wichtig bei LUKS-Verschlüsselung:* Das Swap-File liegt auf der verschlüsselten Root-Partition
(/dev/mapper/root). Der Hibernate-Image ist somit automatisch mit verschlüsselt – kein zusätzliches
Risiko. Der Swap wird erst nach der LUKS-Entschlüsselung beim Boot verfügbar.
Swap-File persistent in /etc/fstab eintragen:
/swapfile none swap defaults 0 0
Der resume Hook muss *nach* dem encrypt Hook stehen, damit zuerst LUKS entschlüsselt wird
und dann der Hibernate-Image vom Swap gelesen werden kann.
/etc/mkinitcpio.conf:
HOOKS=(base udev autodetect microcode modconf kms keyboard keymap consolefont block encrypt resume filesystems fsck)
Für Swap-Files (im Gegensatz zu Swap-Partitionen) sind zwei Parameter nötig:
resume=/dev/mapper/root – das verschlüsselte Root-Device
resume_offset=21749760 – der physische Offset des Swap-Files auf der Partition
Den Offset ermitteln mit:
sudo filefrag -v /swapfile
Die erste physical_offset Zeile ist der relevante Wert:
0: 0.. 0: 21749760.. 21749760: 1:
/etc/kernel/cmdline:
cryptdevice=PARTUUID=be750af8-98c2-4796-9fdf-2b34653e5d94:root root=/dev/mapper/root rw rootfstype=ext4 resume=/dev/mapper/root resume_offset=21749760
sudo mkinitcpio -P
/etc/systemd/logind.conf:
HandleLidSwitch=hibernate HandlePowerKey=hibernate HandlePowerKeyLongPress=poweroff HandleRebootKey=ignore HandleSuspendKey=hibernate
sudo systemctl restart systemd-logind
Das Touchpad (Synaptics SYNA8018, I2C-HID) wacht nach Hibernate oft nicht korrekt auf.
Der I2C-Bus verliert bei AMD Rembrandt nach S4 die Verbindung.
Script erstellen: /usr/lib/systemd/system-sleep/fix-i2c-hid
#!/bin/sh
case "$1" in
post)
rmmod i2c_hid_acpi
rmmod i2c_hid
modprobe i2c_hid
modprobe i2c_hid_acpi
;;
esac
sudo chmod +x /usr/lib/systemd/system-sleep/fix-i2c-hid
Das Script wird von systemd automatisch nach jedem Resume (post) ausgeführt und lädt den
I2C-HID-Treiber neu.
| Aktion | Ergebnis |
|---|---|
| Deckel zuklappen | Hibernate |
| Power-Button kurz drücken | Hibernate |
| Power-Button 5 Sek drücken | Poweroff |
systemctl hibernate
|
Hibernate manuell auslösen |
systemctl reboot
|
Neustart über Konsole |
systemctl poweroff
|
Herunterfahren über Konsole |
Alias in ~/.config/shell/aliasrc:
alias standby='(while true; do for var in / - \\ \|; do printf "\r$var"; sleep .05; done; done) & systemd-inhibit --what=handle-lid-switch --why="Musik hören" sleep infinity; kill %1 2>/dev/null'
systemd-inhibit überschreibt jede konfigurierte Lid-Action. Solange der Befehl läuft,
ignoriert systemd-logind den Deckel-Switch komplett. Deckel zu = Laptop bleibt an.
Der Spinner visualisiert den aktiven Zustand.
Mit Ctrl+C beenden – der Spinner wird automatisch gekillt.
Systemstatus prüfen:
systemctl status sleep.target suspend.target hibernate.target hybrid-sleep.target cat /sys/power/mem_sleep cat /proc/acpi/wakeup cat /sys/power/disk cat /sys/power/state
Hibernate-Logs prüfen:
journalctl -k | grep -iE "hibernat|resume|PM:" journalctl -b -1 | grep -iE "hibernat|resume|error"
Swap-File Offset prüfen:
sudo filefrag -v /swapfile
Aktuelle Kernel-Parameter:
cat /proc/cmdline
usb usb1: root hub lost power or was reset
USB-Geräte werden nach dem Resume neu erkannt, aber der Display-Server kriegt sie nicht
immer richtig zurück. Externe USB-Mäuse können betroffen sein.
amdgpu 0000:33:00.0: SMU is resumed successfully!
Die GPU wacht normalerweise korrekt auf. Falls nicht, kann amdgpu.sg_display=0 als
Kernel-Parameter helfen (deaktiviert Scatter-Gather Display).
Beim Aufwachen aus Hibernate muss das LUKS-Passwort eingegeben werden, da die Festplatte
entschlüsselt werden muss bevor der RAM-Image vom Swap gelesen werden kann. Das ist das
erwartete Verhalten bei voll verschlüsselten Systemen.
Das RAM-Image vor dem Schreiben komprimieren – reduziert die Schreibmenge um ~50%,
schnelleres Hibernate und Resume, schont die SSD.
# /etc/systemd/sleep.conf.d/hibernate.conf anlegen sudo mkdir -p /etc/systemd/sleep.conf.d sudo tee /etc/systemd/sleep.conf.d/hibernate.conf << EOF [Sleep] Compress=yes EOF
Danach systemctl daemon-reload ausführen.
Besseres Power Management speziell für ThinkPads. Regelt CPU-Frequenzen, USB-Suspend,
PCIe-ASPM, Battery-Charge-Thresholds und mehr.
sudo pacman -S tlp tlp-rdw sudo systemctl enable tlp.service sudo systemctl mask systemd-rfkill.service systemd-rfkill.socket # Für ThinkPad-spezifische Features (Battery-Thresholds): sudo pacman -S acpi_call
Konfiguration in /etc/tlp.conf. Die Defaults sind bereits gut.
Den GPU-Treiber früher im Boot-Prozess laden (in der Initramfs statt erst später).
Kann Resume-Probleme reduzieren und Screen-Tearing beim Boot verhindern.
# In /etc/mkinitcpio.conf die MODULES-Zeile ändern: MODULES=(amdgpu)
Danach sudo mkinitcpio -P ausführen.
Lenovo veröffentlicht regelmäßig BIOS-Updates mit ACPI- und Power-Management-Fixes.
Über fwupd prüfen und installieren:
# Verfügbare Updates prüfen fwupdmgr refresh fwupdmgr get-updates # Updates installieren fwupdmgr update
ACHTUNG: Laptop muss am Netzteil hängen und ausreichend Akku haben.
suspend-then-hibernate als Fallback einrichten: Erst schneller Suspend, nach z.B.
15 Minuten automatisch Hibernate. Spart Strom wenn man den Laptop doch mal vergisst.
# /etc/systemd/logind.conf HandleLidSwitch=suspend-then-hibernate # /etc/systemd/sleep.conf.d/hibernate.conf [Sleep] HibernateDelaySec=15min
Danach sudo systemctl restart systemd-logind.
16 GB × 2× täglich Hibernate = ~12 TB Schreibzugriff/Jahr. Bei einer 1,8 TB NVMe
(typisch 600-1200 TBW) ist das vernachlässigbar, aber gut zu wissen.
Schreibmenge prüfen:
sudo smartctl -A /dev/nvme0n1 | grep -i "Data Units"