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
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.