Aktivieren von Stromsparfunktionen

Aus Gentoo Linux Wiki

Wechseln zu: Navigation, Suche
Dieser Artikel ist Teil der HOWTO Sammlung.
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)

'Persönliche Werkzeuge