vga_switcheroo est un outil inclus dans le noyau Linux qui permet de basculer entre les différentes cartes graphiques d'un ordinateur. Cet outil est particulièrement utile si vous possédez un ordinateur portable avec plusieurs GPU (cartes graphiques).
Vous trouverez plus d'informations sur cette publication sur linuxfr.org au sujet de la sortie du noyau Linux 2.6.34 incluant cette technologie.
Si vous voulez constater la différence d'autonomie, saisissez dans un terminal la commande suivante:
acpi
devrait vous répondre par exemple
Battery 0: Discharging, 88%, 04:55:28 remaining
Ici l'autonomie annoncée est de 4h55 avec 88% de batterie.
Saisissez maintenant
echo ON > switch ; sleep 30 ; acpi
Ce qui activera la carte graphique (ici une ATI) inutilisée avant de retester l'autonomie 30 secondes plus tard. La réponse sera par exemple
Battery 0: Discharging, 88%, 02:36:56 remaining
Ici, toujours avec 88% de batterie, il est annoncé 2h36 d'autonomie.
Sur un Acer Aspire 4820TG, la puissance demandée par l'ordinateur passe de 25W avec l'installation par défaut d'Ubuntu 12.04 faire à 11W une fois le réglage effectuée, soit une autonomie multipliée par 2,5 (la carte AMD consommant 14W par le simple fait d'être alimentée).
VGA Switcheroo ne fonctionne pas avec les pilotes graphiques propriétaires des cartes graphiques. Utiliser le Gestionnaire de pilotes propriétaires pour vérifier si un pilote graphique propriétaire à été installé et le désinstaller si nécessaire.
Pour basculer entre les cartes graphiques, vga_switcheroo utilise le fichier /sys/kernel/debug/vgaswitcheroo/switch. Vérifiez son existence avant de pouvoir l'utiliser.
ls -l /sys/kernel/debug/vgaswitcheroo/switch
Si le fichier n'existe pas, vérifiez les points suivant ; sinon vous pouvez passer à l'Utilisation de vga_switcheroo. Si ça ne fonctionne toujours pas, il est possible que votre ordinateur n'utilise pas le switch MUX permettant cette bascule. Vérifiez sur la documentation si des informations existent pour votre portable en la recherchant sur la documentation et/ou sur les forums.
Afin de vérifier que vga_switcheroo est disponible dans le noyau que vous utilisez actuellement, saisissez dans un terminal la commande suivante:
grep -i switcheroo /boot/config-`uname -r`
La réponse devra être
CONFIG_VGA_SWITCHEROO=y
Si vous avez bien cette ligne, vga_switcheroo peut-être utilisé et vous pouvez continuer sans problème. Dans le cas contraire, vérifiez avec la commande
uname -r
que votre noyau est au moins à la version 2.6.34. Dans Ubuntu 10.04 la version de base du noyau étant 2.6.32, vga_switcheroo n'est donc pas disponible. Vous pouvez alors soit:
Maintenant que vous savez que le noyau inclus vga_switcheroo, vérifiez que /sys/kernel/debug est bien monté (en principe sur Ubuntu, aucun problème) avec la commande suivante :
mount | grep /sys/kernel/debug
Qui doit vous renvoyer :
none on /sys/kernel/debug type debugfs (rw)
Si cette ligne s'affiche tout va bien, vous pouvez passer à la partie suivante ! :) Si ce n'est pas le cas (ça ne renvoie rien), éditez avec les droits d'administration le fichier /etc/fstab pour y insérer cette ligne:
none /sys/kernel/debug debugfs defaults 0 0
Ensuite, redémarrez votre ordinateur ou saisissez dans un terminal:
sudo mount -a
.
Pour comprendre ce que vous allez faire, un peu de vocabulaire utilisé par vga_switcheroo :
Vous pouvez ajouter “une règle par défaut” qui sera exécutée à chaque démarrage de l'ordinateur. Par exemple, pour désactiver directement votre carte graphique inutilisée, ajoutez dans le fichier /etc/rc.local :
echo OFF > /sys/kernel/debug/vgaswitcheroo/switch
Dans certains cas, il peut être utile de rajouter la ligne suivante avant cette ligne pour laisser le temps au noyau d'initialiser le matériel (Acer Aspire 4820TG) :
sleep 1
Pour basculer entre les cartes graphiques, vga_switcheroo utilise le fichier /sys/kernel/debug/vgaswitcheroo/switch.
Pour l'utiliser plus simplement et faciliter les modifications, attribuez-vous les droits sur ce fichier pour qu'il vous appartienne dès le démarrage. Pour faire cela, il suffit d' éditer avec les droits d'administration le fichier /etc/rc.local (juste avant le exit 0
) pour y ajouter cette ligne en modifiant nom_utilisateur par votre identifiant de session :
chown nom_utilisateur /sys/kernel/debug/vgaswitcheroo/switch
Éteindre la carte graphique non utilisée :
echo OFF > /sys/kernel/debug/vgaswitcheroo/switch
Allumer la carte graphique non utilisée :
echo ON > /sys/kernel/debug/vgaswitcheroo/switch
Active la carte graphique intégrée : (aucun effet si X est démarré)
echo IGD > /sys/kernel/debug/vgaswitcheroo/switch
Active la carte graphique discrète : (aucun effet si X est démarré)
echo DIS > /sys/kernel/debug/vgaswitcheroo/switch
Malheureusement, le serveur X ne gérant pas le changement de carte graphique “à chaud”, il faut le redémarrer pour pouvoir changer de carte graphique. Les commandes suivantes permettent de le forcer à redémarrer sur une ou l'autre des cartes :
Active la carte graphique intégrée au prochain démarrage de X :
echo DIGD > /sys/kernel/debug/vgaswitcheroo/switch
Active la carte graphique discrète au prochain démarrage de X :
echo DDIS > /sys/kernel/debug/vgaswitcheroo/switch
Comme expliquée plus haut, les commandes ne fonctionnent pas lorsque le serveur graphique est en utilisation. Voici comment activer l'une ou l'autre carte graphique en mode console.
Tout d'abord vous aurez besoin de fermer la session utilisateur. Vous reviendrez à l'écran de sélection des utilisateurs. Appuyez à présent simultanément sur les touches CTRL + ALT + F1 pour passer sur le terminal mode console tty1. Vous devrez vous identifier.
Passer en mode root
sudo -s
Allumer la carte graphique non utilisée :
echo ON > /sys/kernel/debug/vgaswitcheroo/switch
Active la carte graphique discrète :
echo DIS > /sys/kernel/debug/vgaswitcheroo/switch
Vous devriez alors recevoir le message suivant
i915 switched off
Vérifier que la carte discrète est bien allumée et utilisée
# cat /sys/kernel/debug/vgaswitcheroo/switch 0:IGD: :Off:0000:00:02.0 1:DIS:+:DynPwr:0000:01:00.0 2:DIS-Audio: :Pwr:0000:01:00.1
Rédémarrer la session graphique
service lightdm start
Si cela ne fonctionne pas, appuyez sur CTRL + ALT + F7
Contributeurs: minishooter, Id2ndR