NVidia Optimus Bumblebee

De Le Wiki de debian-fr.xyz
Aller à : navigation, rechercher

Nvidia Optimus & Bumblebee

Sommaire


 ATTENTION : Ce tutoriel est plutôt à l'intention d'utilisateurs avancés de Debian - et, traite plus particulièrement de l'installation du projet Bumblebee pour sa gestion avec le pilote "privatif" nvidia. Merci d'en tenir compte ...
Si vous avez besoin d'un tutoriel décrivant étape par étape, préférez la lecture de ce tutoriel !


Présentation

Nvidia a créé une technologie hybride, appelée Optimus. Cette technologie a pour but d'utiliser la puce graphique intégrée, généralement de marque Intel, ainsi que le processeur graphique, couplée à la première puce, de marque Nvidia. Cela permet de faire fonctionner le GPU Nvidia, à la demande, lors de nécessités de fonctions 3D poussées (vidéos, jeux ...), et de "rendre la main" à l'IGP Intel, soulageant ainsi la batterie, pour le reste.

Un développeur a créé un projet, nommé Bumblebee, qui nous apporte une certaine gestion de cette technologie. Elle n'est pas complètement gérée, mais est fonctionnelle ! Néanmoins, la gestion HDMI n'est pas accessible ...

La page du projet : http://www.bumblebee-project.org/

Le dépôt git : https://github.com/Bumblebee-Project/Bumblebee

Informations

 ATTENTION : NE SURTOUT PAS CHERCHER À INSTALLER LES PILOTES NVIDIA PAR TOUTE AUTRE MÉTHODE !!!
Si jamais vous l'avez fait, désinstallez tout avant :
# apt remove --purge nvidia-*


 NOTE : Nativement sous Linux, cette technologie n'est pas pleinement supportée.
Officiellement, depuis la version 319.12, Nvidia apporte son support, en phase bêta - cela nécessite de pouvoir connecter l'écran au GPU Nvidia ; cette option est modifiable par certains BIOS récents.
Si votre pilote est plus ancien, ou que vous n'êtes pas dans ce cas de configuration matérielle, cette page wiki est vraiment faite pour vous !


 ATTENTION : Ne pas utiliser le pilote Nvidia 340 ... la technologie Optimus n'est pas gérée, pour Linux - oubli/erreur du fabriquant ! - C'est la version par défaut pour Jessie !!!


Vérification

Vérification matérielle

Si vous voulez être sûr d'avoir une telle technologie, entrez la commande suivante dans votre terminal préféré :


$ lspci | egrep "VGA|3D|Display"


Si le système vous répond, ainsi, avec deux lignes, c'est donc bien votre cas !
Tel que :


$ lspci | egrep "VGA|3D|Display"
00:02.0 VGA compatible controller: Intel Corporation 2nd Generation Core Processor Family Integrated Graphics Controller (rev 09)
01:00.0 VGA compatible controller: NVIDIA Corporation GF108 [GeForce GT 540M] (rev ff)


À ce propos, la première information '01:00.0' est relative à l'option BusID, dans le contexte restitué par la commande !
Elle peut-être différente selon votre configuration matérielle ...

Vérification modules kernel

Ensuite, vérifiez que vous n'avez aucun des deux modules suivants installés et/ou chargés - si c'est le cas, il faudra les décharger !


$ lsmod | egrep -i "nouveau|vga_switcheroo"


Pour les décharger, un coup de 'modprobe -r' adéquat, tel que :


# modprobe -r nouveau
modprobe -r vga_switcheroo


 ATTENTION : Il est possible que vous ayez le message d'erreur suivant 'modprobe:FATAL:Module nouveau in use' lorsque vous cherchez à décharger le pilote ... veuillez lire le chapitre 'Erreurs', ci-dessous, en fin de page, à la section sus-nommée ... sans trop vous en soucier, non plus !


Pré-requis

Vérifier que vous avez bien les binaires, ci-dessous, installés :

  • Pour architecture 32bits :

# apt install gcc make linux-headers-i586 dkms bbswitch-dkms

  • Pour architecture 32bits (Stretch Backports) :

# apt install -t stretch-backports gcc make linux-headers-i686 dkms bbswitch-dkms

  • Pour architecture 64bits :

