Table des matières

Gestion de l'ACPI

Introduction

L'ACPI est censée être une norme que tout système d'exploitation peut mettre en œuvre correctement. Cependant, les BIOS ont longtemps été mal codés par manque de respect des règles de la programmation de l'ACPI. Par conséquent, Linux doit faire de l'ingénierie inverse de l'implémentation ACPI défectueuse. C'est pourquoi vous pouvez voir des problèmes dans Linux avec les fonctionnalités liées à l'ACPI comme la suspension vers la RAM, la mise en veille prolongée, etc.

C'est pourquoi la gestion de l'ACPI peut être un problème récurrent sous Linux. Ou l'ordinateur ne s'éteint pas, ou il se bloque en cours d'utilisation voire au démarrage. C'est toujours intéressant de pouvoir tester quelques petits trucs histoire de voir s'il n'y a pas moyen de se sortir de ce mauvais pas.

La marche à suivre : modification des fichiers /etc/default/grub et /etc/modules

Sur le Toshiba Satellite L670 que je viens de me procurer j'avais droit à tout. Ordi qui freeze, démarrage qui bloque, machine que ne s'éteint plus et impossibilité de sortir de veille. J'ai remédié au problème de cette manière.

Tout d'abord il m'a fallu modifier deux fichiers de configuration : /etc/default/grub et /etc/modules.

Modification de /etc/default/grub

Il faut éditer le fichier mais pensez toujours à en faire une sauvegarde d'abord, on sait jamais :

nano /etc/default/grub

Pour y mettre cette ligne : GRUB_CMDLINE_LINUX_DEFAULT=“quiet splash acpi=force apm=power_off”. Le fichier doit ressembler à ceci :

/etc/default/grub
# If you change this file, run 'update-grub' afterwards to update
# /boot/grub/grub.cfg.
# For full documentation of the options in this file, see:
#   info -f grub -n 'Simple configuration'
 
GRUB_DEFAULT=0
GRUB_TIMEOUT=5
GRUB_DISTRIBUTOR=`lsb_release -i -s 2> /dev/null || echo Debian`
 
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash acpi=force apm=power_off"
 
# Uncomment to enable BadRAM filtering, modify to suit your needs
# This works with Linux (no patch required) and with any kernel that obtains
# the memory map information from GRUB (GNU Mach, kernel of FreeBSD ...)
#GRUB_BADRAM="0x01234567,0xfefefefe,0x89abcdef,0xefefefef"
 
# Uncomment to disable graphical terminal (grub-pc only)
#GRUB_TERMINAL=console
 
# The resolution used on graphical terminal
# note that you can use only modes which your graphic card supports via VBE
# you can see them in real GRUB with the command `vbeinfo'
#GRUB_GFXMODE=640x480
 
# Uncomment if you don't want GRUB to pass "root=UUID=xxx" parameter to Linux
#GRUB_DISABLE_LINUX_UUID=true
 
# Uncomment to disable generation of recovery mode menu entries
#GRUB_DISABLE_RECOVERY="true"
 
# Uncomment to get a beep at grub start
#GRUB_INIT_TUNE="480 440 1"

Quand c'est fait on sauvegarde.

Cette modification indique à grub les choses suivantes : - l'option “quiet splash” signifie que si plymouth est installé (ou un autre gestionnaire de bootsplash), il faut afficher le bootsplash (l'animation de démarrage) plutôt que le texte de la console. - L'option “apm=power_off” (APM = Advanced Power Management) dit à grub que c'est APM qui va s'occuper de la gestion de l'alimentation et pas ACPI qui était la cause de nos problèmes.

Après ça un

update-grub

permettra à grub de prendre en compte les modifications effectuées.

Modification du fichier nano /etc/modules. On ajoute cette ligne dans le fichier :

apm power_off=1

Quand c'est fait on sauvegarde. Le fichier /etc/modules permet de spécifier les modules à charger et les arguments qu'ils prennent. Ici, apm power_off=1 indique que le module apm doit être chargé avec l'option power_off=1, qui lui indique sans doute de se charger de la mise hors-tension.

Voilà, c'est terminé. Y'a plus qu'à redémarrer pour voir ce que ça donne.

Note

Sur mon portable, pour que la mise en veille fonctionne correctement en appuyant sur le bouton de mise sous tension j'ai modifié le fichier /etc/acpi/powerbtn-acpi-support.sh de cette manière : Pensez à faire une sauvegarde avant de modifier c'est plus prudent.

powerbtn-acpi-support.sh
#!/bin/sh
 
# This script initiates a shutdown when the power putton has been
# pressed. Loosely based on the sample that ships with the acpid package.
# If the acpid sample is present as a real config file (as it was in earlier
# versions of acpid), we skip this script. (Purging and reinstalling acpid
# resolves this situation, or simply deleting /etc/acpi/events/powerbtn.)
 
if [ -f /etc/acpi/events/powerbtn -o -f /etc/acpi/events/powerbtn.dpkg-bak ] ; then 
	logger Acpi-support not handling power button, acpid handler exists at /etc/acpi/events/powerbtn or /etc/acpi/events/powerbtn.dpkg-bak.
	exit 0
fi
 
[ -e /usr/share/acpi-support/policy-funcs ] || exit 0
 
. /usr/share/acpi-support/policy-funcs
 
if CheckPolicy; then
	exit 0
fi
 
if [ -x /etc/acpi/powerbtn.sh ] ; then
	# Compatibility with old config script from acpid package
	/etc/acpi/powerbtn.sh
elif [ -x /etc/acpi/powerbtn.sh.dpkg-bak ] ; then
        # Compatibility with old config script from acpid package
	# which is still around because it was changed by the admin
        /etc/acpi/powerbtn.sh.dpkg-bak
else
#	# Normal handling.
#	/sbin/shutdown -h -P now "Power button pressed"
fi
1)
N'hésitez pas à y faire part de vos remarques, succès, améliorations ou échecs !