Réglage Nvidia TwinView sous Linux

Publié le par wardiz

cet article va prochainement migrer sur mon nouveau blog !

 

Il y a quelques jours j'ai acheté un vidéo projecteur pour pouvoir profiter d'un grand écran pour mes films et occasionnellement des jeux sur console.
J'ai choisi un Epson TW-700, vidéo projecteur HD-Ready, testé sur le site lesnumeriques. C'est un trés bon compromis entre qualité d'image et prix.


 
Possédant un portable Toshiba Satellite A100 088 avec une carte Nvidia et fonctionnant sous Debian, j'ai voulu profiter du Twinview et pouvoir utiliser mon vidéo projecteur comme un second écran lorsque je m'en sers.
Je pars du principe dans le reste de l'article que vous utilisez déja les drivers nvidia ... pour info, j'utilise donc une Debian testing, version du kernel :  2.6.18-4, version des drivers Nvidia : 1.0.8776

Premier obstacle : si je branche le vidéo projecteur alors que le portable est déjà allumé celui ci n'est pas reconnu et je dois redémarrer le PC pour que le vidéo projecteur soit détecté : pas pratique du tout
Solution : dans le BIOS, il ne faut pas mettre une détection automatique de l'afficheur vidéo mais le positionner sur "LCD + analog RGB" (cf copie d'écran) : ceci permet de brancher le vidéo projecteur au portable alors que ce dernier est déjà allumé et de détecter le vidéo projecteur simplement en redémarrant le serveur X (Ctrl-Alt-Backspace).

Réglage dans le BIOS :
 


Une fois le changement effectué on sauvegarde et on reboot.

Tout content de ne plus avoir à redémarrer le portable, je me rends rapidement compte du problème suivant :
si le vidéo projecteur est déja connecté au portable et qu'on démarre le portable, le serveur X (serveur graphique) considère alors le vidéo projecteur comme écran principal. Pas trés grave me direz vous, cependant cela veux dire que la fenêtre de gdm s'affiche sur le vidéo projecteur, ainsi que la barre de menu, etc etc.
Evidemment si on éteind le vidéo projecteur, on voit tout de suite mieux le problème que ce soit l'écran principal : toutes les fenêtres qui s'ouvriront seront placées par défaut sur l'espace du vidéo projecteur qui est éteind ...
Il faut donc forcer le serveur X à considérer l'écran du portable comme écran principal, qu'il y ait un écran connecté sur le port VGA du portable ou pas.

Avant de passer à la configuration du ficher /etc/X11/xorg.conf, branchez le vidéo projecteur sur le PC et redémarrez le serveur X (Ctrl-Alt-Backspace). Ouvrez le fichier de log du serveur X ( /var/log/Xorg.0.log ) et cherchez des lignes ressemblant aux suivantes :

(**) NVIDIA(0): TwinView enabled
(II) NVIDIA(0): Support for GLX with the Damage and Composite X extensions is
(II) NVIDIA(0): enabled.
(II) NVIDIA(0): NVIDIA GPU GeForce Go 7300 (G72) at PCI:1:0:0 (GPU-0)
(--) NVIDIA(0): Memory: 262144 kBytes
(--) NVIDIA(0): VideoBIOS: 05.72.22.41.42
(II) NVIDIA(0): Detected PCI Express Link width: 16X
(--) NVIDIA(0): Interlaced video modes are supported on this GPU
(--) NVIDIA(0): Connected display device(s) on GeForce Go 7300 at PCI:1:0:0:
(--) NVIDIA(0): Seiko EPSON PJ (CRT-0)
(--) NVIDIA(0): Seiko (DFP-0)
(--) NVIDIA(0): Seiko EPSON PJ (CRT-0): 400.0 MHz maximum pixel clock
(--) NVIDIA(0): Seiko (DFP-0): 330.0 MHz maximum pixel clock
(--) NVIDIA(0): Seiko (DFP-0): Internal Dual Link LVDS
(II) NVIDIA(0): Assigned Display Devices: CRT-0, DFP-0
(II) NVIDIA(0): Validated modes:
(II) NVIDIA(0): "1024x768,1024x768"
(II) NVIDIA(0): Virtual screen size determined to be 2048 x 768
(WW) NVIDIA(0): Seiko EPSON PJ (CRT-0)'s EDID does not contain a maximum image
(WW) NVIDIA(0): size; cannot compute DPI from Seiko EPSON PJ (CRT-0)'s
(WW) NVIDIA(0): EDID.
(==) NVIDIA(0): DPI set to (75, 75); computed from built-in default
(**) NVIDIA(0): Enabling 32-bit ARGB GLX visuals.

C'est normalement là que sont listés dans l'ordre de détection les périphériques trouvés par la carte graphique. Vérifiez bien que vous avez DFP-0 et CRT-0. Ils correspondent respectivement à l'écran (au sens large) branché sur le port VGA et l'écran du portable. L'extrait de fichier ci-dessus vient de mon Xorg.0.log et on voit que le premier périphérique détecté est CRT-0 et le second DFP-0.
Dans la suite de l'article j'utiliserai les termes DFP et CRT.

