Cartes Optimus : Installer Bumblebee sous Calculate Linux ou Gentoo



Introduction




Présentation



Une carte Optimus est une carte NVidia Hybride, couplée avec une puce intégrée Intel.
Le but de cette techno est d'améliorer l'autonomie d'un portable, et n'est présente que dans ceux-ci.


Le principe



Sous Windows, c'est :
  • On tourne sur le chipset intégré Intel. Le pilote NVidia éteint la NVidia.
  • Quand il y a de la demande de 3D, le pilote NVidia active celle-ci, et l’application utilise la NVidia.
  • Quand l'application est fermée, la carte NVidia est de nouveau éteinte.


Ainsi, le PC, quand il n'a pas besoin de puissance graphique, on ne tourne que sur Intel.

Sous Linux, les 2 cartes sont allumées mais seule le chipset graphique Intel est utilisé, puisque pas de pilote NVidia compatible.
Donc, même si on ne fait rien sur son ordinateur portable, l'autonomie est réduite.


Si on s'amuse à installer les pilotes NVidia, en forçant Xorg à utiliser la NVidia, celui-ci ne se lancera pas!
(A l'heure d'aujourd'hui avec les drivers 319 et le kernel 3.9.2)



L'histoire de Bumblebee



Un projet libre, nommé bumblebee est né pour pallier à ce problème, d'utiliser un fichier Xorg.nvidia pour lancer une application avec le pilote NVidia.
Mais avec seulement bumblebee installé, les deux cartes graphiques fonctionnent toujours. Même lorsque la NVidia n'est pas sollicitée.
En parallèle de bumblebee, on a bbswitch qui permet justement de couper l'alimentation de la carte NVidia lorsqu'aucune application 'optirun' n'est exécutée. (Optirun étant la commande permettant d'exécuter une application avec la carte graphique NVidia).

Ces deux logiciels (bumblebee et bbswith) fonctionnent en duo, avec le pilote NVidia installé à côté pour "reproduire" la technologie incluse dans le driver NVidia.

Sans bumblebee et bbswitch => Autonomie de 1h30 avec la batterie.
Sans les mêmes conditions avec bumblebee + bbswitch => Autonomie de 4h30 avec la batterie sans qu'aucune application 3D ne tourne avec la commande 'optirun'.

Même si on se fiche de l'autonomie, il n'est pas possible de désactiver dans le BIOS la puce graphique Intel pour ne fonctionner qu'avec la carte NVidia.

Prérequis



Avoir une distribution à jour, et avoir configuré layman.

Pour Calculate Linux :
Code BASH :
cl-update



Pour Gentoo :
Code BASH :
emerge --sync
emerge -avquDN --with-bdeps=y world



Installation



On installe bumblebee :

Code BASH :
emerge -avq bumblebee


La réponse est similaire à celle là :
Code BASH :
[ebuild   R   ] x11-base/xorg-drivers-1.17  INPUT_DEVICES="evdev keyboard mouse mutouch synaptics -acecad -aiptek -elographics -fpit -hyperpen -joystick (-libinput) -penmount -tslib -vmmouse -void -wacom" VIDEO_CARDS="amdgpu intel nouveau nv nvidia* radeon radeonsi vesa -apm -ast -chips -cirrus -dummy -epson -fbdev -fglrx (-freedreno) -geode -glint -i128 -i740 -mach64 -mga -neomagic (-omap) (-omapfb) -qxl -r128 -rendition -s3 -s3virge -savage -siliconmotion -sisusb (-sunbw2) (-suncg14) (-suncg3) (-suncg6) (-sunffb) (-sunleo) (-suntcx) -tdfx (-tegra) -tga -trident -tseng -via -virtualbox -vmware (-voodoo)"
[ebuild  N    ] app-eselect/eselect-opencl-1.1.0-r1
[ebuild  N    ] x11-drivers/nvidia-drivers-361.28  USE="X driver kms -acpi -gtk3 (-multilib) -pax_kernel -static-libs -tools (-uvm)"
[ebuild  N    ] sys-power/bbswitch-0.8
[ebuild  N    ] x11-misc/virtualgl-2.3.3  USE="ssl"
[ebuild  N    ] x11-misc/bumblebee-3.2.1  USE="bbswitch" VIDEO_CARDS="nouveau nvidia"
The following USE changes are necessary to proceed:
 (see "package.use" in the portage(5) man page for more details)
# required by x11-misc/bumblebee-3.2.1::gentoo
# required by bumblebee (argument)
>=x11-base/xorg-drivers-1.17 video_cards_nvidia
Would you like to add these changes to your config files? [Yes/No] no


Il faut recompiler xorg-drivers avec le FLAG video_cards_nvidia
On complète le fichier nécessaire pour l'installation de Bumblebee :

Code BASH :
echo "x11-base/xorg-drivers video_cards_nvidia #Carte Optimus" >> /etc/portage/package.use/custom 



On relance à nouveau l'installation de bumblebee :

Code BASH :
emerge -avq bumblebee


Maintenant, tout doit être bon :

