Aktivieren von Stromsparfunktionen
Aus Gentoo Linux Wiki
| Installationsmethoden • LiveCDs • Kernel & Hardware • Laptops & Notebooks • Portage • System • Netzwerke & Services • X • Software • Anderes • alphabetischer HOWTO Index |
Inhaltsverzeichnis |
[Bearbeiten] CPU
[Bearbeiten] Allgemein (cpufreq/throttling)
| Linux Kernel Configuration: |
Power management options (ACPI, APM) --->
CPU Frequency scaling --->
[*] CPU Frequency scaling
<M> Alle weiteren Einträge als Modul markieren
|
$ emerge cpufrequtils $ cpufreq-info $ #nur bei Bedarf Gas geben $ cpufreq-set -g ondemand
Throttling bringt eigentlich nichts, außer daß es den Rechner langsam macht. Stromsparend wirkt sich das kaum aus, ist an sich nur für Leute interessant, die ein Hitzeproblem haben. Der dadurch verrigerte Lüfterlärm/-verbrauch bringt in diesem Fall schon etwas.
$ cat /proc/acpi/processor/CPU/throttling $ echo -n "0:7" > /proc/acpi/processor/CPU/limit
[Bearbeiten] Unterspannungsbetrieb von Pentium-M-Prozessoren
Dies ist ausführlich in HOWTO Undervolt a Pentium M CPU beschrieben, daher gibt es hier nur eine Kurzfassung.
$ emerge layman $ layman -a sunrise $ emerge linux-phc
Alternativ per Hand patchen, falls kein aktuelles ebuild vorhanden ist:
$ svn co https://www.dedigentoo.org/ro-svn/linux-phc/trunk $ cp -r /usr/src/linux/arch/i386/kernel/cpu/cpufreq /usr/src/linux/arch/i386/kernel/cpu/cpufreq-alt $ cp -r trunk/src/kernels/vanilla-???/linux.phc/arch/i386/kernel/cpu/cpufreq/ /usr/src/linux/arch/i386/kernel/cpu/
Anschließend den Kernel neu übersetzen und den Rechner neustarten. Danach dieses Script laufen lassen: spannungstest Die Entsprechenden Werte in die /etc/conf.d/undervolt eintragen. Die Originalwerte bekommt man mit:
$ cat /sys/devices/system/cpu/cpu0/cpufreq/op_points_table
Bei Bedarf noch einen Stabilitätstest mit /opt/gimps/mprime -t -w/tmp/ aus sci-mathematics/gimps durchführen.
[Bearbeiten] Mainboards mit frei einstellbaren Spannungen und Multiplikatoren
Viele Desktop-Mainboards erlauben das freie Einstellen von Spannung und Multiplikator, auf diesen Boards lassen sich auch Mobil-CPUs einsetzen, aber auch normale Prozessoren dürften mit geringerer Spannung noch laufen. Das muß aber jeweils im Bios eingestellt werden. Dabei sollte man schrittweise die Spannung absenken, bis Gentoo nicht mehr richtig startet und bei einer funktionieren Spannung später aber noch einen Stabilitätstest machen. Ansonsten kann es später z.B. beim emergen seltsame Fehler/Abbrüche geben, die ersteinmal nicht zuzuorden sind. Treten solche Sachen sporadisch und nicht an der gleichen Stelle auf, ist ziemlich sicher die Spannung zu niedrig. cpufreq funktioniert mit diesen Boards oft auch nicht, da die Unterstützung dafür im BIOS fehlt.
[Bearbeiten] Minimieren der Prozessorlast
Seit kernel 2.6.21 kann der Prozessor effektiver in Schlafmodi versetzt werden.
| Linux Kernel Configuration: |
Processor type and features ---> [*] Tickless System (Dynamic Ticks) Kernel Hacking ---> [*] Kernel debugging |
Den aktuellen Prozessorzustand erfährt man über
$ cat /proc/acpi/processor/CPU*/power
Je länger sich der Prozessor in hohen C-Werten aufhält, desto besser, da der Prozessor mehr schläft. Um festzustellen Welche Prozesse die CPU am Schlafen hindern, muß man sys-power/powertop installieren. Laut http://www.linuxpowertop.org sind 3 Interrupts pro Sekunde durch deaktivieren problematischer Software und Treiber machbar.
[Bearbeiten] Kernelpatches
In manchen Chipsätzen, wie z.B. ICH-4, sind "High Resolution Timer" verbaut, aber wegen Windows deaktiviert und auch im BIOS nicht aktivierbar. Man kann diese jedoch über einen Kernelpatch aktivieren. Durch die HRT funktioniert der Prozessorschlaf besser: http://www.tglx.de/projects/hrtimers/, http://www.thinkwiki.org/wiki/How_to_reduce_power_consumption
$ cd /usr/src/linux $ wget http://www.tglx.de/projects/hrtimers/2.6.22/patch-2.6.???.patch $ patch -p1 < patch-2.6.???.patch
Einige Timer im Kernel wecken die CPU auch zu häufig auf, daher kann man noch diesen Patch installieren: http://linuxpowertop.org/known.php#kernel
$ cd /usr/src/linux $ wget http://linuxpowertop.org/patches/kernel-2.6.???.patch $ patch -p1 < kernel-2.6.???.patch
[Bearbeiten] Grafik
Wer auf 3D-Funktionen verzichten kann, kann mit den vesa-Treibern statt den 3D-Treibern zusätzlich Strom sparen. In den meisten Fällen wird aber in der xorg.conf folgender Eintrag reichen:
| Datei: Änderungen an /etc/X11/xorg.conf |
Section "Device"
.
.
Option "NoDRI"
.
.
EndSection
|
Ein heißer Tipp aus der Debian Community ist das Heruntersetzen der DefaultDepth auf 16:
| Datei: /etc/X11/xorg.conf |
Section "Screen"
.
.
#DefaultDepth 24
DefaultDepth 16
.
.
EndSection
|
siehe: http://technowizah.com/2007/01/debian-how-to-power-management.html
--ZAfi 13:04, 16. Apr. 2008 (UTC)
[Bearbeiten] ATI
Radeon-Karten lassen sich runtertakten.
$ emerge rovclock radeontool $ rovclock -i
Abhängig von der Karte sollte man sich individuell an die Mindestrate rantasten. Beim herabsetzen des Speichertaktes kommt es in der Regel nur zu Grafikfehlern, bei zu niedrigem Kerntakt stürzt allerdings der Rechner ab. Eine "Radeon Mobility 7500" standardmäßig mit 260MHz Kern- und 365MHz Speichertakt läuft hier auch noch mit 70/90MHz
$ rovclock -c 70 -m 90
Zusätzlich kann man noch den Videoausgang abschalten:
$ radeontool dac off
[Bearbeiten] Nvidia
Nvidia-Karten lassen sich mit nvclock untertakten.
$ emerge nvclock
[Bearbeiten] Intel
[Bearbeiten] Festplatten
Festplatten können sich schlafen legen, wenn sie nichts zu tun haben:
$ hdparm -S12 /dev/hda
Der Wert hinter -S wird mit fünf multipliziert, die Platte legt sich also schlafen wenn sie eine Minute nichts zu tun hatte.
[Bearbeiten] Minimierung der Festplattenaktivität
Um Festzustellen welche Prozesse häufig auf die Festplatten zugreifen halten die laptop-mode-tools ein Tool bereit:
$ lm-profiler
Typische und regelmäßige Festplattenbenutzer sind z.B. der cron- und syslog-daemon. Der cron-daemon sollte im Batteriebetrieb deaktiviert werden.
[Bearbeiten] syslog-ng
syslog-ng kann man sagen, daß er erst einige Einträge sammeln soll, bevor er sie schreibt:
| Datei: Änderungen an /etc/syslog-ng/syslog-ng.conf |
sync(10000); |
[Bearbeiten] /tmp
Viele Programme greifen häufig regelmäßig auf /tmp zu, daher empfiehlt es sich /tmp als RAM-Disk einzubinden:
| Datei: Änderungen an /etc/fstab |
none /tmp tmpfs size=128m 0 0 |
[Bearbeiten] Firefox
Der Firefox greift häufig auf die Festplatte zu, weshalb man entweder das Browserverzeichnix in die eben erstelle RAM-Disk verlagern kann (mittels Skript) oder die Browser-Cache-Einstellungen anpasst.
[Bearbeiten] Skript
Zuerst ein Backup erzeugen mit dem dann auch gearbeitet wird:
$ mv .mozilla .mozilla-tmp
Anschließend das Skript erstellen und ausführbar machen.
| Datei: /usr/local/bin/firefox |
mkdir /tmp/mozilla cp -r $HOME/.mozilla-tmp/* /tmp/mozilla /usr/bin/firefox cp -rf /tmp/mozilla $HOME/.mozilla-tmp/* |
[Bearbeiten] Browser - Einstellungen
Es reicht aus die entsprechenden Browsereinstellungen zu aktivieren um den Cache im RAM zu halten!
Firefox öffnen und about:config in die Adresszeile eingeben. Im Such-/Filterfeld cache eingeben. browser.cache.disk.enable mit Doppelclick auf false setzen. browser.cache.memory.enable mit Doppelclick auf true setzen
siehe:
http://kb.mozillazine.org/Browser.cache.memory.enable
http://kb.mozillazine.org/Browser.cache.disk.enable
--ZAfi 12:59, 16. Apr. 2008 (UTC)
[Bearbeiten] vim
Vim schreibt alle 4 Sekunden oder 200 Zeichen seine Wiederherstellungsdatei und löst einen sync aus. Um die außerplanmäßige Synchronisation zu verhindern, reicht ein set swapsync= in der vimrc. Das kann im Falle eines Absturzes natürlich größeren Datenverlust bedeuten.
[Bearbeiten] WLAN
Einige WLAN-Karten bieten die Möglichkeit in einen Powermanagmentmodus zu wechseln.
$ iwconfig wlan0 power on
Die Karte legt sich einen Moment schlafen, wacht dann wieder auf, um zu gucken ob was los ist und schläft wieder ein. Zusätzlich kann man noch die Sendeleistung herabsetzen.
$ iwconfig wlan0 txpower 10mW
[Bearbeiten] Audiogeräte
Manche Audiogeräte unterstützen Stromsparmodi
| Linux Kernel Configuration: |
Device Drivers --->
Sound --->
Advanced Linux Sound Architecture --->
PCI devices --->
[*] AC97 Power-Saving Mode
|
$ echo 1 > /sys/module/snd_ac97_codec/parameters/power_save
oder dauerhaft:
| Datei: Änderungen an /etc/modules.d/alsa |
options snd-ac97-codec power_save |
$ update-modules
[Bearbeiten] USB
| Linux Kernel Configuration: |
Device Drivers --->
USB support --->
[*] USB selective suspend/resume and wakeup
|
[Bearbeiten] ACPI
[Bearbeiten] Allgemein
Kerneleinstellungen ( Ein Kernel mit supend2-patches ist nicht unbedingt nötig, jedoch aus Stabilitäts- und Geschwindigkeitsgründen sehr anzuraten. Z.B. sys-kernel/suspend2-sources )
| Linux Kernel Configuration: |
Power management options (ACPI, APM) --->
[*] Power Management support
[*] Software Suspend
#SWAP-Partition angeben
(/dev/?d??) Default resume partition
<*> Suspend2 --->
<*> Swap Allocator
<*> Compression support
<*> Userspace User Interface support
(/dev/?d??) Default resume device name
[*] Replace swsusp by default
ACPI (Advanced Configuration and Power Interface) Support --->
[*] ACPI Support
[*] Sleep States ???
<M> Den Rest als Modul markieren
APM (Advanced Power Management) BIOS Support --->
<M> APM (Advanced Power Management) BIOS support
[*] Make CPU Idle calls when idle
[*] Enable console blanking using APM
#Bei suspend2:
Cryptographic options --->
<*> LZF compression algorithm
|
Auf die ACPI-Funktionen kann über /proc/acpi zugegriffen werden.
$ cat /proc/acpi/processor/CPU/info $ cat /proc/acpi/thermal_zone/TH??/temperature $ cat /proc/acpi/battery/BAT?/info
Mit
$ cat /proc/acpi/battery/BAT?/state
kann man im Batteriebetrieb den aktuellen Stromverbrauch feststellen, sehr nützlich um den Effekt der Stromsparmechanismen zu prüfen.
In der /etc/acpi/default.sh kann man die auszuführenden Programme eintragen, die bei einem ACPI-Event gestartet werden sollen. In diesem Beispiel das Anstecken/Abziehen der Spannungsversorgung.
| Datei: Änderungen an /etc/acpi/default.sh |
ac_adapter)
case "$value" in
*0)
batteriebetrieb
;;
*1)
netzbetrieb
;;
|
| Datei: /usr/local/sbin/batteriebetrieb |
cpufreq-set -g powersave #echo "level 1" > /proc/acpi/ibm/brightness hdparm -q -S12 /dev/hda #rovclock -c 70 -m 90 #radeontool dac off #iwconfig wlan0 power on #iwconfig wlan0 txpower 10mW |
| Datei: /usr/local/sbin/netzbetrieb |
cpufreq-set -g ondemand #echo "level 7" > /proc/acpi/ibm/brightness hdparm -q -S253 /dev/hda #rovclock -c 260 -m 360 #radeontool dac on #iwconfig wlan0 power off #iwconfig wlan0 txpower 100mW |
Zusätzlich soll das entsprechende Script beim Starten des Rechners ausgeführt werden.
| Datei: /etc/conf.d/local.start |
if [ "`cat /proc/acpi/ac_adapter/AC/state|grep on-line`" ];
then
netzbetrieb
fi;
if [ ! "`cat /proc/acpi/ac_adapter/AC/state|grep on-line`" ];
then
batteriebetrieb
fi;
|
[Bearbeiten] ThinkPads
| Linux Kernel Configuration: |
Power management options (ACPI, APM) --->
ACPI (Advanced Configuration and Power Interface) Support --->
<M> IBM ThinkPad Laptop Extras
|
Einer der größten Energieverbraucher ist die Hintergrundbeleuchtung des Bildschirms, auf ThinkPads läßt sich die Helligkeit über das ThinkPad-ACPI-Modul softwaregesteuert einstellen.
$ echo "level 1" > /proc/acpi/ibm/brightness
[Bearbeiten] Stromsparskripte
[Bearbeiten] laptop-mode-tools
Dieses Skript kann Festplattenschreibvorgänge sammeln und erst zu gegebener Zeit komplett schreiben lassen, dadurch kann die Festplatte länger im Ruhezustand verbleiben. Die laptop-mode-tools können auch die meisten oben genannten Stomsparfunktionen verwalten.
$ emerge laptop-mode-tools
| Datei: /etc/laptop-mode/laptop-mode.conf |
#LM_: Wert im laptop-mode; NOLM_: Wert im Normalbetrieb #AC_: Wert im Netzbetrieb; BATT_: Wert im Batteriebetrieb #Im Batteriebetrieb Stromsparen ENABLE_LAPTOP_MODE_ON_BATTERY=1 ENABLE_LAPTOP_MODE_ON_AC=0 #Kritische Sachen wie Schreibverzögerung abstellen, wenn sich die Batterie #dem Ende neigt MINIMUM_BATTERY_CHARGE_PERCENT=3 DISABLE_LAPTOP_MODE_ON_CRITICAL_BATTERY_LEVEL=1 HD="/dev/hda" PARTITIONS="auto" #Platten, welche wie SCSI-Platten aussehen sind SATA ASSUME_SCSI_IS_SATA=1 #Schreibvorgänge sammeln und nur alle 10min schreiben LM_BATT_MAX_LOST_WORK_SECONDS=600 LM_AC_MAX_LOST_WORK_SECONDS=360 #Im Vorraus lesen (z.b. komplette mp3 einlesen) 3MB CONTROL_READAHEAD=1 LM_READAHEAD=3072 NOLM_READAHEAD=128 #Festplatteneinschlafzeit CONTROL_HD_IDLE_TIMEOUT=0 LM_AC_HD_IDLE_TIMEOUT_SECONDS=60 LM_BATT_HD_IDLE_TIMEOUT_SECONDS=20 NOLM_HD_IDLE_TIMEOUT_SECONDS=7200 #Stromsparmechanismen der Platten (1:max;255:aus) CONTROL_HD_POWERMGMT=0 BATT_HD_POWERMGMT=1 LM_AC_HD_POWERMGMT=255 NOLM_AC_HD_POWERMGMT=255 #Schreibcache der Platten (Kann leichter Datei(-system)-Fehler verursachen) CONTROL_HD_WRITECACHE=1 #NOLM_AC_HD_WRITECACHE=1 #NOLM_BATT_HD_WRITECACHE=0 #LM_HD_WRITECACHE=0 LM_HD_WRITECACHE=1 #Taktfrequenz anpassen CONTROL_CPU_FREQUENCY=1 BATT_CPU_MAXFREQ=medium BATT_CPU_MINFREQ=slowest BATT_CPU_GOVERNOR=powersave LM_AC_CPU_MAXFREQ=fastest LM_AC_CPU_MINFREQ=slowest LM_AC_CPU_GOVERNOR=ondemand NOLM_AC_CPU_MAXFREQ=fastest NOLM_AC_CPU_MINFREQ=slowest NOLM_AC_CPU_GOVERNOR=ondemand CONTROL_CPU_THROTTLING=0 BATT_CPU_THROTTLING=medium #LM_AC_CPU_THROTTLING=minimum #NOLM_AC_CPU_THROTTLING=minimum #Monitor ausschalten CONTROL_DPMS_STANDBY=1 BATT_DPMS_STANDBY=300 LM_AC_DPMS_STANDBY=1200 NOLM_AC_DPMS_STANDBY=1200 #Konsole ausschalten CONTROL_TERMINAL=1 BATT_TERMINAL_BLANK_MINUTES=2 BATT_TERMINAL_POWERDOWN_MINUTES=1 LM_AC_TERMINAL_BLANK_MINUTES=10 LM_AC_TERMINAL_POWERDOWN_MINUTES=10 NOLM_AC_TERMINAL_BLANK_MINUTES=10 NOLM_AC_TERMINAL_POWERDOWN_MINUTES=50 #Kurz vor Exitus einschlafen #ENABLE_AUTO_HIBERNATION=1 #HIBERNATE_COMMAND=/usr/sbin/hibernate #AUTO_HIBERNATION_BATTERY_CHARGE_PERCENT=2 #AUTO_HIBERNATION_ON_CRITICAL_BATTERY_LEVEL=1 #start-stop-scripte ausführen CONTROL_START_STOP=1 |
Um Stromsparfunktionen zu nutzen, die nicht direkt von den laptop-mode-tools verwaltet werden können diese Start- und Stopskripte ausführen.
$ ln -s /usr/local/sbin/batteriebetrieb /etc/laptop-mode/batt-start/ $ ln -s /usr/local/sbin/batteriebetrieb /usr/local/sbin/netzbetrieb
Und nun besagtes Skript, welches natürlich individuell angepaßt werden muß.
| Datei: /usr/local/sbin/batteriebetrieb |
#!/bin/bash
batteriebetrieb () {
/etc/init.d/vixie-cron stop
echo "level 0" > /proc/acpi/ibm/brightness
rovclock -c 70 -m 90 > /dev/null
radeontool dac off
iwconfig ath0 txpower 10mW
iwconfig wlan0 power on
ethtool -s eth0 wol d
#ondemand erzeugt viele wakeups
cpufreq-set -g powersave
/etc/init.d/undervolt start
MODULE="af_packet rtc pcmcia firmware_class ide_cd cdrom radeonfb
fb_ddc i2c_algo_bit 8250_pci mii nsc_ircc irda crc_ccitt
radeon serio_raw yenta_socket rsrc_nonstatic
pcmcia_core ehci_hcd 8250_pnp 8250 serial_core uhci_hcd
rng_core pcspkr parport_pc parport i2c_i801 i2c_core
"
ENTLADEVERSUCHE=3
for versuch in $ENTLADEVERSUCHE
do
for modul in $MODULE
do
modprobe -r $modul
done
done
}
netzbetrieb () {
echo "level 7" > /proc/acpi/ibm/brightness
rovclock -c 260 -m 365 > /dev/null
radeontool dac on
iwconfig ath0 txpower 39mW
iwconfig wlan0 power on
cpufreq-set -g ondemand
/etc/init.d/undervolt stop
MODULE="af_packet rtc pcmcia firmware_class ide_cd cdrom radeonfb
fb_ddc i2c_algo_bit 8250_pci e100 mii nsc_ircc irda crc_ccitt
radeon serio_raw yenta_socket rsrc_nonstatic
pcmcia_core ehci_hcd 8250_pnp 8250 serial_core uhci_hcd
rng_core pcspkr parport_pc parport i2c_i801 i2c_core
"
LADEVERSUCHE=3
for versuch in $LADEVERSUCHE
do
for modul in $MODULE
do
modprobe $modul
done
done
/etc/init.d/vixie-cron start
}
if [ "`basename $0`" == "batteriebetrieb" ];then
if [ "$1" == "stop" ]; then netzbetrieb; else batteriebetrieb;fi
elif [ "`basename $0`" == "netzbetrieb" ];then
if [ "$1" == "stop" ]; then batteriebetrieb; else netzbetrieb;fi
fi
|
$ /etc/init.d/laptop_mode start $ rc-update add laptop_mode default
[Bearbeiten] Schlafskript
$ emerge hibernate-script
| Datei: /etc/hibernate/hibernate.conf |
TryMethod suspend2.conf TryMethod disk.conf TryMethod ram.conf |
| Datei: /etc/hibernate/suspend2.conf |
UseSuspend2 yes Reboot no EnableEscape yes DefaultConsoleLevel 1 Compressor lzf Encryptor none #FullSpeedCPU yes Include common.conf |
| Datei: /etc/hibernate/ram.conf |
TryMethod ususpend-ram.conf TryMethod sysfs-ram.conf |
| Datei: /etc/hibernate/common.conf |
#Ausführlichkeit der Meldungen beim Einschlafen Verbosity 0 #und im Log LogVerbosity 1 LogFile /var/log/hibernate.log Distribution gentoo #restore-only: schneller aber doof wenn die HW-Uhr spinnt SaveClock restore-only #Wenn in den laptop-mode-tools der Cache aktiviert wurde, lieber ausschalten DisableWriteCacheOn /dev/hda #nfs unmounten #Unmount /mnt/server UnmountFSTypes smbfs nfs #IbmAcpi yes #RadeonTool yes #Rechner sperren mittels xscreensaver #LockXScreenSaver yes # LockXLock yes OnSuspend 20 echo "Good night!" OnResume 20 echo "Good morning!" #Bei problematischen Treibern EnableNMReconnect yes #DownInterfaces wlan0 DownInterfaces auto UpInterfaces auto #externe Module müssen meist in blacklisted-modules (insbesondere wlan) UnloadBlacklistedModules yes LoadModules auto GentooModulesAutoload yes RestartServices laptop_mode #SwitchToTextMode yes #XSuspendText Preparing to suspend... #XResumeText Resuming from suspend... #BackLight yes #LogoutGaim yes #GaimRestoreStatus yes #GaimLogoutMessage Hibernating #GaimLoginMessage Back from hibernation |
| Datei: /etc/hibernate/ususpend-ram.conf |
USuspendMethod ram Include common.conf |
| Datei: /etc/hibernate/sysfs-ram.conf |
UseSysfsPowerState mem Include common.conf |
Nach einiger Zeit ohne Benutzereingabe kann der Rechner ruhig einschlafen.
| Datei: /usr/local/sbin/idlewatcher |
#!/bin/bash
#Minuten
#ZEITBISDUNKEL=2
ZEITBISSCHLAF=10
#Sekunden
PRUEFINTERVALL=3
#Initialisierung von Variablen
ZAEHLER=0
#DUNKEL=0
if [ ! "$INTALT" ];then INTALT="012345";fi
#Tastatur/Maus-Prüfschleife
while [ 1 ]
do
#alle ??s prüfen
sleep $PRUEFINTERVALL
ZEITSTEMPELNEU=$(date +%s)
if [ ! "$ZEITSTEMPELALT" ];then ZEITSTEMPELALT=$ZEITSTEMPELNEU;fi
INTNEU=$(cat /proc/interrupts|grep i8042|awk '{ print $2 }')
if [ ! "$INTNEU" == "$INTALT" ];then
ZAEHLER=0
#if [ "$DUNKEL" -eq "1" ];then
# radeontool light on;DUNKEL=0
#fi
else
ZAEHLER=$(($ZAEHLER+($ZEITSTEMPELNEU-$ZEITSTEMPELALT)))
fi
ZEITSTEMPELALT=$ZEITSTEMPELNEU
INTALT=$INTNEU
#if [ "$DUNKEL" -eq "0" ];then
# if [ "$ZAEHLER" -ge "$(($ZEITBISDUNKEL*60))" ];then
# radeontool light off;DUNKEL=1
# fi
#fi
if [ "$ZAEHLER" -ge "$(($ZEITBISSCHLAF*60))" ];then
hibernate-ram
#schlafen
fi
done
|
Nach jedem Booten starten:
$ echo 'idlewatcher > /dev/null 2>&1 &' >> /etc/conf.d/local.start
Dieses Skript war inpiriert von idlewatcher. Dieses kann man auch verwenden, es läuft aber u.U. erst nach Anpassung:
$ emerge Proc-Daemon
| Datei: Änderungen an /usr/local/sbin/idlewatcher |
#Bei den "use"-Einträgen hinzufügen: use Proc::Daemon; #bei "if ( DAEMONIZE )" (ca. Zeile 150) den ganzen händischen fork-Kram auskommentieren und #stattdessen einfach nur: Proc::Daemon::Init; |
Alternativ kann man auch xscreensaver benutzen:
| Datei: ~/.Xdefaults |
xscreensaver.timeout: 10 xscreensaver.programs: sudo hibernate-ram |
Man kann auch ein Einschlafen in mehreren Stufen veranlassen, also erst "Suspend to RAM" danach "Suspend to disk". Man erstellt ein Skript "schlafen", welches statt "hibernate-ram" im oben beschriebenen "idlewatcher" eingetragen werden muß.
| Datei: /usr/local/sbin/schlafen |
#!/bin/bash #Schlafdauer festlegen (in Minuten) ZEITBISAUFWACHEN=60 #Aufwachtermin eintragen python -c "import datetime; print datetime.datetime.utcnow() + datetime.timedelta(minutes=$ZEITBISAUFWACHEN)" > /proc/acpi/alarm #vorraussichtlichen Zeitstempel holen ZEITSTEMPEL=$(python -c "import datetime; import time;zeit=datetime.datetime.utcnow() + datetime.timedelta(minutes=$ZEITBISAUFWACHEN); print int(time.mktime(zeit.timetuple())+1e-6*zeit.microsecond+7200)") #####zum Testen die Zeit merken #date > /tmp/test-schlafen ##### #und einschlafen hibernate-ram #Nach dem Aufwachen den geschätzten Stempel mit dem echten vergleichen #Je nach persönlichen hibernate-Einstellungen kann die Differenz varieren, #daher kann der Anpassungswert hinten verändert werden ZEITDIFF=$(python -c "import time;print abs(int(time.time())-int($ZEITSTEMPEL)-10)") ######wieder nur für Tests #date >> /tmp/test-schlafen #echo "diff: $ZEITDIFF" >> /tmp/test-schlafen ###### #wenn die Differenz klein, also vmtl. nicht per hand geweckt wurde: hibernate if [ "$ZEITDIFF" -le "60" ];then sleep 3;hibernate;fi |
Falls der ACPI-Alarm nicht funktioniert, kann man stattdessen nvram-wakeup probieren.
-- Mattenklicker 20:42, 25. Mai 2007 (UTC)
