Optimus : Dual screen sur sortie HDMI

Bonjour à tous,

Les discussions au sujet de ce T&A se font ici : digression-t-a-optimus-dual-screen-sur-sortie-hdmi-t52366.html

Tout d’abord, les sources :
nouveau.freedesktop.org/wiki/Optimus/
wiki.debian.org/KernelModesetting
dri.freedesktop.org/wiki/DDX/

Ce T&A est destiné aux possesseurs d’un ordinateur portable équipé de la technologie Optimus. Selon les instructions de freedesktop.org, ces instructions devraient fonctionner sur tous les branchements possibles (écran du portable (LVDS) et port HDMI branchés tous les deux sur le chipset Intel, ou tous les deux sur la carte NVidia, ou l’un sur la carte NVidia et l’autre sur le chipset Intel). Cependant, ces instructions n’ont été testées avec succès que dans le cas de l’écran du portable branché sur le chipset Intel et le port HDMI sur la carte NVidia. Une exception pour les portables équipés d’un “hardware mux” (sorte d’interrupteur physique, je suppose) : il faudra plutôt se pencher sur Switcheroo. Mais ceci ne rentre pas dans le cadre de ce T&A.

Pour les curieux, j’ai testé la méthode consistant à utiliser par défaut la carte graphique, et à configurer l’écran de l’ordinateur via modesetting, mais le résultat n’est pas concluant. Le système n’est pas stable (apparemment, un problème de synchronisation des affichages qui fait que la carte NVidia effectue le rendu de l’image pendant que modesetting l’affiche), et l’affichage de l’écran du portable est forcément inclut dans la surface affichée par l’écran branché en HDMI. C’est comme un clone, voire moi intéressant.

J’ai tenté la configuration des deux écrans distincts utilisant chacun leur propre driver. L’écran du portable utilise la puce intel, pendant que le second écran utilise la carte NVidia. Ce n’est pas très compliqué à mettre en place, mais le résultat n’est pas là. Il n’y a pas moyen d’obtenir un bureau étendu, et j’ai eu de nombreux problèmes de GLX non disponible.

La solution que j’ai adoptée est celle décrite sur le premier lien donné dans les sources. Si vous souhaitez une explication détaillée, je vous conseille de suivre le tuto du premier lien (en anglais). Ici, je fais un bref résumé.

Pour la suite, il faut utiliser
[ul][li]Une pile graphique à jour (noyau, xserver et mesa)[/li]
[li]des drivers KMS pour les deux cartes graphiques[/li]
[li]des drivers DDX pour les deux cartes graphiques[/li][/ul]
Concrètement, les versions du noyau, de xserver et de mesa en Sid conviennent. Je ne sais pas ce qu’il en est des autres versions de Debian.
Les drivers KMS et DDX sont assemblés dans un seul paquet pour chaque carte graphique. Pour un chipset Intel et une carte graphique NVidia, il faudra installer xserver-xorg-video-intel et xserver-xorg-video-nouveau. Il faut aussi supprimer tous les pilotes autres. Il ne servent à rien dans notre cas, et risquent d’interférer pour le pire des résultats. On veillera bien à supprimer toute trace des paquets nvidia.
Il faut aussi veiller à ne pas avoir de fichier xorg.conf, et pas de configuration qui mettrait nouveau sur une blacklist. Il faut donc supprimer /etc/X11/xorg.conf, et vérifier que aucun fichier de /etc/modprobe.d/ ne mette nouveau ou intel sur la blacklist.

Un redémarrage est nécessaire (quoique, je pense qu’il y a moyen de juste charger les modules nouveau et intel, mais je suis un noob).

Si tout s’est bien passé, un lsmod devrait lister (au moins) les modules i915 et nouveau dans les modules video. i915 est le driver DDX pour Intel. $ xrandr --listproviders devrait lister deux “Providers” de noms “Intel” et “nouveau”.
Il faut ensuite indiquer quel driver utiliser de base. Je n’ai pas compris le fonctionnement exact. Essayez $ xrandr --setprovideroffloadsink nouveau Intel
Si vous obtenez une erreur “XError of failed request : BadValue”, inversez nouveau et Intel.

Si le port HDMI et l’écran LVDS sont sur le même GPU, passez le prochain paragraphe.

Sinon, il faut indiquer à xrandr d’utiliser un GPU pour passer le rendu au deuxième (traduction approximative du contenu du tuto sus-cité). Pour cela, cette commande fait l’affaire :

nouveau et Intel sont à mettre dans le même ordre que dans le paramétrage du driver d’offloading.

Et voilà, vous pouvez utiliser votre second écran branché en HDMI. Pour configurer le mode étendu, vous pouvez utiliser xrandr ou arandr pour le mode graphique. Les tutos et explications sur le fonctionnement de ces outils abondent sur le web, je n’ai pas besoin de vous en faire une nouvelle copie.

La dernière commande de ce tuto doit être exécutée à chaque démarrage. Vous pouvez l’ajouter je ne sais où pour activer automatiquement le deuxième écran.

Il est possible que quelques bugs d’affichage subsistent (essentiellement des petites parties de l’écran qui ne se rafraichissent pas), mais ça reste minime, et les performances sont au rendez-vous. Un problème conséquent est la consommation d’énergie. Aucune carte n’est mise hors tension, et il semblerait que la carte NVidia tourne toujours à la fréquence la plus élevée. Ceci est un problème du driver nouveau. De futures mises à jour résoudront peut-être le problème.

Pour plus de détails, n’hésitez pas à lire les liens cités dans les sources, ainsi que celui-ci : wiki.ubuntu.com/X/Architecture

L’outil “Prime” est disponible sur le github de l’auteur : github.com/tseliot/nvidia-prime
Il est vrai qu’à la base, il est developpé pour Canonical ; l’auteur, ayant une adresse mail, semble faire partie de ladite société.
Néanmoins, pour avoir regardé le code ce soir, proposé sur le dépôt git, cela semble être opérationnel pour Debian aussi, et gère systemd.

Par contre, pour fonctionner, cela nécessite une modification du server Xorg, dans une version, non encore disponible pour Debian.
L’info fournie en anglais, puis reprise en français
Bref, dans l’état, il semble que sous Debian, il faille oublier Prime.

Par contre, pour avoir lu le code, dixit plus haut, cela utilise aussi ‘xrandr’ …

Pour info, la version de Xorg en Sid est la 1.17. La version concernée dans l’article est la 1.14. Il devrait y avoir moyen de faire quelque-chose !

Pour les dernières nouvelles, tout fonctionne au poil sans Prime. Il suffit de se passer des drivers propriétaires de NVidia (cf le premier post mis à jour). Je n’ai pas cherché à utiliser Prime, étant satisfait de la situation actuelle.