# apt install gcc make linux-headers-amd64 dkms bbswitch-dkms


Puis, assurez-vous que le module 'bbswitch' fonctionne bien :


# modprobe bbswitch load_state=0


Ultimes vérifications

 ATTENTION : Vérifiez que vous n'avez pas de fichier de configuration /etc/X11/xorg.conf, ni de répertoire /etc/X11/xorg.conf.d/ - si c'est le cas, supprimez-le avec vos droits administrateur !


Installation

Par dépôt

La page wiki du projet Debian nous informe que les utilisateurs de Jessie, et Sid peuvent installer Bumblebee à partir des dépôts officiels Debian.

Depuis le 26.05.2013, cela semble aussi le cas pour les utilisateurs des dépôts Wheezy-Backports !


 NOTE : Il est aussi nécessaire de s'assurer d'avoir paramétré les dépôts 'contrib' et 'non-free'.


Donc, passez à la phase d'installation puis de configuration.

Ajout support architecture 32 bits

 NOTE : Architecture 64 bits : Pensez à ajouter la gestion de l'architecture i386, et installez en plus le package primus-libs-ia32 - anciennement primus-libs:i386 - si vous voulez faire fonctionner un binaire 32 bits.


Choisir le pilote nouveau ou nvidia

 INFORMATION : Ne cherchez pas à utiliser le pilote libre 'nouveau' si votre carte graphique de fabriquant nvidia n'est pas supportée par celui-ci.
Pour savoir, si elle est supportée, lisez la page du "code name" fournie par le projet nouveau, et recherchez la mention correspondante à votre GPU. Puis selon le "code name" correspondant, lisez cette page pour connaître le support ou non de votre carte vidéo.
Si votre carte graphique n'est pas supportée, utilisez directement le projet Bumblebee avec le pilote privatif !


Pour récapituler :

  • l'architecture matérielle NV110, nommée Maxwell, est supportée à partir de la version du serveur X : "xf86-video-nouveau-1.0.14"
  • l'architecture matérielle NV130, nommée Pascal, est supportée à partir de la version du serveur X : "xf86-video-nouveau-1.0.15"

Sous Stretch, la version supportée du serveur X est la : 1.0.13

De fait, les cartes de famille Maxwell, ou Pascal, n'ont pas le support du pilote libre pour Stretch. De même, si votre carte graphique n'est pas supportée, utilisez directement le projet Bumblebee avec le pilote privatif !

Installez !

Mettez-à-jour votre système, et installez les binaires :

  • bumblebee - rien que pour l'usage du pilote libre 'nouveau',
  • ou bumblebee-nvidia - pour l'usage du pilote privatif Nvidia.

Pour le pilote 'nouveau' :

# apt update && apt install bumblebee mesa-utils


Pour le pilote nvidia :

# apt update && apt install bumblebee-nvidia primus nvidia-kernel-dkms nvidia-xconfig nvidia-settings nvidia-vdpau-driver vdpau-va-driver mesa-utils xserver-xorg-video-nvidia linux-headers-$(uname -r)


Préférez la version des backports si elle est disponible - CE N'EST PAS LE CAS ACTUELLEMENT :

# apt update && apt install -t stretch-backports bumblebee-nvidia primus nvidia-kernel-dkms nvidia-xconfig nvidia-settings nvidia-vdpau-driver vdpau-va-driver mesa-utils xserver-xorg-video-nvidia linux-headers-$(uname -r)


 ATTENTION : Depuis Janvier 2014, lors de l'installation du package 'bumblebee-nvidia', il est possible que vous ayez droit à un fenêtre d'avertissement vous demandant de créer le fichier xorg.conf -

  • NE LE FAITES PAS !
  • NE LAISSEZ PAS l'outil debconf créer le fichier pour vous !
  • N'EXÉCUTEZ PAS l'outil nvidia-xconfig !
  • - Bogue 735049 qui semble être résolu depuis octobre 2015 !


 INFORMATION : Il semble nécessaire d'installer le binaire VirtualGL, requis par Optirun ; malheureusement il n'est pas dans les dépôts Debian.