Voici comment j'ai configuré mon fichier xorg.conf pour que le périphérique DFP-0 soit toujours l'écran principal, avec ou sans vidéo projecteur connecté. Je n'ai mis que la partie device de la carte graphique, il n'est pas nécessaire de modifier les autres sections. Si vous n'êtes pas familier avec l'édition du fichier xorg.conf demandez conseil plutôt que de risquer de faire des erreurs. Faites une sauvegarde de votre fichier xorg.conf avant de commencer à le bidouiller ...

Section "Device"
  Identifier "nVidia Corporation G72M [Quadro NVS 110M/GeForce Go 7300]"
  Driver "nvidia" BusID "PCI:1:0:0"
  Option "ConnectToAcpid" "false"
  Option "DamageEvents" "true"
  Option "NoLogo" "true"
  # Option "LogoPath" "string"
  Option "RenderAccel" "true"
  # Option "NoFlip" "boolean"
  Option "RandRRotation" "true"
  Option "SWCursor" "false"
  Option "HWCursor"  "true" 
  Option "CursorShadow" "false"
  # Option "CursorShadowAlpha" "64"
  # Option "CursorShadowYOffset" "2"  "XvmcUsesTextures" "false"
  Option "AddARGBGLXVisuals" "true"
  # Option "DisableGLXRootClipping" "true"
  Option "TwinView" "true"
  Option "TwinViewOrientation" "DFP-0 LeftOf CRT-0"
  Option "TwinViewXineramaInfoOrder" "DFP-0"
  Option "MetaModes" "DFP-0: 1280x800, CRT-0: 1280x768; DFP-0: 1024x768,CRT-0:1024x768"
  Option "HorizSync" "CRT-0: 15-60"
  Option "VertRefresh" "CRT-0: 50-85"
EndSection


Les lignes importantes sont en mauve, voici leur signification :

  • TwinView  "true" : on active le twinview ... trivial
  • TwinViewOrientation "DFP-0 LeftOf CRT-0" : les notations DFP-0 et CRT-0 permettent de différencier l'écran du portable (DFP-0) du périphérique d'affichage qui est connecté sur le port VGA identifié par la carte graphique comme CRT-0 (le vidéo projecteur dans mon cas), indépendament de leur ordre de détection par la carte graphique, cette notion est trés importante. Ici j'indique donc que l'écran du portable est situé sur la gauche du vidéo projecteur
  • TwinViewXineramaInfoOrder "DFP-0" : j'indique à la carte graphique que l'écran principal est DFP-0 : de cette facçon meme si j'éteinds le vidéo projecteur, l'écran du portable reste l'écran principal
  • MetaModes "DFP-0: ......" : on spécifie les couples de résolutions possibles pour les afficheurs DFP-0 et CRT-0. Il est important d'utiliser les notations DFP et CRT bien qu'elles soient facultatives : si on ne spécifie ni DFP ni CRT, le 1er mode sera appliqué au premier périphérique detecté par la carte, et le 2nd mode appliqué au second afficheur détecté par la carte. Suivant les options de votre BIOS, du driver, si un périphérique est connecté ou pas, l'ordre de détection des écrans peut changer d'un démarrage à l'autre du PC et vos modes qui ne sont valades que pour un ordre de détection donné ne sont plus valides. En utilisant les notations DFP et CRT, on s'assure les modes seront toujours appliqués aux périphériques peu importe leur ordre de détection. L'utilisation de mauvais modes pourraient endommager votre matériel. Les modes disponibles sont en principe indiqués dans le manuel de votre vidéo projecteur, c'était le cas pour moi.
  • "HorizSync" "CRT-0: 15-60" : j'inqique la fréquence horizontale pour le périphérique CRT-0 : ici encore, utilisez toujours le préfixe CRT-0. Les valeurs sont indiquées dans le manuel ou dans les spécifications techniques du manuel. De mauvaises valeurs pourraient endommager votre matériel, relisez bien vos valeurs !
  • "VertRefresh" "CRT-0: 50-85" : idem que pour HorizSync, mais ce sont ici les fréquences verticales, que j'ai trouvé dans le manuel du vidéo projecteur.
  • Vous aurez remarqué que la résolution pour CRT-0 est différente de DFP-0. Elle est a 1280x768 : c'est normal car c'est la résolution max que supporte le vidéo projecteur.

Une fois les modifications effecutées, on sauvegarde le fichier xorg.conf, on redémarre le serveur X et la vous devez avoir une image qui s'affiche sur le vidéo projecteur.

La prochaine fois je vais m'interesser à la lib VPAU et l'implémentation fournis par Nvdia pour que mplayer utilise la décompression de la carte vidéo.

Publié dans Linux

Commenter cet article