Linux Mint Ruhezustand aktivieren / deaktivieren

Wenn man bei der Installation die Grösse der Swap Partition etwas grösser als die Grösse seines im Rechner verbauten Haupspeichers angelegt hat, kann man evtl. sein System in den Ruhezustand versetzen. Das bedeutet der gesammt Ist-Zustand des Rechners, wird auf die Festplatte geschrieben und der Rechner wird ausgeschaltet. (Hibernation). Es wird kein Strom mehr verbraucht, der Rechner ist Aus.

Anders als beim Breitschafts Modus (Standby) bei dem der Prozessor herunter getaktet wird, und der Speicher und andere Komponenten noch mit Strom versorgt werden.

Der Vorteil ist ein schnelleres Starten des Rechners und man findet sein System so wieder vor, wie man es verlassen hat.

Wenn nach Rückkehr aus Ruhezustand / Bereitschaft nur ein schwarzer Bildschirm mit Maus Cursor erscheint, kann es möglich sein, durch die blinde Eingabe des System Passwortes, wieder auf den Desktop zu kommen.

Ebenso kann auch ein Voll-Level Update des Systems helfen. Siehe LinkUp to date

Auch ein Kernel update bringt häufig ein funktionierendes Bereitschaft und Ruhezustand. Siehe LinkKleine Tipps.
Sollte es weitere Probleme mit Bereitschaft / Ruhezustand geben, hilft oft ein BIOS / Firmware update des Rechners.


Manchmal ist der Ruhezustand unter Mint nicht aktiviert, da es leider Rechner gibt, bei denen es nicht funktioniert.
Um zu Testen ob sich die eigene Hardware in den Ruhezustand versetzen lässt, gibt man im Terminal ein

 

sudo pm-hibernate


Bzw. unter Mint 18.x (Systemd)

systemctl hibernate


und startet nach dem automatischen abschalten des Rechners wieder neu. Wenn alles nach dem aufwachen funktioniert, kann man die Funktion in das System integrieren.

Dazu öffnet man den Ordner /etc/polkit-1/localauthority/ als Sytemverwalter / Admin und öffnet den Unterordner 50-local.d/
und legt eine Datei mit folgendem Namen an, falls sie noch nicht vorhanden ist.

com.ubuntu.enable-hibernate.pkla


Dort fügt man folgenden Code ein und speichert die Datei.

[Re-enable hibernate by default]
Identity=unix-user:*
Action=org.freedesktop.upower.hibernate
ResultActive=yes

[Re-enable hibernate by default in logind]
Identity=unix-user:*
Action=org.freedesktop.login1.hibernate
ResultActive=yes


Nach anschliessendem Reboot, sollte Ruhezustand (Hibernation) im Beenden Dialog auftauchen.

Um Programm Aktionen bei Ruhezustand  (Hibernate) / Bereitschaft (Standby / Sleep) und Rückkehr (Resume) ab Linux Mint 18 (Sarah) / Ubuntu 16.04 mit systemd zu realisieren, findet in den Kleinen-Tipps ein LinkBeispiel .service Script.

Linux Mint Ruhezustand / Bereitschaft deaktivieren

Leider gibt es Hardware Konstellationen, bei denen Ruhezustand (Hibernate) oder Bereitschaft (Suspend) nicht richtig funktioniert.
Um diese Funktionen nun aus dem Beenden / Shutdown Menü zu entfernen, öffnet man wie oben beschrieben den Order

/etc/polkit-1/localauthority/50-local.d/ und bearbeitet die Datei com.ubuntu.enable-hibernate.pkla

Für Ruhezustand (Hibernation)
ändert man die Eintragung zu

[Re-enable hibernate by default]
Identity=unix-user:*
Action=org.freedesktop.upower.hibernate
ResultActive=no

[Re-enable hibernate by default in logind]
Identity=unix-user:*
Action=org.freedesktop.login1.hibernate
ResultActive=no


und für Bereitschaft (Suspend / Standby)
in einer neuen Datei, die angelegt werden muss,

com.ubuntu.enable-suspend.pkla


folgendes einfügen

[Re-enable suspend by default]
Identity=unix-user:*
Action=org.freedesktop.upower.suspend
ResultActive=no

[Re-enable suspend by default in logind]
Identity=unix-user:*
Action=org.freedesktop.login1.suspend
ResultActive=no


mit ResultActive=yes oder no kann man die Funktionen ein oder ausschalten.

Nach neuem Start des Rechners sollten die Funktionen nicht mehr im Beenden Menü auftauchen.

Sleep-Hybrid / Suspend-Hibernate-Hybrid

Unter Linux Mint 18.x (ubuntu 16.04) mit Systemd, ist Sleep/Suspend-Hybrid to Hibernate möglich.

Wenn das System in Bereitschaft (Sleep/Standby) geschickt wird, wird es mit der folgenden Konfiguration nach einstellbarer Zeit in Ruhezustand (Hibernate) versetzt und der Rechner dann ganz ausgeschaltet.
Das Script kann auch so konfiguriert werden, dass die Umstellung auf Hibernate nicht im AC/Netz Betrieb, sondern nur per Akku/Batterie erfolgt.

