Si Gnome 2 s'accorde assez bien (sur nos CentOS par exemple) avec le multi-screen, au détriment de compiz et de la 3D qui ne sont pas vraiment compatibles avec Xinerama (indispensable pour étaler le bureau sur 3 ou 4 moniteurs), les dernières évolutions (Gnome Shell et consorts) n'offrent rien de nouveau et sont même parfois en retrait quand il s'agit de sortir des standards single ou dual screen.
Oui, c'est le progrès.. Nos Linux sont tellement distribuées et utilisées, que l'on peut ignorer sans vergogne les cas particuliers qui fonctionnaient jusqu'ici. Pour le coup, Canonical n'est pas seul avec son "Unity", les autres n'ont pas fait mieux.. J'arrêterais ici mon commentaire, chacun aura compris le fond de ma pensée..



ubuntu_12.04_bad_multiscreen

Les essais effectués jusqu'à présent pour (essayer de) faire tourner 3 (ou 4 écrans) sur une Ubuntu 12.04 et une paire de cartes Nvidia récentes, donnaient, au mieux, un résultat assez étrange qui ressemblait souvent à l'image ci dessus.

Je dis "donnaient", car en fait, si aucune option ne semblait apparaitre sur les gestionnaires clickodromes, il s'avère que cela est néanmoins possible, en une ligne de commande qui plus est..
Null doute qu'il doit y avoir d'autres moyens d'arriver à un résultat similaire, mais celui-ci fonctionne et il est accessible à tous. Alors, autant le partager.

La solution ne vient pas du mgroup, elle a été donnée par arjenzwerver sur le forum Ubuntu communautaire de langue Anglaise (lien vers le topic).

Attention : Ce Howto est à ranger dans la catégorie "Beta". Veillez à tester l'ensemble de vos logiciels habituels une fois la configuration établie. De notre côté, nous mettrons à jour cette page au fur et à mesure de nos tests.

Nous avons reproduit la soluce sur une machine dédiée, voici le déroulement et quelques explications.


Description matérielle & Logicielle


  • Deux cartes graphiques Nvidia (disons 9500 et plus récentes) ou une NVS 450 avec deux puces graphiques intégrées et 4 sorties
  • Une Ubuntu 12.04, 32 ou 64 Bits, full updated
  • Les derniers pilotes recommandés par Ubuntu, installables depuis l'interface
  • Connaitre précisément la définition de chacun des 3 (ou 4) écrans que vous allez connecter (dans notre exemple 3 écrans en 1680x1050)



Comment procéder ?


L'idée, c'est d'utiliser l'option "--base-mosaic" du gestionnaire Nvidia, en définissant la position de chaque écran par rapport à l'écran précédent (de gauche à droite). Pour ce faire, il faut identifier les sorties graphiques :

  • Chacune des deux cartes Nvidia dispose d'un identifiant GPU-y (où y = carte 0 ou carte 1) visible dans le gestionnaire Nvidia-settings
  • Chaque sortie graphique d'une carte Nvidia dispose d'un identifiant (DFP-x où x = sortie 0 ou 1).



Pour rendre tout ceci compréhensible au plus grand nombre :

  • Nous allons connecter l'écran principal sur la première carte graphique Nvidia, sortie "GPU-0.DFP-0". Il s'agit de l'écran central. Il sera seul sur cette carte.
  • L'écran de gauche sera sur la sortie 0 de la seconde carte Nvidia, donc "GPU-1.DFP-0"
  • L'écran de droite sera sur la sortie 1 de la seconde carte Nvidia, donc "GPU-1.DFP-1"


Tips : Utilisez le gestionnaire Nvidia pour vous repérer, il indique sur quelle sortie est connecté chaque écran.

Important : Avant la manip ci dessous, déplacez votre xorg.conf !

# sudo mv /etc/X11/xorg.conf /etc/X11/xorg.conf.old



Préparation de la ligne de commande


Il faut indiquer au pilote Nvidia l'ordre de chaque écran, sa définition et son positionnement par rapport au moniteur précédent. Considérons de gauche à droite :

  • Moniteur_2 suivi de Moniteur_1 suivi de Moniteur_3


En termes de sorties graphiques, pour notre exemple, ça donne (adaptez à votre situation) :

  • GPU-1.DFP-0 suivi de GPU-0.DFP-0 suivi de GPU-1.DFP-1


Le Moniteur_2 est le premier à gauche, donc son positionnement dans l'espace sera à zéro (horizontal) + zéro (vertical), on ajoute sa résolution :

  • GPU-1.DFP-0: 1680x1050+0+0


Le Moniteur_1 commence son "espace graphique" après le moniteur_2, donc son positionnement dans l'espace (de gauche à droite) sera égal à zéro + la largeur du Moniteur_2 (oui, sinon ils vont se chevaucher)

  • GPU-0.DFP-0: 1680x1050+1680+0


Le Moniteur_3 en dernier, donc zéro + largeur du Moniteur_2 + largeur du Moniteur_1

  • GPU-1.DFP-1: 1680x1050+3360+0



Note : Le dernier "+0" correspond à la position verticale de chaque écran. Les nôtres sont sur un même plan donc c'est 0.

La ligne de commande sera donc :

sudo nvidia-xconfig --base-mosaic --metamodes="GPU-1.DFP-0: 1680x1050+0+0, GPU-0.DFP-0: 1680x1050+1680+0, GPU-1.DFP-1: 1680x1050+3360+0"



Redémarrez X ou plus simplement votre Ubuntu, ça devrait fonctionner sans plus de manips.


Cas particulier


Sur son Topic, arjenzwerver dit avoir rencontré des latences avec deux Nvidia GTX 560 Ti (sans SLI activé). Sur la NVS 450 de notre test, ce problème ne s'est pas posé.

Il a réglé le souci en ajoutant l'option " iommu=pt " à la ligne "GRUB_CMDLINE_LINUX_DEFAULT" de son Grub :

# sudo vi /etc/default/grub


  • Ajoutez " iommu=pt " à la ligne indiquée pour obtenir :
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash iommu=pt"


  • N'oubliez pas de recharger Grub avant de redémarrer (Impératif !)
# sudo update-grub




Enfin, restart de votre Ubuntu..

ubuntu_12.04_3_ecrans


Note : Un grand merci à Carbon et à son matériel qui ont servi de cobayes pour cette expérience (je vais tout de même pas désinstaller ma CentOS ?)..


N'hésitez pas à nous faire part de vos retours ou problèmes sur ce sujet via le topic dédié sur le forum ;-)