Bumblebee : Optimus sous GNU/Linux
Cette page présente une description du logiciel Bumblebee, dont le but est de supporter la technologie Optimus de NVIDIA sous GNU/Linux. Un topic dédié est également disponible sur le forum, partie Affichage et cartes graphiques.
- Vous voulez désactiver la carte nvidia : utilisez bbswitch ou nouveau directement
- Vous avez des écrans externes (HDMI, DisplayPort) : utilisez nouveau + PRIME
- Vous faites des jeux vidéos : redémarrer le serveur X sur la carte nvidia directement
Présentation
Bumblebee est un projet indépendant géré par plusieurs développeurs réunis dans une équipe nommée Bumblebee Project et dont le but est de supporter la technologie Optimus (le support d'Hybrid SLI est aussi de la partie) sous GNU/Linux, que ce soit sous Ubuntu ou une autre distribution. Le support est néanmoins plus présent pour Ubuntu et ArchLinux que les autres distributions.
C'est la solution conseillée. Bumblebee offre la possibilité d'utiliser la carte graphique NVIDIA lorsque nécessaire (via au choix le pilote propriétaire nvidia ou le pilote libre nouveau, le pilote propriétaire nvidia étant cependant fortement recommandé dans le cas de cette technologie), et d'éteindre celle-ci le reste du temps. D'autres solutions existent, mais celle-ci à l'avantage d'être la plus stable, et a comme propriété non négligeable d'être en partie développée par un membre du forum Ubuntu-fr, ArchangeGabriel, qui pourra vous aider dans le topic dédié.
Installation
- Après l'installation, commencez par redémarrer l'ordinateur pour vérifier qu'aucun problème n'apparaisse et afin que certains composants soient correctement mis à jour.
Une alternative à Bumblebee, nvidia-prime est intégrée dans les dépôts par défaut il faut donc soit installer Bumblebee soit PRIME (conflit si les 2 sont installés).Commentaire sur le Blog Linuxed (en) Tutoriel ici.
Tester Bumblebee
tout ce qui suit ne fonctionne plus sous Bionic et surement pas sous Xenial.
- Ensuite, pour vérifier que tout fonctionne, dans un terminal, entrez ceci :
glxspheres
Si ça ne marche pas, il vous dit "commande introuvable", essayer
glxspheres64
Si cela ne marche toujours pas, voir le chapitre glxspheres et glxspheres64 , commande introuvable.
Une fenêtre apparaît, avec une animation de sphères colorées. Laisser tourner 30s, puis fermez la fenêtre, et notez le résultat. - Puis comparez avec la même chose sur la carte NVIDIA :
optirun glxspheres
- Si ça ne marche pas, essayer
optirun glxspheres64
- Enfin, fermez la fenêtre, et notez le résultat.
Normalement, les résultats devraient être supérieurs avec optirun. Cependant, l'utilisation de VirtualGL limite les performances pour le moment, mais les développeurs travaillent sur ce problème, néanmoins il se peut que dans certaines situations la carte NVIDIA n'offre pas de meilleures performances.
Dans le cas où la commande précédente ne fonctionnerait pas, Installez le paquet bumblebee-nvidia Puis redémarrez et essayez à nouveau.
Installations personnalisées
Minimum :
sudo apt-get install --no-install-recommends bumblebee
Puis ajoutez à cette ligne selon vos besoins :
- bumblebee-nvidia : installation du driver propriétaire nvidia
- virtualgl : VirtualGL comme backend
- virtualgl-libs-ia32 : support 32bit pour VirtualGL sur système 64bit
- primus : primus/primusrun comme backend (virtualgl reste le backend par défaut, il faut utiliser optirun -b primus au lieu d'optirun)
- primus-libs-ia32 : support 32bit pour primus/primusrun sur système 64bit
Utilisation
Pour effectuer le lancement d'une application avec la carte graphique NVIDIA, tapez dans un terminal :
optirun <application>
Par ailleurs, le gestionnaire de configuration nVidia settings est accessible seulement en lançant dans un terminal :
optirun -b none nvidia-settings -c :8
Pour lancer des applications avec primus (il faut l'avoir installé d'abord, cf. ci-dessus) :
optirun -b primus <application>
vous pouvez aussi tester avec (gain de 50% d'FPS sur league of legend)
VGL_READBACK=pbo optirun primus <application>
Pour savoir si votre carte Nvidia est désactivée, utilisez la commande :
optirun --status
qui doit vous repondre :
Bumblebee status: Ready (3.2.1). X inactive. Discrete video card is off.
Si vous trouvez on
c'est que votre carte Nvidia est active.
Questions/Réponses
Comment vérifier que la gestion d'énergie (power-management, à savoir éteindre/allumer la carte nVidia) est bien active ?
- Commencez par débrancher l'alimentation de votre portable pour le faire tourner sur batterie afin de pouvoir relever la valeur de sa consommation.
- Ensuite, après un démarrage sans aucune application tournant, ouvrez un terminal et saisissez ceci :
cat /sys/class/power_supply/BAT0/power_now
(A noter que BAT0 peut être à remplacer par BAT1 sur certains modèles, voir même un autre chiffre)
- Notez le résultat.
- Lancez cette commande:
optirun bash
Il semble a priori ne rien s'être passé, mais en réalité la carte est maintenant allumée.
- Relancez la commande précédente :
cat /sys/class/power_supply/BAT0/power_now
- Notez le résultat. Entrez exit ou faites Ctrl+D pour éteindre de nouveau la carte.
- Comparez les deux résultat, le premier obtenu devrait être amplement inférieur au second.
Si ce n'est pas le cas, vérifiez que votre commande de démarrage noyau (fichier /proc/cmdline) ne contient aucune option du style noacpi, pci=noacpi, acpi=off, … \\Si l'une d'entre elle est présente, supprimez-là en éditant les fichiers de configuration de GRUB, n'oubliez pas de mettre à jour celui-ci avec la commandeupdate-grub
- Redémarrez et refaites la procédure de test.
Ces options sont parfois présentes pour palier à certains problèmes, qui sont normalement tous corrigés par Bumblebee sur ce genre de machines.
Un autre moyen de vérifier la consommation est d'utiliser l'outil powerstat
Ne peut-on pas utiliser exclusivement la carte NVIDIA, et éteindre la carte Intel ?
Cela dépend des modèles, mais pour la plupart, c'est matériellement impossible. La carte NVIDIA et la carte Intel sont matériellement connectées entre elles, et seule la carte Intel est connectée à l'écran. Donc l'affichage passe forcément par la carte Intel, il n'est donc pas possible de la désactiver. Au mieux, il sera possible dans un futur lointain de tout faire tourner sur la carte NVIDIA et de n'utiliser la carte Intel que pour l'affichage à l'écran.
Cependant certaines cartes mères gérent la désactivation des composants matériels video et son depuis le Bios ( carte Gigabyte sous Peripherals/Internal Graphics –> Disable ) et certains modèles (Lenovo notamment) offrent cette possibilité.
J'en n'ai rien à faire de l'autonomie. Puis-je faire en sorte que mon système tourne entièrement sur la carte NVIDIA ?
Reportez-vous à ce tutoriel.
Pourrait-on avoir un indicateur visuel pour savoir si la carte NVIDIA est allumée ou pas, et quel sont les programmes qui tournent dessus?
Un projet, aujourd'hui abandonné, visait à fournir cette fonctionnalité entre autres choses. Il s'agissait de bumblebee-ui. Une première vidéo de démonstration est disponible. On aura sûrement un outil similaire pour PRIME. Si vous utilisez Kubuntu ou autre distribution utilisant KDE, voir Plasma Bumblebee Indicator
Le système indique que le pilote nvidia est installé mais pas activé.
C'est normal, car c'est la réalité. Bumblebee utilise le pilote nvidia et l'a donc installé. Cependant, ce driver n'est chargé que lorsqu'il est utilisé, c'est-à-dire lorsque optirun tourne, car ce n'est pas lui qui est responsable de l'affichage. Rien d'alarmant donc.
Je n'arrive pas à accéder au Panneau de Configuration NVIDIA (nvidia-settings) (ou il me dit que je n'utilise pas la carte NVIDIA). Que faire ?
Tout d'abord, si on vous conseille d'utiliser nvidia-xconfig, ne le faites pas !
En fait, le Panneau de Configuration NVIDIA ne détecte votre carte que si le fichier xorg.conf utilisé est celui de celle-ci et que de plus le serveur X.org sur lequel le Panneau tourne est géré par cette carte. Ces conditions font qu'il n'est pas possible d'utiliser le Panneau de Configuration NVIDIA tel quel pour le moment, nous réfléchissons aux différentes options qui s'offrent à nous pour contourner ce problème.
Voir à la section "Utilisation" ci-dessus, comment lancer nvidia-settings.
J'ai ce message d'erreur "(EE) Failed to load module "kbd" (module does not exist, 0)" qui apparaît à certains endroit, est-ce grave ?
Non pas du tout, ce devrait plutôt être un "Warning" (Avertissement) qu'une "Error" (Erreur), mais ça ne pose en aucun cas de problèmes.
Je n'arrive pas à utiliser mon port DVI et/ou HDMI. Est-ce lié à Optimus ?
Très certainement. A moins qu'il ne s'agisse d'un problème simple dont les solutions existent déjà, votre port HDMI est probablement relié à la carte nVidia. Nous avons beaucoup de travaux à faire de ce point de vue là, car pour le moment, il est quasiment impossible d'utiliser un tel port HDMI sous Linux.
Guide de dépannage
Vous rencontrez un problème, un message d'erreur, et vous ne savez pas quoi faire ? Commencer par comparer votre problème avec ceux décrits ici (chaque problème comporte plusieurs cas qui sont tous réglés par la solution proposée a priori, vous n'avez pas nécessairement tous les symptômes), et vous trouverez peut-être le (ou les) votre et sa (leur) solution(s).
Votre PC possède-t-il bien Optimus ou un équivalent NVIDIA ?
C'est la première chose à vérifier, lire la page de la doc sur Optimus pour le vérifier.
Utilisez vous bien la dernière version de Bumblebee ?
Il est important d'avoir la dernière version disponible, de nombreux problèmes sont corrigés au fur et à mesure de leur découverte. Vérifiez donc qu'il n'y a pas de mises à jour disponibles avec le gestionnaire idoine.
Au 26/04/2013, les paquets de Bumblebee Project en sont aux versions suivantes (distro est à remplacer par le nom de version de votre système, e.g. oneiric) :
- bumblebee : 3.2.1-1~distroppa1
- bbswitch : 0.6-1~distroppa2
- primus : 20130426-1~distroppa1
- virtualgl : 2.3.1-2~distroppa2
Votre pilote nvidia est-il suffisamment récent ?
Il est conseillé d'utiliser la dernière version stable du pilote nvidia (331 au 04/03/2014), cf. la partie correspondante du guide d'installation.
Les headers du noyau sont-ils bien installés ?
Un problème très fréquent sous Quantal est que les headers ne sont pas installés sur le système, empêchant la compilation du pilote nvidia ainsi que de bbswitch. Le message d'erreur correspondant est généralement celui-ci :
[ERROR]The Bumblebee daemon has not been started yet or the socket path /var/run/bumblebee.socket was incorrect. [ERROR]Could not connect to bumblebee daemon - is it running?
La solution est la suivante (remplacer nvidia-current par la version que vous utilisez) :
sudo apt-get purge bbswitch-dkms nvidia-current sudo apt-get install linux-headers-generic sudo apt-get install --reinstall nvidia-current bbswitch-dkms bumblebee
Impossible d'obtenir la résolution d'affichage correcte pour mon écran, les effets 3D ne fonctionnent pas, je suis redirigé vers Unity 2D ou Gnome Classic au lieu d'Unity 3D ou Gnome Shell
Vérifiez s'il existe un fichier xorg.conf dans le dossier /etc/X11. Si oui, il force très probablement l'utilisation de la carte nVidia ce qui est alors fort certainement à l'origine du problème, donc supprimez-le :
sudo rm /etc/X11/xorg.conf
Puis redémarrez.
Si ce n'est pas le cas (i.e. le fichier n'existe pas) où que le problème persiste, regardez le problème suivant.
Les effets 3D ne fonctionnent pas, je suis redirigé vers Unity 2D ou Gnome Classic au lieu d'Unity 3D ou Gnome Shell, j'ai les messages d'erreurs suivants :
Xlib: extension "GLX" missing on display ":0"
Error: couldn't find RGB GLX visual or fbconfig
ERROR(596): Could not obtain RGB visual with requested properties
Ce problème vient d'une mauvaise installation du pilote nvidia qui a supplanté les librairies graphiques de la cartes Intel. Pour le corriger, ouvrez un terminal et entrez ceci :
sudo apt-get install --reinstall libgl1-mesa-glx bumblebee-nvidia
Redémarrez.
J'ai le message d'erreur suivant :
[ERROR]Cannot access secondary GPU - error: [XORG] (EE) [drm] failed to open device
Premièrement, commencez par vérifier que le pilote nouveau n'est pas charge en mémoire :
lsmod | grep nouveau
S'il n'y a pas de retour, tout va bien. Sinon, effectuez ceci:
sudo rmmod nouveau
Ensuite, vérifiez que le pilote nvidia est bien construit dans le noyau en mémoire :
sudo modprobe nvidia-current
Si vous obtenez ce message d'erreur :
FATAL: Module nvidia_current not found.
Effectuez ceci :
sudo apt-get install --reinstall nvidia-current
Redémarrez et vérifiez si cela a résolu votre problème.
Sinon, essayez de modifier l'option "Driver" dans /etc/bumblebee/bumblebee.conf en remplaçant "Driver=" par "Driver=nvidia", redémarrer et vérifier si cela a résolu le problème.
J'ai l'un des messages d'erreurs suivant :
ERROR: ld.so: object 'librrfaker.so' from LD_PRELOAD cannot be preloaded: ignored.
ERROR: ld.so: object 'libdlfaker.so' from LD_PRELOAD cannot be preloaded: ignored.
Si vous êtes sur une version 64bits, commencez par vérifier que le paquet virtualgl-libs:i386 est bien installé. Si ce n'est pas le cas, installez-le et regardez si votre problème est réglé.
Si c'est le cas (paquet installé) ou que votre problème n'est pas réglé, vous êtes dans l'un des cas de figures suivants, et il n'existe aucune solution envisageable actuellement :
- le programme que vous essayez de lancer est un programme lié statiquement à la compilation (absolument aucune solution possible)
- le programme que vous essayez de lancer est un programme setuid ou setgid (exemple : chrome, le navigateur de Google), il existe une méthode décrite dans la documentation de VirtualGL, mais celle-ci est fortement déconseillée.
J'ai l'un des messages d'erreurs suivant :
[ERROR]Cannot access secondary GPU - error: [XORG] (EE) NVIDIA(0): Failed to initialize the NVIDIA GPU at PCI:1:0:0. Please [ERROR]Aborting because fallback start is disabled.
- Éditer avec les droits d'administrateur le fichier /etc/default/grub et ajouter
rcutree.rcu_idle_gp_delay=1
à la ligne
GRUB_CMDLINE_LINUX_DEFAULT=
Exemple :
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"
devient
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash rcutree.rcu_idle_gp_delay=1"
Mon application ne se lance pas à travers optirun, j'obtiens le message d'erreur suivant :
[VGL] ERROR: Could not open display :8
Certains programmes lancent des processus fils qui ne sont alors pas récupérés pas optirun. C'est un problème sur lequel nous travaillons, une solution temporaire qui peut faire l'affaire dans de nombreux cas est de réaliser la manipulation suivante.
Ouvrez un terminal, et lancez ceci :
optirun bash
Une nouvelle interface de terminal tournant sur la carte nVidia est alors disponible, vous pouvez lancer votre programme (sans optirun) via celle-ci.
optirun attend indéfiniment.
Vérifiez les fichiers /var/log/Xorg.8.log et /var/log/kern.log. Si le premier se termine par :
(EE) NVIDIA(GPU-0): WAIT: (E, 0, 0x857d)
Et/ou que le second contient ces lignes :
NVRM: Xid (0000:01:00): 16, Head 00000000 Count 00000000 NVRM: Xid (0000:01:00): 16, Head 00000000 Count 00000001 NVRM: Xid (0000:01:00): 16, Head 00000000 Count 00000002 NVRM: Xid (0000:01:00): 16, Head 00000000 Count 00000003 NVRM: Xid (0000:01:00): 16, Head 00000000 Count 00000004 NVRM: Xid (0000:01:00): 16, Head 00000000 Count 00000005 NVRM: Xid (0000:01:00): 16, Head 00000000 Count 00000006 NVRM: Xid (0000:01:00): 16, Head 00000000 Count 00000007
Il peut s'agir d'un bug présent dans le noyau Linux avec la fonction de virtualisation des processeurs Intel. La solution est d'ajouter "intel_iommu=off" à la ligne de démarrage. Ou alors d'une incompatibilité du driver nvidia (rare).
Bumblebee ne se lance pas sous Linux Mint
Il faut modifier le fichier init de bumblebeed :
sudo gedit /etc/init/bumblebeed.conf
Rechercher les lignes suivantes :
start on (login-session-start or desktop-session-start) stop on (desktop-shutdown)
Et les remplacer par :
start on runlevel [2345] stop on runlevel [016]
Sauvegarder puis redémarrer.
glxspheres et glxspheres64 , commande introuvable
Sous Ubuntu Trusty 14.04 (et au moins dans sa version Gnome Shell Remix), il est possible qu'un certain nombre de paquets nécessaires au fonctionnement de bumblebee ne soit pas présents par défaut dans les dépots officiels (bien que les paquets principaux bumblebee et bumblebee-nvidia le soit). Dans ce cas, les différentes commandes de tests "glxspheres" ou "glxspheres64" renvoient l'erreur "commande introuvable" bien que vous ayez suivi entièrement la procédure décrite plus haut pour Ubuntu 14.04.
Dans ce cas, l'ajout du PPA:Bumblebee est nécessaire:
Dans un terminal, saisir les commandes suivantes :
- D'abord, Ajoutez à vos sources de logiciels le PPA suivant ppa:bumblebee/stable 1)
sudo apt-add-repository ppa:bumblebee/stable
- recharger la liste des paquets:
sudo apt update
- Et mettez à jour :
sudo apt upgrade
You've no permission to communicate with the Bumblebee daemon
Si vous obtenez le message :
$ optirun -b none nvidia-settings -c :8 [ 1313.538315] [ERROR]You've no permission to communicate with the Bumblebee daemon. Try adding yourself to the 'bumblebee' group [ 1313.538347] [ERROR]Could not connect to bumblebee daemon - is it running?
Exécuter la commande et redémarrer
sudo gpasswd -a user(à remplacer) bumblebee
Cannot access secondary GPU - error
$ optirun -b none nvidia-settings -c :8 [ 1710.110775] [ERROR]Cannot access secondary GPU - error: [XORG] (EE) Failed to load module "nvidia" (module does not exist, 0) [ 1710.110829] [ERROR]Aborting because fallback start is disabled.
Vous pouvez maintenant suivre la procédure d'installation et de test décrite plus haut pour Ubuntu 14.04.