Bereitschaft und Ruhezustand müssen einwandfrei funktionieren.

Um Sleep-Hybrid zu realisieren muss eine Systemd Service Unit angepasst und eine neu erstellt werden.

Zuerst wird eine neue Service Unit mit Namen es-suspend-to-hibernate.service im Ordner /etc/systemd/system/ angelegt.

gksudo xed /etc/systemd/system/es-suspend-to-hibernate.service


in den nun mit Administrator Rechten geöffneten System-Editor (unter Mint Xed) wird folgendes kopiert und gespeichert.

[Unit]
#ES-Seep-hibernate
#(c) 2017 E-Soft
#http://www.ehlertronic.de

Description=ES-Delayed hibernation trigger
Documentation=https://bbs.archlinux.org/viewtopic.php?pid=1420279#p1420279
Documentation=https://wiki.archlinux.org/index.php/Power_management
Before=suspend.target
Conflicts=hibernate.target hybrid-suspend.target
StopWhenUnneeded=true

[Service]
Type=oneshot
RemainAfterExit=yes
Environment="WAKEALARM=/sys/class/rtc/rtc0/wakealarm"
Environment="WAKETEMP=/tmp/waketmp.tmp"

#zeit bis hibernate aus suspend
Environment="SLEEPLENGTH=+2hour"

#Check ob Batt Betrieb. "BATTCHECK=1" hibernate nur bei Batterie (Akku) Betrieb
Environment="BATTCHECK=0"

#hibernate zeit zum testen
#Environment="SLEEPLENGTH=+1minute"

#check Batt und set RTC Timer
ExecStart=/bin/sh -c 'on_ac_power; BATTUSE=$?; echo "BATTCHECK="$BATTCHECK; echo "BATTUSE="$BATTUSE;\
 if [ $BATTUSE -ne 0 ] || [ $BATTCHECK -eq 0 ]; then\
   echo -n "alarm set for "; date +%%s -d$SLEEPLENGTH | tee $WAKEALARM;\
   date +%%s -d$SLEEPLENGTH | tee $WAKETEMP;\
   echo "SLEEPLENGTH="$SLEEPLENGTH;\
 fi;'
#Nach aufwachen aus RTC awake
ExecStop=/bin/sh -c ' alarm=$(cat $WAKETEMP); now=$(date +%%s); calarm=$(($alarm+30));\
 if [ "$now" -ge "$alarm" ] && [ "$calarm" -ge "$now" ]; then\
  echo "hibernate triggered";\
   systemctl hibernate;\
 else\
   echo "normal wakeup, not hibernating";\
 fi;\
 echo 0 > $WAKEALARM;\
 echo 0 > $WAKETEMP;'

[Install]
WantedBy=sleep.target

 

Die zweite Anpassung betrifft die vorhandene Service-Unit suspend.target. Dort wird unter [Unit] Requires=es-suspend-to-hibernate.service eingefügt und abgespeichert.

Requires=es-suspend-to-hibernate.service

 

gksudo xed /etc/systemd/system/suspend.target


Dies sollte dann so aussehen

[Unit]
Requires=es-suspend-to-hibernate.service
Description=Suspend
Documentation=man:systemd.special(7)
DefaultDependencies=no
BindsTo=systemd-suspend.service
After=systemd-suspend.service


Kurze Erklärung zum Haupt Script es-suspend-to-hibernate.service.

Die Zeit bis zur Umschaltung in Hibernate lässt sich in
Environment="SLEEPLENGTH=+2hour" ändern..  z.B. "SLEEPLENGTH=+4hour" 
zum Testen einfach die # vor #Environment="SLEEPLENGTH=+1minute" entfernen, dann wird nach 1 Minute umgeschaltet.

Ob ein Check ob im Batteriebetrieb stattfinden soll, wird mit Environment="BATTCHECK=0" oder Environment="BATTCHECK=1"
gesetzt. Mit Environment="BATTCHECK=1" wird im AC/Netz/Strom Betrieb nicht in Hibernation (Ruhezustand geschaltet).

Bitte auf das Vorhandensein der Anführungszeichen am Anfang und am Ende des Parameters achten.

Die neue Service Unit muss nun in Systemd aktiviert werden.

sudo systemctl enable es-suspend-to-hibernate.service


und die Veränderung der vorhanden Unit muss dem System auch bekannt gemacht werden.
Dies ist auch notwendig wenn in den Scripten irgendetwas angepasst/verändert wurde

sudo systemctl daemon-reload


Zu guter letzt kann man sich den Status der neuen Unit ansehen, und schauen ob irgend etwas falsch läuft.

sudo systemctl status es-suspend-to-hibernate.service


Wenn alles richtig gemacht wurde, sollte das System nach Ablauf der angegebenen Zeit aufwachen, und in Ruhezustand gehen.

Ruhezustand mit Nano