vga_switcheroo

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.

Cette page est à utiliser avec Ubuntu 12.04 ou supérieur.
vga_switcheroo n'est pas la seule technique pour manipuler le graphique hybride. Vous trouverez des informations complémentaire sur la page nvidia_optimus en attendant une harmonisation au niveau des documentations sur le sujet.
Par défaut les ordinateurs alimentent en électricité les deux cartes graphiques bien qu'une seule ne soit utilisée à la fois. En effet la solution de graphique hybride a été pensé pour Microsoft Windows où les pilotes propriétaires pré-installés s'occupent ensuite de gérer l'alimentation des cartes. Sous Linux, les pilotes (libres ou propriétaires) ne savent pas encore le gérer directement.
Aussi l'autonomie d'un ordinateur portable sous Linux avec une solution graphique hybride est très fortement réduite : jusqu'à 3 fois moindre !.
Sur les noyaux récents, vga_switcheroo n'est plus disponible. En effet il n'est plus nécessaire d'allumer/éteindre sa carte graphique secondaire avec cette méthode, car cela est fait automatiquement lorsque la carte est utilisée ou non.

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).

Manipulations préalables

Le pilote graphique propriétaire a-t-il été désinstallé ?

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.

/sys/kernel/debug/vgaswitcheroo/switch existe-t-il ?

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.

vga_switcheroo est-il disponible dans mon noyau ?

Cette manipulation est inutile sur Ubuntu 12.04 dans son installation par défaut.

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:

/sys/kernel/debug est-il bien monté ?

Cette manipulation est inutile sur Ubuntu 12.04 dans son installation par défaut.

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

.

Utilisation de vga_switcheroo

Un peu de vocabulaire

Pour comprendre ce que vous allez faire, un peu de vocabulaire utilisé par vga_switcheroo :

  • La carte intégrée correspond à votre chipset graphique (souvent un Intel), peu puissant mais très peu gourmand en énergie.
  • La carte discrète correspond à votre carte graphique. Plus puissante que le chipset (utile pour jouer, décoder des vidéos HD, faire de l'infographie 3D,…), cette carte consomme beaucoup de ressources, et réduit donc l'autonomie de votre ordinateur.

Désactivation de la carte discrète à chaque démarrage

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

Optionnel : manipulation sans « sudo »

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
Ceci n'est pas obligatoire. Si vous ne le faites pas, vous devrez utilisez "sudo" pour modifier le fichier ce qui peut être gênant si vous souhaitez développer vos propres scripts par exemple.

Les commandes disponibles

É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

Utilisation

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

Ressources


Contributeurs: minishooter, Id2ndR

  • vga_switcheroo.txt
  • Dernière modification: Le 28/04/2018, 11:22
  • (modification externe)