HDMI Dual screen Optimus

De Le Wiki du Forum-Debian.fr
Aller à la navigation Aller à la recherche

Introduction

Cette méthode n'est pas compatible avec Bumblebee.

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 inclus dans la surface affichée par l'écran branché en HDMI. C'est comme un clone, voire moins 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é.

Pré-requis

Pour la suite, il faut utiliser

  • Une pile graphique à jour (noyau, xserver et mesa)
  • des drivers KMS pour les deux cartes graphiques
  • des drivers DDX pour les deux cartes graphiques

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

Activation de la prise HDMI

Si tout s'est bien passé, 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" (ou "modesettings"). 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 :

$ xrandr --setprovideroutputsource nouveau Intel

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 rafraîchissent 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 : https://wiki.ubuntu.com/X/Architecture

Sources

https://nouveau.freedesktop.org/wiki/Optimus/

https://wiki.debian.org/KernelModesetting

https://dri.freedesktop.org/wiki/DDX/