Table des matières

,

Modèle : Toshiba Satellite U500-119

En un coup d'œil

Le tableau suivant récapitule la prise en charge du matériel de portable par les différentes versions d'Ubuntu. Il utilise les notations suivantes :

Version Installation Carte graphique Son Wifi Bluetooth Webcam Touchpad Raccourcis multimédia Rétroéclairage Ventilateur
Ubuntu 10.10 Mais quelques freeze sous KDE -

Utilisateurs du Wiki possédant cet ordinateur, fonctionnel :

Cet ordinateur portable n'est pas tatoué.

Problèmes

Rétroéclairage

Lorsque l'on souhaite changer la luminosité de l'écran avec les touches Fn+F6 ou Fn+F7 une barre de niveau semblable à la barre de changement de volume s'affiche à l'écran, mais la luminosité ne change pas.

Il est possible de changer la luminosité en ligne de commande, grâce à la commande setpci

Observer d'abord le résultat de la commande

lspci | grep VGA

qui devrait vous retourner une série de chiffres de la forme 00:02.0, suivis du nom de votre contrôleur graphique.

Ce sont ces chiffres que nous allons utiliser dans la commande ci-après :

setpci -s 00:02.0 F4.B=xx

modifier xx par une valeur hexadécimale comprise entre 00 et FF afin de faire varier la luminosité de votre écran.

Ceci n'est pas très confortable à long terme. Le plus simple pour remédier à cela est de créer un démon qui va surveiller dynamiquement les changements apportés au fichier /sys/class/backlight/acpi_video0/brightness et appeler la commande setpci pour appliquer les changements.

Création du script

On créé le fichier puis on le rend exécutable.

sudo touch /etc/init.d/backlightd      
sudo chmod +x /etc/init.d/backlightd
sudo gedit /etc/init.d/backlightd

Y copier le contenu suivant:

#!/bin/bash
 
old_b=9;
declare -i curr_b=240;
declare -i target_b=240;
 
while : ; do
b=`cat /sys/class/backlight/acpi_video0/brightness`;
delay="0.5"
 
if [ $old_b != $b ]; then
old_b=$b
let "target_b=$b * 20 + 12"
fi
 
hex_b=".";
 
if [ "$curr_b" -lt "$target_b" ] ; then
let "curr_b=$curr_b + 2"
if [ "$curr_b" -gt "$target_b" ] ; then
let "curr_b=$target_b"
fi
 
hex_b="-"
elif [ "$curr_b" -gt "$target_b" ] ; then
let "curr_b=$curr_b - 2"
if [ "$curr_b" -lt "$target_b" ] ; then
let "curr_b=$target_b"
fi
 
hex_b="-"
fi
 
if [ $hex_b != "." ] ; then
hex_b=`printf "%02X" $curr_b`
delay="0.005"
setpci -s 00:02.0 F4.B=$hex_b
fi
 
sleep $delay
done
Lancement au démarrage

Ouvrir le fichier rc.local

sudo gedit /etc/rc.local

Y copier la ligne suivante AVANT la ligne exit 0

nohup /etc/init.d/backlightd &

Au redémarrage la luminosité peut-être réglée par les touches Fn, l'applet Gnome Backlight, et autres.

Ventilateur

Le ventilateur s'arrête dès le chargement d'Ubuntu, et ne se mettra à tourner que quelques secondes lorsque la température du processeur dépassera les 100°C. Ceci peut-être très dangereux pour vos composants. Il est possible de faire tourner le ventilateur en mettant le PC en veille puis en le rallumant. Néanmoins le ventilateur restera tourner à une vive allure et ne s'arrêtera plus, ce qui est très agaçant.

Ce problème vient d'une table DSDT mal conçue dans le BIOS. Celle-ci a été clairement compilée pour les OS Microsoft, en laissant à Linux une table buggée, comme c'est malheureusement trop souvent le cas sur les portables Toshiba. En effet, les méthodes d'activation des ventilateurs renvoient toujours la valeur "1", ce qui fait que Linux va constamment essayer d'arrêter les ventilateurs.