Téléchargez-le à partir de la page de téléchargement du projet ... ne téléchargez pas l'archive .tar.gz ; cliquez sur le répertoire portant le nom de la dernière version en cours, puis vous trouverez parmi les différents fichiers un fichier portant le nom suivant virtualgl_num-version_arch.deb (où 'num-version' est le numéro de version en cours, et 'arch' est à choisir selon votre architecture ...) ...
puis installez-le à l'aide de l'outil 'dpkg' ...
- Source


Configurez !

Avec les droits administrateur, il vous faut ensuite ajouter votre utilisateur au groupe bumblebee :


# adduser ID_USER bumblebee


 NOTE : Redémarrer votre ordinateur ;-)


Utilisation

Vous pouvez être sûr que Bumblebee fonctionne grâce au binaire optirun.
Donc, pour activer la gestion du GPU Nvidia, il faut faire précéder toute commande par l'usage de la commande 'optirun'.


$ optirun [optirun-options] <application> [application-parameters]


Pour trouver la liste des options de optirun, vous pouvez, soit lire la page du manuel avec la commande man optirun, soit exécuter :


$ optirun --help


Test

Le premier test que vous pouvez faire est :


$ optirun glxgears -info


Panel Nvidia

Ne cherchez pas à l'utiliser en cliquant sur l'icône correspondante, dans votre menu, cela ne fonctionnera pas.
Il vous faut le lancer ainsi - c'est le seul moyen ! - :


$ optirun nvidia-settings -c :8


Redémarrer le service blumbebee

Selon votre version de debian :

  • Soit : /etc/init.d/bumblebeed restart
  • Soit : service bumblebeed restart
  • Soit : systemctl restart bumblebeed

Configurations supplémentaires

 NOTE : Les configurations ci-dessous ne sont normalement pas nécessaires !
Ces informations sont utiles au cas où se pose un souci relatif.


Utilisation du pilote Nvidia

Il peut être utile d'informer Bumblebee d'utiliser le module 'nvidia', au lieu du module 'nouveau'. Par défaut, il utilise le pilote 'nouveau'.
Avec les droits administrateur, il faut d'abord modifier le fichier /etc/bumblebee/bumblebee.conf pour configurer la ligne 'DRIVER='

DRIVER=nvidia


 NOTE : Si 'nvidia' ne fonctionne pas, changez pour 'nvidia-current'.


Redémarrer le service 'bumblebee' !

=> Cela peut être intéressant de "blacklister" le module nouveau, si et seulement si, vous voulez n'utiliser que le pilote privatif Nvidia -
afin d'être sûr que ce ne sera pas ce module qui gérera la carte Nvidia, mais bien le pilote Nvidia !

Créez, avec vos droits administrateur, le fichier /etc/modprobe.d/nouveau-blacklist.conf, et ajoutez ces écritures :

 blacklist nouveau
 blacklist lbm-nouveau
 options nouveau modeset=0
 alias nouveau off
 alias lbm-nouveau off

À chaque nouveau kernel

