Howto ACPI



Auteur : Sylvestre Ledru (questions, commentaires, n'hesitez pas ...)
English version
Retourner a la page linux

Nouveau (25/08/2003), Kernel :
Depuis le nouveau kernel (2.4.22), ce patch ACPI est par defaut inclus dans le kernel.
Nnouveau (08/11/2003), suspend / hibernate :
J'ai enfin reussi a installer et configurer le mode hibernation !

Qu'est ce que l'ACPI ?
ACPI est une relativement vieille technologie mais qui est malheureusement plutot mal supportée par le noyau Linux. L'ACPI est développé par un consortium de quelques entreprises tel que Intel, Compaq ou encore IBM ... Le but de cette technologie est de fournir un remplaçant à l'APM.
Elle est surtout utile sur les portables (gestion d'énergie, température ...).
Malheureusement, les spécifications ne sont pas vraiment bien suivies, donc les développements restent assez difficiles.

Comment installer l'ACPI ?

Premièrement, visitez le site s'occupant du développement de la gestion de l'ACPI (http://acpi.sourceforge.net) et téléchargé le patch approprié pour la version de votre noyau.
Par exemple, j'ai un noyau 2.4.20. Donc, le fichier acpi-20021212-2.4.20.diff.gz est celui qui me fournira la mise à jour de mon noyau officiel (l'ACPI du noyau officiel ne marche pas bien).

Je suppose que vous avez les sources du noyau dans le répertoire /usr/src/linux.
Patcher le noyau
Nous devons patcher le noyau (pas de problèmé, c'est vraiment facile) :
# cd /usr/src/linux
# wget http://url/acpi-20021212-2.4.20.diff.gz
# gunzip acpi-20021212-2.4.20.diff.gz
# patch -p1 < acpi-20021212-2.4.20.diff

Ceci suffit a patcher le noyau.

Nouvelles options dans le noyau
Un nouveau menu apparait donc dans le menu du noyau dans 'General Setup'
'ACPI support'.
Dans le menu, vous pouvez ajouter ces options :
AC Adapter, Battery, Button, Fan, Processor, Thermal Zone.
Mais attention, parfois, le BIOS ne supporte pas ces options.
Selectionné ce dont vous avez besoin (comme module ou intégré), recompilez le noyau/modules, installez le tout et si nécessaire, redémarrez.

Programme de gestion de l'ACPI
Maintenant, votre noyau supporte l'ACPI, mais il vous reste à installer le programme qui pourra gérer l'ACPI.
Sous Debian, apt-get install acpid devrait etre assez.

Vous devriez avoir quelques fichiers dans le répertoire /proc/acpi comme par exemple /proc/acpi/info.
Si vous n'avez pas ce fichier, c'est qu'il y a une erreur (donc vérifier si vous n'avez pas fait d'erreur). Autrement, ACPI devrait marcher sans problème sur votre ordinateur.
Par exemple, cat /proc/acpi/battery/BAT1/state me donne (quand on portable est alimente (c'est BAT1 pour moi mais parfois c'est BAT0) :
present: yes
capacity state: ok
charging state: unknown
present rate: 0 mA
remaining capacity: 4192 mAh
present voltage: 16736 mV

Il est aussi possible d'obtenir plus d'informations comme dans /proc/acpi/battery/BAT1/info :
present: yes
design capacity: 4400 mAh
last full capacity: 4192 mAh
battery technology: rechargeable
design voltage: 14800 mV
design capacity warning: 300 mAh
design capacity low: 200 mAh
capacity granularity 1: 32 mAh
capacity granularity 2: 32 mAh
model number: 00 00 00 00
serial number: 30 00 00 00 00 00 00 00 00
battery type: 00 00 00 00
OEM info: 00 00 00 00

Si vous voulez une interface plus agréable que cat ou less, vous pouvez instaler acpi (apt-get install acpi) qui est un client.
Par exemple, actuellement, sur mon portable, l'ACPI fournir ces informations :

[11:39:58][sly@reloaded] /proc/acpi$ acpi -V
Battery 1: discharging, 82%, 01:56:53 remaining
Thermal 1: ok, 43.0 degrees C
AC Adapter 1: off-line

Il existe un plugin gkrellm appellé gkacpi. Il est un peu buggé mais le code (C) est assez facile à comprendre ...


Mode Suspend / hibernation (hibernate) :
Grace a Jan's Linux Log, je viens juste d'arriver a activer le mode hibernation (suspend) !! Ceci veut dire que je peux presser le bouton Power pour arreter l'ordinateur et presser encore pour qu'il reprenne la ou j'en etais !!! Super !!!
Pour obtenir cette fonctionnalite :
Vous devez patcher votre kernel avec swsup (Software Suspend For Linux) :

cd /usr/src/
wget http://heanet.dl.sourceforge.net/sourceforge/swsusp/swsusp-2.0-rc2-whole.bz2
bunzip2 swsusp-2.0-rc2-whole.bz2
cd linux
patch -p1 < ../swsusp-2.0-rc2-whole

Deselectionner l'option SMP (dans Processor type and features), selectionnez Software Suspend et Relaxed /proc/swsusp permissions (dans General Setup), selectionnez Enhanced Real Time Clock Support (dans Character devices). Recompilez votre kernel et installez le.
You devez aussi specifier dans votre chargeur linux (lilo ou grub) le nom de la partition swap ou il va pouvoir stocker l'image du systeme :
par exemple, avec lilo, ca va etre :

append="resume=/dev/hda7"

(changez 7 pour votre configuration).
Telechargez le script suspend.sh sur le meme site que le patch (ce script est appelle suspend-script) et installez le (./suspend.sh --install sous le c\ ompte root). Ce script va ajouter des choses selon votre distribution linux (il gere au moins Suse, Mandrake, Debian, Redhat, Gentoo et Slackware).
Editez le fichier /etc/suspend.conf et changez SWSUSP_FORCE_SUSPEND_MODE="0" pour SWSUSP_FORCE_SUSPEND_MODE="acpi"
Si vous avez reussi a tout installer correctement, vous devriez pouvoir eteindre votre portable en executant la commande /usr/local/sbin/hibernate.
Avec un portable, vous pouvez faire votre propre "raccourcis" : si vous pressez le bouton power, ca va mettre en hibernation votre portable. Editez le fichier /etc/acpi/events/power et ajoutez dedans :

event=button[ /]power
action=sudo /usr/local/sbin/hibernate

Et configurez sudo :

Host_Alias LOCALHOST=localhost,votremachine
ALL LOCALHOST=NOPASSWD: /usr/local/sbin/hibernate *

et ca devrait fonctionner !