Accueil > Linux / Logiciels Libres > GNU/Linux > Bi-Ecran sous linux avec 2 cartes graphiques

Bi-Ecran sous linux avec 2 cartes graphiques

mercredi 17 août 2005, par Yann

Bi-Ecran sous linux avec 2 cartes graphiques

Un très bon article sur le site léa-linux décrit cela. On se laisse guider en adaptant à notre configuration et tout fonctionne correctement. L’article

Petit problème à éviter
La plupart du temps (comme vous avez une seul carte graphique intégrée ou AGP) le bios est configuré pour démarrer la video sur le bus AGP. Et il arrive parfois, lors de l’ajout de la deuxième carte graphique PCI, que la vidéo ne démarre plus.

Dans ce cas essayer de configurer le bios pour que le PC démarre la video sur le bus PCI. Normalement tout rentre dans l’ordre.

Retrouver ses cartes graphiques

Comme pour les moniteurs il vous faut une section par carte graphique, mais à la différence des moniteurs, si vous avez deux cartes identiques (par exemple 2 TNT PCI) il faut faudra quand même deux sections « Device » : une pour chaque carte. Le problème va être de trouver quelle valeur mettre pour la variable « BusID » de ces sections. Mais ce n’est pas très complexe, tapez (en mode console, et en tant que root) :

# X -scanpci -verbose

Et vous devriez voir quelque chose comme :

Probing for PCI devices (Bus:Device:Function)

(0:0:0) unknown chip (DeviceId 0x0305) from VIA
(0:1:0) unknown chip (DeviceId 0x8305) from VIA
(0:3:0) Realtek unknown card (0x8029) using a Realtek 8029
(0:4:0) S3 ViRGE
(0:20:0) VIA card using a VIA VT 82C686 MVP4 ISA Bridge
(0:20:1) VIA card using a VIA VT 82C586 MVP3 IDE Bridge
(0:20:2) unknown card (0x0925/0x1234) using a VIA VT 82C586 MVP3 USB Controller
(0:20:3) unknown card (0x0925/0x1234) using a VIA VT 82C586 MVP3 USB Controller
(0:20:4) VIA card using a VIA VT 8501 MVP4 ACPI Bridge
(0:20:5) VIA card using a VIA VT 8501 MVP4 MultiMedia
(1:0:0) unknown card (0x1569/0x002d) using a NVidia Riva Ultra 64

C’est la liste de tous vos périphériques PCI/AGP. Mes carte graphiques sont une S3 Virge dont le paramètre BusID sera donc (cf. paramètre en rouge) : « 0:4:0 » et une TNT2 dont le paramètre BusID sera (cf. paramètre en vert) : « 1:0:0 ». Mes sections « device » sont donc :

    Section "Device"
        Identifier  "RIVA TNT2"
        VendorName  "Unknown"
        BoardName   "Unknown"
        BusID       "1:0:0"
        Driver      "nvidia"

        # Uncomment following option if you see a big white block
        # instead of the cursor!
        #    Option      "sw_cursor"

        Option      "DPMS"
    EndSection

pour ma TNT2 et :

    Section "Device"
        Identifier  "S3 Virge"
        VendorName  "Unknown"
        BoardName   "Unknown"
        BusID       "0:4:0"
        Driver      "s3virge"

        # Uncomment following option if you see a big white block
        # instead of the cursor!
        #    Option      "sw_cursor"

        Option      "DPMS"
    EndSection

pour ma S3 Virge. Comme pour les moniteurs, les variables Identifier doivent être différentes pour chacune des cartes graphiques.

Note : Si votre carte graphique est une GeForce2MX, vous pouvez utiliser les fonctionnalités TwinView (deux écrans sur la même carte graphique), voici un exemple de lignes à ajouter dans la section « Device » de cette carte :

    Option "TwinView"
    Option "SecondMonitorHorizSync" "30-38"
    Option "SecondMonitorVertRefresh" "50-100"
    Option "TwinViewOrientation" "Below"
    Option "MetaModes" "1152x864, 800x600; 1152x864, NULL"
    Option "ConnectedMonitor" "crt, crt"

La section « ServerLayout »
J’ai mis mon écran « Secondaire » à droite de (RightOf) mon écran « Principal » donc ma section ServerLayout est :

    Section "ServerLayout"
        Identifier "layout1"
        Screen     "Principal"
        Screen     "Secondaire" RightOf "Principal"

        InputDevice "Mouse1" "CorePointer"
        InputDevice "Keyboard1" "CoreKeyboard"
    EndSection

