Précédent Remonter Suivant

9  Gestion de l'énergie

C'est pour que le coeur (la led blanche en façade) de l'ibook batte quand on rabat l'ecran, et (surtout) qu'elle s'éteigne et que tout revienne en ordre quand on le relève... Pour faire cette prouesse technologique, le service de gestion de l'énergie adapté s'appelle PMU sur l'ibook, et non pas APM qui est installé par debian par défaut.

9.1  Noyau et applications de suivi

Il faut un noyau récent (³ 2.4.20-ben5), et pmud ou pbbuttonsd (cf section 9.2 ci-dessous) pour que ça marche au poil. Si ce n'est pas le cas, il faut récupérer une version récente, et se le compiler aux petits oignons.

Important : pour que ça marche vraiment, c'est-à-dire pour que l'ibook se réveille correctement quand on relève l'écran, il faut que le périphérique caractéres /dev/apm_bios existe (il permet d'indiquer au pilote X de la Radeon que le portable s'apprête à s'endormir quand on rabaisse l'écran, histoire qu'il retrouve ses petits au réveil). Il est créé par tasksel par défaut quand on choisit l'ensemble d'applications laptop lors de l'installation de la debian. Mais, s'il n'existe pas, faire :
mknod /dev/apm\_bios c 10 134
chmod 770 /dev/apm\_bios
Après ces vérifications, quand on rabat l'écran, le portable se met en sommeil et la led blanche s'allume. Et quand on relève l'écran, la bécane se rallume, toute fraîche (que ce soit sous X ou en console) ! Si on a oublié de créer /dev/apm_bios, l'ibook ne se réveille tout simplement pas quand on relève l'écran...

Sous gnome, utiliser l'applet battery_applet qui marche très bien pour savoir où en est la batterie (et en plus ça signale quand elle passe dessous les 5%). Il y a aussi une applet spéciale pmu, mais je la trouve trop grosse et pas jolie.

9.2  Outils de gestion de l'énergie

9.2.1  pmud

Première solution, installer pmud fourni en standard avec la debian :
apt-get install pmud pmud-utils
en demandant de virer apmd installé par défaut par tasksel.

J'ai juste modifié un peu la config pour que l'ibook ne se mette pas en veille quand on rabat l'écran alors qu'il est sur le secteur, mais ce n'est pas fondamentalement nécessaire : ça se passe dans /etc/default/power :
PMUD_FLAGS="-a -K"
Puis faire ``/etc/init.d/pmud stop ; /etc/init.d/pmud start''.

9.2.2  pbbuttonsd

Deuxième solution : récupérer, compiler et installer pbbuttonsd (voir section 7.3.4), et lui demander de remplacer pmud (option de configuration replace_pmud). Personnellement, je préfère n'utiliser que pmud de base.

9.3  Améliorer l'autonomie

9.3.1  Fréquence du processeur

Pour que pmud fasse tourner le processeur 2 fois moins vite quand on est en mode nomade (ie sur batterie), il faut compiler son noyau avec les options CONFIG_CPU_FREQ et CONFIG_CPU_FREQ_PMAC, et avoir un fichier /etc/power/pwrctl-local qui ressemble (merci David Mentré) à :
#!/bin/bash
logger=/usr/bin/logger

case "$1" in
minimum)
 $logger -p daemon.info -t pwrctl-local "minimum power $2"
        case "$2" in
            ac)
                echo -n "0%50%100%performance" > /proc/cpufreq
  echo 400000 > /sys/devices/system/cpu/cpu0/cpufreq/scaling_min_freq
  echo 800000 > /sys/devices/system/cpu/cpu0/cpufreq/scaling_max_freq
  echo performance > /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor
                ;;
            *)
                echo -n "0%50%100%powersave" > /proc/cpufreq
  echo 400000 > /sys/devices/system/cpu/cpu0/cpufreq/scaling_min_freq
  echo 800000 > /sys/devices/system/cpu/cpu0/cpufreq/scaling_max_freq
  echo powersave > /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor
                ;;
        esac
;;
medium)
 $logger -p daemon.info -t pwrctl-local "medium power $2"
        case "$2" in
            ac)
                echo -n "0%50%100%performance" > /proc/cpufreq
  echo 400000 > /sys/devices/system/cpu/cpu0/cpufreq/scaling_min_freq
  echo 800000 > /sys/devices/system/cpu/cpu0/cpufreq/scaling_max_freq
  echo performance > /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor
                ;;
            *)
                echo -n "0%50%100%powersave" > /proc/cpufreq
  echo 400000 > /sys/devices/system/cpu/cpu0/cpufreq/scaling_min_freq
  echo 800000 > /sys/devices/system/cpu/cpu0/cpufreq/scaling_max_freq
  echo powersave > /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor
                ;;
        esac
;;
maximum)
 $logger -p daemon.info -t pwrctl-local "maximum power $2"
        case "$2" in
            ac)
                echo -n "0%50%100%performance" > /proc/cpufreq
  echo 400000 > /sys/devices/system/cpu/cpu0/cpufreq/scaling_min_freq
  echo 800000 > /sys/devices/system/cpu/cpu0/cpufreq/scaling_max_freq
  echo performance > /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor
                ;;
            *)
                echo -n "0%50%100%powersave" > /proc/cpufreq
  echo 400000 > /sys/devices/system/cpu/cpu0/cpufreq/scaling_min_freq
  echo 800000 > /sys/devices/system/cpu/cpu0/cpufreq/scaling_max_freq
  echo powersave > /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor
                ;;
        esac
 $logger -p daemon.info -t pwrctl-local "skipping pwrctl-main"
 exit 1
;;
warning)
 /usr/bin/wall "Low battery, system going down any minute now"
;;
lid-closed)
 $logger -p daemon.info -t pwrctl-local "lid-closed $2"
;;
lid-opened)
 $logger -p daemon.info -t pwrctl-local "lid-opened $2"
;;
sleep)
 $logger -p daemon.info -t pwrctl-local "sleep $2"
 # Some modules don't support sleep/resume
 /sbin/rmmod -a
 sleep 3
 /sbin/rmmod -a
 sync;sync;sync
 fblevel off
;;
wakeup)
 $logger -p daemon.info -t pwrctl-local "wakeup $2"
 /sbin/rmmod -a
        case "$2" in
            ac)
                echo -n "0%50%100%performance" > /proc/cpufreq
  echo 400000 > /sys/devices/system/cpu/cpu0/cpufreq/scaling_min_freq
  echo 800000 > /sys/devices/system/cpu/cpu0/cpufreq/scaling_max_freq
  echo performance > /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor
                ;;
            *)
                echo -n "0%50%100%powersave" > /proc/cpufreq
  echo 400000 > /sys/devices/system/cpu/cpu0/cpufreq/scaling_min_freq
  echo 800000 > /sys/devices/system/cpu/cpu0/cpufreq/scaling_max_freq
  echo powersave > /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor
                ;;
        esac
 fblevel on
;;
*)
 $logger -p daemon.error -t pwrctl-local "invalid arg $1 $2"
 exit 2
;;
esac

exit 0

9.3.2  Limiter les accès en écriture au disque

Pour limiter les mises à jour sur disque lors des accès en lecture, spécifier l'option noatime dans le /etc/fstab.


Précédent Remonter Suivant