Nous allons corriger cette table DSDT, la recompiler, et l'intégrer à notre noyau (soit par une recompilation de celui-ci, soit en la chargeant dans le initrd). Il est important d'avoir effectué la dernière mise jour de son BIOS depuis le site de Toshiba au préalable.

Si vous ne souhaitez pas compiler votre propre noyau, différentes versions compilées du noyau Ubuntu pour le Toshiba U500-119 peuvent être téléchargées sur cette page au format .deb.

Table DSDT

Corriger la table

Installez le paquet Intel DSDT Compiler iasl.

Copier le DSDT actuel dans un fichier du dossier actuel

sudo cat /proc/acpi/dsdt > dsdt.dat

Désassembler la table

iasl -d dsdt.dat

Ouvrez le fichier nouvellement créé dsdt.dsl.

Trouvez à présent les occurrences suivantes dans votre fichier (utilisez la recherche) :

PowerResource (PF0, 0x00, 0x0000)
PowerResource (PF1, 0x00, 0x0000)
...etc...

Vous devriez en principe trouver 5 occurrences sur la plupart des modèles Toshiba.

Remplacer Lor par And dans chaque champ Method situé après PowerResource. Puis sauvegardez.

Exemple:

PowerResource (PF0, 0x00, 0x0000)
        {
            Method (_STA, 0, NotSerialized)
            {
                If (And (FSTA, 0x01))    <------------------- CETTE LIGNE A ÉTÉ REMPLACÉE
                {
                    Return (One)
                }
                Else
                {
                    Return (Zero)
                }
            }
Recompiler la table

Taper la commande

iasl -tc dsdt.dsl

Vous ne devriez à priori pas voir d'Erreurs, si quelques Warning subsistent ce n'est pas important.

La compilation a créé un fichier dsdt.hex dans votre dossier courant. Nous allons en avoir grand besoin pour la suite.

Recompiler son noyau en y incluant la table DSDT

Les versions antérieures à Jaunty (9.04) permettaient de charger une table DSDT modifiée directement dans le initrd. Ce n'est plus possible depuis Karmic (9.10) :-( pour les raisons évoquées ici (en). Il va donc falloir se retrousser les manches et l'intégrer directement dans un noyau.

Pour cela, vous pourrez suivre la procédure que vous souhaitez, il en existe plusieurs sur ce Wiki. A titre d'exemple, la méthode de compilation d'un noyau sous Lucid et Maverick a été testée avec succès sur un Toshiba U500-119 sous Ubuntu 10.04 (Lucid Lynx) et Ubuntu 10.10 (Maverick Meerkat).

Récupérez les sources et, au moment de la configuration du noyau, activer l'option suivante :

Power management options (ACPI, APM) --->
  ACPI (Advanced Configuration and Power Interface) Support --->
    [*] Include Custom DSDT

Renseigner le nom dsdt.hex et enregistrer.

Note: Vous pouvez aussi le faire manuellement en éditant le fichier .config et en y insérant ces lignes :

CONFIG_STANDALONE=n
CONFIG_ACPI_CUSTOM_DSDT=y
CONFIG_ACPI_CUSTOM_DSDT_FILE="dsdt.hex"

Copier maintenant votre fichier dsdt.hex dans le sous-dossier /include de vos sources du noyau. Par exemple via la commande :

cp dsdt.hex src/linux-2.6.xx/include

Vous pouvez maintenant passer à la compilation, puis à l'installation de votre noyau, qui chargera désormais la nouvelle table DSDT au démarrage. Si tout s'est bien déroulé, vous devriez entendre votre ventilateur ronfler doucement et s'activer normalement :-)

La commande dmesg | grep DSDT vous permettra de vous assurer que la table a bien été chargée au démarrage.

Voir aussi


Contributeurs : tOnI0