A la place de « RightOf » vous pouvez mettre :

  • LeftOf : à gauche,
  • Above : au-dessus,
  • Below : en-dessous,
  • Relative : pour placer un écran relativement à un autre (exemple : « Secondaire » Relative « Principal » 1088 216),
  • Absolute : pour dire que les coordonnées du coin supérieur gauche de cet écran sont (x,y) (exemple : Absolute 800 600).

Premier essai
Voilà, notre fichier /etc/X11/XF86Config est correctement écrit, vous avez vérifié trois fois chaque paramètre et c. Lançons nous et tapons (en mode console) :

    X

Normalement le serveur X doit démarrer et vos deux écrans doivent s’allumer, vous devez pouvoir passer la souris d’un écran sur l’autre, comme s’ils ne formaient qu’une seule surface. Ca marche ? Passons à la suite. Ca ne marche pas ? Relisez tout ce qui précède...

Maintenant vous pouvez travailler avec vos deux écrans.

Le Xinerama

La manière la plus simple de travailler avec deux écrans est d’activer le mode Xinerama de votre serveur X (disponible depuis XFree86 4.0.x). Le mode Xinerama est un mode de fonctionnement dans lequel les multiples écrans connectés à votre ordinateur ne semblent plus n’en faire qu’un : leurs résolutions s’additionnent. Pour configurer ce mode de fonctionnement, c’est vraiment très simple : il suffit de passer « +xinerama » au serveur X. Mais, en fait on n’appelle jamais soi-même le serveur X, on passe soit par le script startx, dans ce cas il faut taper :

    startx -- +xinerama

soit on utilise un « Display Manager » (kdm, gdm, xdm, et c.). Dans le cas de kdm ou xdm il faut éditer le fichier /etc/X11/xdm/Xserver pour que la ligne d’appel du serveur X devienne :

    :0 local /usr/X11R6/bin/X +xinerama

Dans le cas de gdm il faut éditer le fichier /etc/X11/gdm/gdm.conf pour que la ligne d’appel du serveur X devienne :

    0=/usr/bin/X11/X +xinerama

(dans la section : servers). Puis vous redémarrez votre « Display Manager » :

    init 3

Attendez 5 secondes, puis :

    init 5

Et voilà, votre « Display Manager » s’étale sur vos multiples écrans. Si vous vous loguez, vous devez voir le changement. Pour que votre écran MultiHead soit le plus facilement utilisable je vous conseille d’utiliser Enlightenment qui permet, entre autre, la maximisation limitée à une seul écran (ce que vous voudrez sans doute faire). Il parait que Sawfish en est aussi capable, mais je n’ai pas pu le voir fonctionner...

Attention à la profondeur des couleurs

Lors de mes essais, le serveur X (Xfree comme Xorg) a été incapable de démarrer si les profondeurs de couleurs étaient différentes sur les deux écrans. IL faut donc bien faire attention d’avoir les mêmes valeurs pour la variables DefaultDepth.

Fichier XF86Config-4

# XF86Config-4 (XFree86 X Window System server configuration file)
#
# This file was generated by dexconf, the Debian X Configuration tool, using
# values from the debconf database.
#
# Edit this file with caution, and see the XF86Config-4 manual page.
# (Type "man XF86Config-4" at the shell prompt.)
#
# This file is automatically updated on xserver-xfree86 package upgrades *only*
# if it has not been modified since the last upgrade of the xserver-xfree86
# package.
#
# If you have edited this file but would like it to be automatically updated
# again, run the following commands as root:
#
#   cp /etc/X11/XF86Config-4 /etc/X11/XF86Config-4.custom
#   md5sum /etc/X11/XF86Config-4 >/var/lib/xfree86/XF86Config-4.md5sum
#   dpkg-reconfigure xserver-xfree86

Section "Files"
	FontPath	"unix/:7100"			# local font server
	# if the local font server has problems, we can fall back on these
	FontPath	"/usr/lib/X11/fonts/misc"
	FontPath	"/usr/lib/X11/fonts/cyrillic"
	FontPath	"/usr/lib/X11/fonts/100dpi/:unscaled"
	FontPath	"/usr/lib/X11/fonts/75dpi/:unscaled"
	FontPath	"/usr/lib/X11/fonts/Type1"
	FontPath	"/usr/lib/X11/fonts/CID"
	FontPath	"/usr/lib/X11/fonts/Speedo"
	FontPath	"/usr/lib/X11/fonts/100dpi"
	FontPath	"/usr/lib/X11/fonts/75dpi"