Code BASH :
Local copy of remote index is up-to-date and will be used.
[ebuild   R   ] x11-base/xorg-drivers-1.17  INPUT_DEVICES="evdev keyboard mouse mutouch synaptics -acecad -aiptek -elographics -fpit -hyperpen -joystick (-libinput) -penmount -tslib -vmmouse -void -wacom" VIDEO_CARDS="amdgpu intel nouveau nv nvidia* radeon radeonsi vesa -apm -ast -chips -cirrus -dummy -epson -fbdev -fglrx (-freedreno) -geode -glint -i128 -i740 -mach64 -mga -neomagic (-omap) (-omapfb) -qxl -r128 -rendition -s3 -s3virge -savage -siliconmotion -sisusb (-sunbw2) (-suncg14) (-suncg3) (-suncg6) (-sunffb) (-sunleo) (-suntcx) -tdfx (-tegra) -tga -trident -tseng -via -virtualbox -vmware (-voodoo)"
[binary  N    ] app-eselect/eselect-opencl-1.1.0-r1
[ebuild  N    ] x11-drivers/nvidia-drivers-361.28  USE="X driver kms -acpi -gtk3 (-multilib) -pax_kernel -static-libs -tools (-uvm)"
[ebuild  N    ] sys-power/bbswitch-0.8
[ebuild  N    ] x11-misc/virtualgl-2.3.3  USE="ssl"
[ebuild  N    ] x11-misc/bumblebee-3.2.1  USE="bbswitch" VIDEO_CARDS="nouveau nvidia"
Would you like to merge these packages? [Yes/No]
 


Tout semble OK, alors on démarre l'installation en répondant Yes.


Si en plus on souhaite installer primus au lieu de VirtualGL, il faut dans un premier temps le démasquer :

Pour Gentoo uniquement :
Configurer Layman : http://www.linuxtricks.fr/wiki/installer-gentoo-facilement#paragraph_layman

Puis ajouter le dépôt Bumblebee :
Code BASH :
layman -a bumblebee


Resynchroniser tous les overlay (dont bumblebee) avec :

Code BASH :
layman -S



Code BASH :
echo "x11-misc/primus **" >> /etc/portage/package.keywords/custom


Puis l'installer :

Code BASH :
emerge -avq  x11-misc/primus


Code BASH :
Local copy of remote index is up-to-date and will be used.
[ebuild  N    ] x11-misc/primus-9999
Would you like to merge these packages? [Yes/No]


Post-Configuration



Maintenant que bumblebee est installé, il ne faut pas oublier de lancer le service au démarrage du système :

Code BASH :
rc-update add bumblebee default


Aussi, pour que les utilisateurs puissent utiliser bumblebee, ils doivent faire partie du groupe bumblebee :

Code BASH :
usermod -G bumblebee -a <user>



Comparer les performances




Sans utiliser la carte NVidia



Si on n'utilise pas la commande optirun, on constate que la carte utilisée est Intel :

Code BASH :
glxspheres 


Le résultat donne :

Code BASH :
Polygons in scene: 62464
Visual ID of window: 0x20
Context is Direct
OpenGL Renderer: Mesa DRI Intel(R) Ivybridge Mobile 
60.478270 frames/sec - 67.493750 Mpixels/sec
 



Avec la carte NVidia



Maintenant, on teste avec la commande optirun, et on constate que la carte NVidia est utilisée :

Code BASH :
optirun glxspheres 


Le résultat donne :

Code BASH :
Polygons in scene: 62464
Visual ID of window: 0x20
Context is Direct
OpenGL Renderer: GeForce GT 650M/PCIe/SSE2
127.400204 frames/sec - 142.178628 Mpixels/sec



Utiliser la carte NVidia



Comment lancer une application avec la carte NVidia puisque la bascule n'est pas automatique ? Il faut utiliser la commande optirun :

Code BASH :
optirun monapplication


Si on veut lancer un jeu Windows avec Wine, s'il est installer, le principe reste le même :

Code BASH :
optirun wine monapplication.exe


Les liens à créer dans le menu de lancement des applications de KDE, GNOME, XFCE doivent comporter aussi la commande optirun.

Accéder à NVidia settings



Pour accéder au panneau NVidia il faut utiliser aussi la commande optirun :

Code BASH :
optirun -b none nvidia-settings -c :8


Problèmes connus




Bumblebee ne fonctionne plus suite à une mise à jour kernel ou recompilation de celui-ci



Il se peut qu'en cas de mise à jour ou recompilation kernel, le service bumblebee ne trouve plus la carte NVidia.

Dans ce cas, il suffit de recompiler les modules :

Code BASH :
 emerge @module-rebuild 



Les applications 32bits ne veulent pas utiliser le pilote NVidia



Il se peut que les jeux lancés sous Wine avec la commande optirun ne veule pas de l'accélération graphique.

Il faut donc recompiler virtualgl avec le flag32 :

Code BASH :
ABI_X86="64 32" emerge -qv virtualgl


Si besoin, modifier le package.use :

Code BASH :
echo "x11-misc/virtualgl abi_x86_32" >> /etc/portage/package.use/custom



primus: fatal: failed to load any of the libraries: /usr/lib64/opengl/nvidia



Ce problème est présent depuis quelques versions du pilote NVidia.
Il faut ajouter le USE compat et utiliser un pilote plus récent que le 361.28 livré par Gentoo.
On peut prendre le 364.19 (que j'utilise sans soucis) qu'il suffit de le démasquer :

Code BASH :
echo "=x11-drivers/nvidia-drivers-364.19" >> /etc/portage/package.keywords/custom
echo "x11-drivers/nvidia-drivers compat" >> /etc/portage/package.use/custom


Puis de mettre à jour ce pilote NVidia sans l'ajouter au fichier de logiciels installés (via le -1) :

Code BASH :
emerge -avq1u nvidia-drivers
Cette page a été vue 12422 fois