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.
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 :
# 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.
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.
#!/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