EndSection

Section "Module"
#nvidia
#	Load	"GLcore"
	Load	"bitmap"
	Load	"dbe"
	Load	"ddc"
#nvidia	
#	Load	"dri"
	Load	"extmod"
	Load	"freetype"
	Load	"glx"
	Load	"int10"
	Load	"record"
	Load	"speedo"
	Load	"type1"
	Load	"vbe"
EndSection

Section "InputDevice"
	Identifier	"Generic Keyboard"
	Driver		"keyboard"
	Option		"CoreKeyboard"
	Option		"XkbRules"	"xfree86"
	Option		"XkbModel"	"pc105"
	Option		"XkbLayout"	"fr"
EndSection

Section "InputDevice"
	Identifier	"Configured Mouse"
	Driver		"mouse"
	Option		"CorePointer"
	Option		"Device"		"/dev/psaux"
	Option		"Protocol"		"ImPS/2"
	Option		"Emulate3Buttons"	"true"
	Option		"ZAxisMapping"		"4 5"
EndSection
Section "InputDevice"
	Identifier	"Generic Mouse"
	Driver		"mouse"
	Option		"SendCoreEvents"	"true"
	Option		"Device"		"/dev/input/mice"
	Option		"Protocol"		"ImPS/2"
	Option		"Emulate3Buttons"	"true"
	Option		"ZAxisMapping"		"4 5"
EndSection

Section "Device"
	Identifier	"Matrox"
	Driver		"mga" #"nvidia" #"nv"
	BusID 		"0:8:0"
EndSection

Section "Device"
	Identifier	"Riva TNT"
	Driver		"nvidia" #"nv"
	BusID 		"1:0:0"
EndSection

Section "Monitor"
	Identifier	"Generic Monitor 1"
#	HorizSync	30-82 iiyama
#	VertRefresh	50-110 iiyama
	HorizSync	30-70
	VertRefresh	50-180
	Option		"DPMS"
#	ModeLine "1280x1024"   135.00   1280 1288 1432 1688   1024 1025 1028 1066 +hsync +vsync
#	ModeLine "1280x1024"   135.00   1280 1324 1468 1708   1024 1025 1028 1066 +hsync +vsync
#	Modeline "1152x864"    108.00   1152 1228 1356 1604    864  865  868  900 +hsync +vsync
EndSection

Section "Monitor"
	Identifier	"Generic Monitor 2"
#	HorizSync	30-82 iiyama
#	VertRefresh	50-110 iiyama
	HorizSync	30-70
	VertRefresh	50-180
	Option		"DPMS"
#	ModeLine "1280x1024"   135.00   1280 1288 1432 1688   1024 1025 1028 1066 +hsync +vsync
#	ModeLine "1280x1024"   135.00   1280 1324 1468 1708   1024 1025 1028 1066 +hsync +vsync
#	ModeLine "1280x960"    108.00   1280 1304 1416 1640    960  961  964 1000 +hsync +vsync
#	Modeline "1152x864"    108.00   1152 1228 1356 1604    864  865  868  900 +hsync +vsync
EndSection

Section "Screen"
	Identifier	"Default Screen"
	Device		"Matrox"
	Monitor		"Generic Monitor 1"
	DefaultDepth	16 #24
	SubSection "Display"
		Depth		16 #24
		Modes		"1280x1024" "1280x960" "1152x864" "1024x768" "800x600" "640x480" "1280x1024" "1280x960"
#	ViewPort	0 0
	EndSubSection
EndSection

Section "Screen"
	Identifier	"Screen 2"
	Device		"Riva TNT"
	Monitor		"Generic Monitor 2"
	DefaultDepth	16 #24
	SubSection "Display"
		Depth		16 #24
		Modes		"1280x1024" "1280x960" "1152x864" "1024x768" "800x600" "640x480" 
#	ViewPort	0 0
	EndSubSection
EndSection

Section "ServerLayout"
	Identifier	"Default Layout"
#	Screen		"Default Screen"
#	Screen		"Screen 2" LeftOf "Default Screen"
	Screen		"Screen 2"
	Screen		"Default Screen" RightOf "Screen 2"
	InputDevice	"Generic Keyboard"
	InputDevice	"Configured Mouse"
	InputDevice	"Generic Mouse"
EndSection

Section "DRI"
	Mode	0666
EndSection

Le bi-écran en images

Capture d’écran avec Xinerama activé
Le bi-écran en fonctionnement
Le bi-écran en fonctionnement