Pensez à faire courir à nouveau le module pour votre kernel, avec vos droits administrateur !
(si le système ne s'en occupe pas tout seul comme un grand :p )

par dkms

# dpkg-reconfigure nvidia-kernel-dkms


Gestion de la batterie

Pour gérer correctement l'énergie de la batterie lors de l'usage de la carte Nvidia, il peut être nécessaire de créer le fichier /etc/modprobe.d/bbswitch.conf et d'y ajouter ceci - normalement le projet Bumblebee installe le paquet bbswitch et le gère correctement -  :

 options bbswitch load_state=0 unload_state=0

Ensuite, il vous faut modifier le fichier /etc/bumblebee/bumblebee.conf et configurer les lignes 'PMMethod' ainsi :

 PMMethod=bbswitch

Pensez à redémarrer le service bumblebee !


Pour tester le fonctionnement, vous pouvez procéder ainsi en mode terminal :


$ cat /proc/acpi/bbswitch
0000:01:00.0 OFF


=> Lancement d'optirun :


$ optirun glxgears > /dev/null &
[1] 4785


=> Vérification de bbswitch


$ cat /proc/acpi/bbswitch
0000:01:00.0 ON


=> Arrêt d'optirun


$ [VGL] ERROR: in readback--
[VGL] 246: Window has been deleted by window manager

[1]+ Termine 1 optirun glxgears > /dev/null


=> Après avoir fermé la fenêtre de glxgears


$ cat /proc/acpi/bbswitch
0000:01:00.0 OFF


Gestion de Steam

=> Ajoutez la variable d'environnement OPTIMUS_PREFIX


# sh -c 'echo OPTIMUS_PREFIX=\"primusrun\" >> /etc/environment'


Déloguez-vous de votre session pour vous reconnectez !

=> Puis, pour chaque jeu, dont vous voulez profiter d'optirun, il faut modifiez les propriétés de lancement de celui-ci.

Exécutez Steam, allez dans votre librairie de jeux, sélectionnez le jeu en question, puis faites un clic droit dessus, et choisissez le menu "Properties". Ensuite, cliquez sur le bouton [SET LAUNCH OPTIONS] et spécifiez dans le champ l'information qui suit : $OPTIMUS_PREFIX %command%

Erreurs

Voici les messages d'erreurs que vous pourriez avoir lors du lancement d'optirun :


 NOTE : Après avoir appliqué la correction, pensez à redémarrer le service Bumblebee !


libGL.so.1

Lorsque vous exécutez optirun ou primus, vous avez le retour d'erreur suivant :


$ primus: fatal: failed to load any of the libraries: /usr/lib/x86_64-linux-gnu/nvidia/libGL.so.1:/usr/lib/i386-linux-gnu/nvidia/libGL.so.1:/usr/lib/nvidia/libGL.so.1
/usr/lib/x86_64-linux-gnu/nvidia/libGL.so.1: cannot open shared object file: No such file or directory
/usr/lib/i386-linux-gnu/nvidia/libGL.so.1: cannot open shared object file: No such file or directory
/usr/lib/nvidia/libGL.so.1: cannot open shared object file: No such file or directory


$ primus: fatal: failed to load any of the libraries: /usr/lib/x86_64-linux-gnu/ nvidia/libGL.so.1:/usr/lib/i386-linux-gnu/nvidia/libGL.so.1:/usr/lib/nvidia/libGL.so.1
/usr/lib/x86_64-linux-gnu/nvidia/libGL.so.1: wrong ELF class: ELFCLASS64
/usr/lib/i386-linux-gnu/nvidia/libGL.so.1: cannot open shared object file: No such file or directory
/usr/lib/nvidia/libGL.so.1: cannot open shared object file: No such file or directory


Un bogue #867033 est ouvert... sachez que c'est galère à corriger, parce que même en installant les packages ci-dessous, vous ne serez pas sûr de résoudre le problème.

Dans un premier temps, vérifiez que vous avez bien installé le package primus-libs-ia32.

Ensuite, essayez l'installation des packages suivants : libgl1-nvidia-glx libgl1-nvidia-glx:i386 nvidia-driver-libs nvidia-driver-libs-i386

libturbojpeg.so

 error while loading shared libraries: libturbojpeg.so: cannot open shared object file: No such file or directory

Si votre architecture est 32 bits, tapez dans votre terminal console préféré, cette commande avec les droits administrateur :


# ln -s /usr/lib/i386-linux-gnu/libturbojpeg.so.0 /usr/lib/i386-linux-gnu/libturbojpeg.so


Si votre architecture est 64 bits, tapez cette commande-ci, toujours avec les droits administrateur :


# ln -s /usr/lib/x86_64-linux-gnu/libturbojpeg.so.0 /usr/lib/x86_64-linux-gnu/libturbojpeg.so


[ERROR]Cannot access secondary GPU - error: Could not load GPU driver

 NOTE : Cette erreur peut-être générée par un des différents points suivants … veuillez les vérifier un par un, pas tous en même temps, cela ne sert à rien. Une fois qu'un point est vérifié/corrigé, redémarrez le service 'Bumblebee' et essayez à nouveau votre commande.
Si cela ne fonctionne pas, passez au point suivant qui peut aider à la résolution, et répétez le même processus de vérification/modification puis redémarrage du service adéquat - bien comprendre et accepter que cela ne réglera pas forcément votre problème !


Modification de "Driver"

Ouvrez le fichier '/etc/bumblebee/bumblebee.conf', avec les droits administrateur, et modifiez la ligne 'Driver=' par 'Driver=nvidia'.

Modification de "KernelDriver"

Ouvrez le fichier '/etc/bumblebee/bumblebee.conf', avec les droits administrateur, et dans la section '[Driver-nvidia]', vérifiez la ligne 'KernelDriver=' qu'elle soit bien 'KernelDriver=nvidia-current'.

Pour vérifier le nom du module nvidia, exécutez les deux commandes suivantes :


# modinfo nvidia
modinfo nvidia-current


Normalement vous devriez avoir ces retours :


# modinfo nvidia
modinfo: ERROR: Module nvidia not found.


# modinfo nvidia-current
filename: /lib/modules/3.16.0-4-amd64/updates/dkms/nvidia-current.ko
alias: char-major-195-*
version: 340.96
supported: external
license: NVIDIA
(...)


Si jamais, vous avez un résultat sur 'modinfo nvidia', modifiez la ligne 'KernelDriver=' ainsi 'KernelDriver=nvidia' <= ce qui ne devrait pas avoir lieu.

Si aucune des deux commandes ne retourne rien, vous avez eu un souci lors de l'installation <= ce n'est pas normal ; cherchez la raison !

Bogue 717687

[ERROR]Cannot access secondary GPU - error: [XORG] (EE) /dev/dri/card0: failed to set DRM interface version 1.4: Permission denied

 NOTE : Cette erreur peut-être générée par un des différents points suivants … veuillez les vérifier un par un, pas tous en même temps, cela ne sert à rien. Une fois qu'un point est vérifié/corrigé, redémarrez le service 'Bumblebee' et essayez à nouveau votre commande.
Si cela ne fonctionne pas, passez au point suivant qui peut aider à la résolution, et répétez le même processus de vérification/modification puis redémarrage du service adéquat - bien comprendre et accepter que cela ne réglera pas forcément votre problème !


Vérification xserver-xorg-video-nvidia

  • Vérifiez l'installation du paquet "xserver-xorg-video-nvidia" - s'il n'est pas installé, faites-le !

Modification fichier xorg.conf.nvidia

  • Ouvrez le fichier /etc/bumblebee/xorg.conf.nvidia, et ajoutez les informations suivantes :
 Section "Screen"
   Identifier "Default Screen"
   Device "DiscreteNvidia"
 EndSection

Bogue 756522 qui touche Debian Jessie, à-propos des Bumblebee versions : 3.2.1-5, 3.2.1-7 et nvidia versions : 340.*,

Vérification prise en charge par nouveau

  • Si vous avez installé Bumblebee pour fonctionner avec le pilote libre 'nouveau', vérifiez le support de votre GPU nvidia par le pilote.
  • Si votre version de GPU est bien prise en charge par le pilote 'nouveau', vérifiez l'écriture de l'identifiant de Bus PCI, tel que ci-dessous.
  • s'il n'est pas pris-en-charge, installez la version "Bumblebee+nvidia".

Erreur Identifiant BusPCI

  • Profitez-en pour vérifier l'écriture de l'identifiant du Bus PCI relatif à votre carte graphique Nvidia.


 ATTENTION : L'identifiant de Bus PCI doit bien être écrit ainsi : BusID "PCI:01:00:0" - et non pas BusID "PCI:01:00.0"


  • Parfois il peut être nécessaire de mettre en commentaire l'identifiant de Bus PCI, pour que cela puisse fonctionner correctement ... ce qui normalement est le cas d'une installation par défaut !

Incompatibilité Xorg >= 1.18

  • Si le serveur X est >= 1.18 et que votre Debian est une Testing, ou une Sid, il semble exister une incompatibilité entre le projet Bumblebee et le paquet xserver-xorg-legacy, donc virez ce dernier, s'il est installé !

Source

[ERROR]Cannot access secondary GPU - error: [XORG] (EE) Failed to load module "mouse" (module does not exist, 0)

 NOTE : Cette erreur peut-être générée par un des différents points suivants ... veuillez les vérifier un par un, pas tous en même temps, cela ne sert à rien//. Une fois qu'un point est vérifié/corrigé, [#redemarrer-le-service-bumblebeed redémarrez le service Bumblebee] et essayez à nouveau votre commande.

Si cela ne fonctionne pas, passez au point suivant qui peut aider à la résolution, et répétez le même processus de vérification/modification puis redémarrage du service adéquat - bien comprendre et accepter que cela ne réglera pas forcément votre problème !


Vérifier xserver-xorg-input-mouse

Vérifiez l'installation du paquet xserver-xorg-input-mouse, si ce n'est pas le cas, faites-le !

Vérifier le fichier xorg.conf.nvidia

Vérifiez le fichier /etc/bumblebee/xorg.conf.nvidia.

Vérifier votre identifiant PCI

Vérifiez que votre identifiant de Bus PCI soit correctement écrit !

[ERROR]Cannot access secondary GPU - error: [XORG] (EE) No devices detected

  • Ouvrez le fichier /etc/bumblebee/xorg.conf.nvidia, et modifiez l'option BusID. Vous trouverez cette information par l'usage de la commande 'lsusb' ... voir le chapitre Vérification !

[ERROR]Cannot access secondary GPU - error: [XORG] (EE) Problem parsing the config file

  • Vérifiez le fichier de configuration que vous venez de modifier !!!

Que ce soit /etc/bumblebee/xorg.config.nvidia ou /etc/bumblebee/xorg.config.nouveau, vous avez créé/modifié une section, et oublié/supprimé par erreur, de fermer correctement la section, voire une section est mal écrite !

fallen off the bus

 NOTE : Cette erreur peut-être générée par un des différents points suivants … veuillez les vérifier un par un, pas tous en même temps, cela ne sert à rien. Une fois qu'un point est vérifié/corrigé, redémarrez le service 'Bumblebee' et essayez à nouveau votre commande.
Si cela ne fonctionne pas, passez au point suivant qui peut aider à la résolution, et répétez le même processus de vérification/modification puis redémarrage du service adéquat - bien comprendre et accepter que cela ne réglera pas forcément votre problème !


Vérifiez la sortie dmesg :

  • Si dmesg vous informe du souci GPU suivant 'fallen off the bus', il y a deux manières de régler le problème :

Test "rcu_idle_gp_delay <<<1"

=> Testez la commande suivante, avant le lancement d'optirun :

# tee /sys/module/rcutree/parameters/rcu_idle_gp_delay <<<1


Si cela fonctionne en effet correctement, modifiez le fichier /etc/default/grub pour ajouter l'information suivante à la ligne de commande GRUB_CMDLINE_LINUX_DEFAULT : rcutree.rcu_idle_gp_delay=1.

Mettez-à-jour votre grub et redémarrez votre ordinateur ...


# update-grub
shutdown -r now


Incompatibilité kernels (3.10 à 3.19)

=> L'autre solution est de vérifier votre version de kernel linux - en effet ce problème concerne les noyaux versions 3.10 à 3.19 !
Soit vous choisissez un noyau antérieur, soit vous upgradez sur un noyau plus récent !


 NOTE : Il semble que ce soit surtout un bogue Nvidia ... cf Bumblebee issue 445


modprobe:FATAL:Module nouveau in use

Lors de l'installation, au tout début, il vous est dit de décharger le module nouveau. Si le système vous répond l'erreur suivante : 'modprobe:FATAL:Module nouveau in use', il est intéressant de le désactiver lors du démarrage du noyau.

Ne vous inquiétez pas trop de ce message d'erreur, mais plutôt paramétrez le fichier de configuration de grub '/etc/default/grub' afin de rajouter les paramètres noyau suivants 'nouveau.modeset=0' et 'modprobe.blacklist=nouveau' dans la ligne de configuration relative à 'GRUB_CMDLINE_LINUX_DEFAULT', telle que, par exemple :

 GRUB_CMDLINE_LINUX_DEFAULT="quiet nouveau.modeset=0 modprobe.blacklist=nouveau"

Mettez-à-jour votre grub ... et redémarrez votre station. source

Documentation alternative

Vous pouvez retrouver un complément d'informations sur la page wiki du projet Debian...

Édition du 4/mai/2015 : Corrections apportées grâce à ce tutoriel anglais ...