NVIDIA Optimus (Français)
NVIDIA Optimus est une technologie qui permet d'utiliser les avantages de deux cartes graphiques : l'une économe en énergie (Intel) mais faible en puissance, l'autre plus performante (NVIDIA) mais plus énergivore. Cette technologie équipe la plupart des ordinateurs sur le marché et permet d'activer l'une ou l'autre carte graphique selon la charge de travail. Néanmoins, il n'existe pas encore de fonctionnalité permettant d'automatiser le passage de l'une à l'autre carte sur les distributions GNU/Linux à l'heure actuelle.
Contrairement à Bumblebee, qui permet d'activer la carte graphique NVIDIA lorsque nécessaire, cette solution permettra d'activer la carte graphique dédiée en permanence puisque c'est elle qui sera en charge de tout l'affichage graphique et ce, sans avoir besoin de passer par la carte graphique Intel mais au détriment de la durée de vie de la batterie qui en sera fortement diminuée. Il est vivement conseillé de travailler sur secteur si vous prévoyez de mettre en place ce type de solution.
Si vous ne vous souciez pas de la durée de vie de votre batterie et que vous souhaitez profiter des performances seules de la carte NVIDIA, alors ce sujet vous concerne.
En revanche, si votre ordinateur portable fonctionne sur batterie la plupart du temps, il est préférable d'utiliser la solution Bumblebee.
Mise en place de la solution
État de la technologie Optimus sur la machine
Pour savoir si vous êtes équipé de la technologie Optimus, il suffit de lancer la commande permettant de lister le matériel disponible sur la machine :
lspci | grep -E "VGA|3D"
Si le résultat est de la forme suivante :
00:02.0 VGA compatible controller: Intel Corporation Haswell-ULT Integrated Graphics Controller (rev 09) 04:00.0 3D controller: NVIDIA Corporation GM108M [GeForce 840M] (rev a2)
Alors vous êtes concerné. Si le résultat est différent, vous n'êtes pas concerné et risquez d'endommager la configuration actuelle en continuant sur ce sujet.
Utilisateur de Bumblebee seulement
Si vous utilisiez auparavant Bumblebee, il y a de fortes chances que les paquets que vous aurez à installer entrent en conflits avec les paquets installés pour faire fonctionner Bumblebee. Si vous êtes dans ce cas là, il suffira simplement de supprimer les paquets en question avant de procéder à l'étape suivante.
pacman -Qs bumblebee
Installation des paquets nécessaires
Afin que le serveur graphique puisse détecter une source d'affichage, il faudra installer les pilotes nécessaires. En l’occurrence, les pilotes NVIDIA.
pacman -Syu nvidia nvidia-libgl xrandr
Rédaction du fichier de configuration du serveur graphique
Bien que dans la majorité des cas, il n'y ait aucune configuration manuelle à faire de la part de l'utilisateur, dans notre situation (Optimus), il va falloir indiquer au serveur X que la carte graphique intégrée (Intel) doit être désactivée et qu'il faut désormais utiliser la carte graphique dédiée (NVIDIA).
Pour cela, il suffit simplement de créer un fichier dans le dossier de configuration du serveur graphique.
/etc/X11/xorg.conf
. Si un fichier de configuration se trouve à cet endroit, il faudra le supprimer. La nouvelle nomenclature étant /etc/X11/xorg.conf.d/20-exemple.conf
/etc/X11/xorg.conf.d/20-nvidia-optimus.conf
Section "ServerLayout" Identifier "layout" Screen 0 "nvidia" Inactive "intel" EndSection Section "Device" Identifier "nvidia" Driver "nvidia" BusID "PCI:4:0:0" EndSection Section "Screen" Identifier "nvidia" Device "nvidia" Option "AllowEmptyInitialConfiguration" "Yes" EndSection Section "Device" Identifier "intel" Driver "modesetting" BusID "PCI:0:2:0" Option "AccelMethod" "sna" EndSection Section "Screen" Identifier "intel" Device "intel" EndSection
Pour la carte graphique intégrée :
lspci | grep VGA
Et pour la carte graphique dédiée :
lspci | grep 3D
Par exemple, pour le résultat suivant :
04:00.0 3D controller: NVIDIA Corporation GM108M [GeForce 840M] (rev a2)
04:00.0
deviendra 4:0:0
. De même pour la carte graphique intégrée Intel. Ces modifications sont à apporter au fichier /etc/X11/xorg.conf.d/20-nvidia-optimus.conf
. Une mauvaise configuration des BusID empêchera le serveur graphique d'utiliser la bonne carte graphique pour le rendu de l'écran.
Application de la solution à l'environnement graphique
Afin que l'environnement graphique puisse utiliser l'affichage graphique, il faut que xrandr
s'exécute avant l'environnement graphique.
Startx
Pour les personnes n'utilisant pas de gestionnaires de connexions (tel que LXDM, LightDM, KDM et autres), suivez le wiki dédié à startx.
Une fois que vous aurez copié le fichier de configuration dans votre dossier utilisateur, il faudra éditer ce fameux fichier et rajouter les lignes suivantes à la fin de votre fichier ~/.xinitrc
:
~/.xinitrc
xrandr --setprovideroutputsource modesetting NVIDIA-0 xrandr --auto
Une fois que le fichier sera enregistré, puis fermé, les modifications sont tout de suites appliquées et vous pouvez lancer votre environnement depuis la commande
startx
~/.bash_profile
comme décrit dans le wiki sus-cité afin d'imiter le comportement d'un gestionnaire de connexionsLXDM
Il faut éditer le fichier /etc/lxdm/LoginReady
:
/etc/lxdm/LoginReady
#!/bin/sh # # Note: this is a sample and will not be run as is. xrandr --setprovideroutputsource modesetting NVIDIA-0 xrandr --auto
LightDM
Il suffit de créer le fichier /etc/lightdm/display_setup.sh
:
/etc/lightdm/display_setup.sh
xrandr --setprovideroutputsource modesetting NVIDIA-0 xrandr --auto
Ensuite, on enregistre et on ferme le fichier. Et on le rend exécutable :
chmod +x /etc/lightdm/display_setup.sh
Enfin, on va configurer LightDM pour lui indiquer le chemin du script à exécuter en modifiant la section [SeatDefaults]
du fichier /etc/lightdm/lightdm.conf
ainsi:
/etc/lightdm/lightdm.conf
[SeatDefaults] display-setup-script=/etc/lightdm/display_setup.sh
SDDM
/usr/share/sddm/scripts/Xsetup
xrandr --setprovideroutputsource modesetting NVIDIA-0 xrandr --auto
KDM
/usr/share/config/kdm/Xsetup
xrandr --setprovideroutputsource modesetting NVIDIA-0 xrandr --auto
Vérification
Si votre environnement graphique est ouvert et que vous avez pu vous connecter, alors votre carte graphique a bien été reconnue par le fichier de configuration du serveur graphique.
Pour s'en assurer, on peut lancer un test graphique afin d'afficher les performances ainsi que le modèle de la carte graphique utilisé pour le test de performance. Pour cela, il suffit d'installer le paquet virtualgl et de lancer la commande
glxspheres64
getconf LONG_BIT
Si votre affichage est bien rendu par la carte graphique NVIDIA, vous devriez avoir un résultat de la forme
Polygons in scene: 62464 (61 spheres * 1024 polys/spheres) Visual ID of window: 0x5e Context is Direct OpenGL Renderer: GeForce 840M/PCIe/SSE2 929.699432 frames/sec - 983.361684 Mpixels/sec
Ici, on voit que le rendu OpenGL est réalisé par la carte graphique GeForce. Donc par la carte graphique dédiée.
Résolutions des problèmes
Écran noir au redémarrage de l'ordinateur
Cela peut arriver lorsque les BusID sont mal renseignés. Pour rétablir l'affichage graphique le temps de la résolution du problème, vous pouvez déplacer le fichier dans votre dossier personnel pour avoir de nouveau l'affichage graphique via la carte graphique Intel et pouvoir résoudre le problème. Tapez les touches Alt
et F2
simultanément afin d'ouvrir un nouveau terminal virtuel. Une fois connecté avec vos identifiants, déplacez le fichier de configuration.
mv /etc/X11/xorg.conf.d/20-nvidia-optimus.conf ~/Bureau/
Puis, retournez sur l'affichage graphique en tapant simultanément sur les touches Alt
et F1
. Il ne vous reste plus qu'à vérifiez que les BusID sont les bons puis à déplacer le fichier de nouveau.
mv ~/Bureau/20-nvidia-optimus.conf /etc/X11/xorg.conf.d/
Un redémarrage suffit pour appliquer les modifications.
Écran noir au redémarrage malgré des BusID corrects
La configuration actuelle du fichier /etc/X11/xorg.conf.d/20-nvidia-optimus.conf
peut poser problème depuis la mise à jour du serveur graphique 1.17.1. Il faudra éditer le fichier et modifier la Section "Device"
concernant la carte graphique Intel, de manière à obtenir ceci :
/etc/X11/xorg.conf.d/20-nvidia-optimus.conf
Section "Device" Identifier "intel" Driver "modesetting" BusID "PCI:0:2:0" Option "AccelMethod" "sna" #Option "TearFree" "True" #Option "Tiling" "True" #Option "SwapbuffersWait" "True" EndSection
D'autres options sont désactivées et peuvent, selon les configurations, avoir un impact plus ou moins positif sur les performances. Décommentez les lignes et testez pour essayer d'améliorer la qualité de l'affichage.
Problème de synchronisation verticale
Malheureusement, il se peut que l'écran subisse de légers pics de latence. Cela est dû à un problème de synchronisation verticale mal réglé depuis le pilote. NVIDIA travaille actuellement sur un correctif qui sera appliqué une fois que le problème sera résolu. Voir la discussion sur le forum officiel.