Utiliser sa carte NVidia Optimus sous Calculate Linux

Bonjour,

Utilisant un PC avec la technologie Optimus, j’ai souhaité vous partager mon tuto d’installation et utilisation sous Calculate Linux.

:warning: Ce tuto n’est plus à jour, je vous invite à consulter l’original en attendant : http://www.linuxtricks.fr/wiki/cartes-optimus-installer-bumblebee-sous-calculate

– 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 —

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

– Installation –

Dans un premier temps, on regarde ce dont bumblebee à besoin :

emerge -p bumblebee

La réponse est semblable à ceci :

Calculating dependencies... done!
[ebuild  N     ] dev-libs/libbsd-0.4.2  USE="-static-libs" 
[ebuild  N     ] app-admin/eselect-opencl-1.1.0-r1 
[ebuild  N    ~] x11-misc/virtualgl-2.3.2-r2  USE="ssl" ABI_X86="(64) -32 (-x32)" 
[ebuild   R    ] x11-base/xorg-drivers-1.13  VIDEO_CARDS="nvidia*" 
[ebuild  N     ] x11-drivers/nvidia-drivers-319.17  USE="X acpi (multilib) tools -pax_kernel" 
[ebuild  N    ~] sys-power/bbswitch-0.6 
[ebuild  N    ~] x11-misc/bumblebee-3.2.1  USE="bbswitch" VIDEO_CARDS="nouveau nvidia" 

The following keyword changes are necessary to proceed:
 (see "package.accept_keywords" in the portage(5) man page for more details)
 # required by bumblebee (argument)
=x11-misc/bumblebee-3.2.1 ~amd64
 # required by x11-misc/bumblebee-3.2.1[bbswitch]
 # required by bumblebee (argument)
=sys-power/bbswitch-0.6 ~amd64
 # required by x11-misc/bumblebee-3.2.1
 # required by bumblebee (argument)
=x11-misc/virtualgl-2.3.2-r2 ~amd64

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
 # required by bumblebee (argument)
=x11-base/xorg-drivers-1.13 video_cards_nvidia

Il faut recompiler *xorg-drivers avec le FLAG video_cards_nvidia*, et bon nombre de paquets sont archtildés.
On complète les fichiers nécessaires pour l’installation de Bumblebee :

echo "x11-misc/bumblebee ~amd64 #Carte Optimus" >> /etc/portage/package.keywords/custom 
echo "sys-power/bbswitch ~amd64 #Carte Optimus" >> /etc/portage/package.keywords/custom 
echo "x11-misc/virtualgl ~amd64 #Carte Optimus" >> /etc/portage/package.keywords/custom
echo "x11-base/xorg-drivers video_cards_nvidia #Carte Optimus" >> /etc/portage/package.use/custom 

On teste à nouveau l’installation de bumblebee :

emerge -p bumblebee

Maintenant, tout doit être bon :

These are the packages that would be merged, in order:

Calculating dependencies... done!
[ebuild  N     ] dev-libs/libbsd-0.4.2  USE="-static-libs" 
[ebuild  N     ] app-admin/eselect-opencl-1.1.0-r1 
[ebuild  N    ~] x11-misc/virtualgl-2.3.2-r2  USE="ssl" ABI_X86="(64) -32 (-x32)" 
[ebuild   R    ] x11-base/xorg-drivers-1.13  VIDEO_CARDS="nvidia*" 
[ebuild  N     ] x11-drivers/nvidia-drivers-319.17  USE="X acpi (multilib) tools -pax_kernel" 
[ebuild  N    ~] sys-power/bbswitch-0.6 
[ebuild  N    ~] x11-misc/bumblebee-3.2.1  USE="bbswitch" VIDEO_CARDS="nouveau nvidia" 

Tout semble OK, alors on démarre l’installation :

emerge -qv bumblebee

– Post-Configuration –

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

rc-update add bumblebee default

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

usermod -G bumblebee -a <user>

– Comparer les performances –

— Sans utiliser la carte NVidia —

On peut regarder les performances de la carte intégrée Intel avec la commande glxspheres :

glxspheres 

Le résultat donne :

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 —

Testons la même commande en utilisant la carte NVidia

optirun glxspheres 

Le résultat donne :

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

On voit clairement une différence !

– 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 :

optirun monapplication

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

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.

– 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 :

 emerge @module-rebuild 

— Wine ne veut 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 :

ABI_X86="64 32" emerge -qv virtualgl

Ci besoin, modifier le package.use :

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

Et voilà qui est fait, merci Adrien.

Edition du tuto, remplacement de

module-rebuild -X rebuild par emerge @module-rebuild