IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)

Exemples d'affichage sous deux écrans avec Linux

Date de publication : 28/10/06 , Date de mise à jour : 23/06/07

Par Troumad alias Bernard SIAUD (Page personnelle)
 

xorg.conf avec 2 cartes écrans différentes / xorg.conf sur un portable (chipset i915)

Avant-Propos
1. Avec deux cartes écrans différentes
1.1. Exemple de xorg.conf
1.2. Section spécifique
1.3. La gestion de l'affichage
1.4. Xinerama
2. Double écran sur un portable ou une carte écran avec deux sorties
2.1. xorg.conf
2.2. Les sections Device
2.3. Les sections ServerLayout
2.3.1. Pourquoi différents ServerLayout
2.3.2. Choix d'un ServerLayout
3. Les essais
3.1. xorg.conf
3.2. Place des écrans
3.2.1. Extrait de man xorg.conf
3.2.2. La zone écran
3.3. /var/log/Xorg.0.log
4. L'utilisation xrandr
4.1. Présentation de xrandr
4.2. version de xrandr
4.3. utilisation de xrandr
4.3.1. État d'origine
4.3.2. Placement des écrans
4.3.3. Autres possibilités
4.4. L'affichage en 1360x768
4.5. La sortie svideo
4.6. Les parties invisibles
4.7. Les GUI de xrandr
4.8. Conclusion
5. L'utilisation de plusieurs écrans
5.1. Vidéo
5.2. KDE
5.3. Gnome
5.4. iceWM
5.5. xfce4
5.6. enlightenment
5.7. FluxBox
5.8. Ion3
6. Améliorations possibles
7. Remerciements


Avant-Propos

Il y a quelques années déjà, ma possibilité de migrer sous Linux était suspendue au fait de pouvoir avoir deux écrans : un pour programmer, l'autre pour tester la page Internet générée avec le code sous les yeux, Mandrake 8.0 n'était pas encore sortie...

Avec l'aide de Mandrake 8.X, j'y suis arrivé, depuis je suis sous Linux et j'aime ça !

Quand le boulot m'a donné un portable sous Windows, il va de soit que j'ai aussitôt voulu y faire tourner Linux avec deux écrans. J'y suis arrivé toujours avec Mandriva (2005 à l'époque) et avec des documents trouvés sur Internet. Les fichiers de configuration qui fonctionnaient sous Mandriva m'ont servi à faire du double écran sur ce même PC avec Ubuntu (5.10 et 6.06) ainsi qu'avec Debian sid.

Je vais commencer à vous faire partager mes fichiers de configuration avec deux cartes écran puis celui de mon portable.


1. Avec deux cartes écrans différentes

Vous avez récupéré une vieille carte écran PCI et un écran inutilisé.

Vous avez un peu de place sur votre bureau et un slot PCI libre au fond de votre PC.

Vous avez décidé de profiter de tout ça pour mettre deux écrans sur vote PC, allez-y. J'espère vous guider !

Attention : les très vieilles cartes ISA ne sont pas concernées par cette manipulation, elles ne supportent pas l'affichage en duo (Linux et Windows => je pense que c'est un problème matériel).


1.1. Exemple de xorg.conf

C'est un exemple tiré d'une mandriva 2006, mais mon expérience m'a montré qu'on peut récupérer la partie affichage sur Debian ou Ubuntu.
#Partie spécifique à la distribution et même à la version
Section "Files"
    # Multiple FontPath entries are allowed (they are concatenated together)
    # By default, Mandrake 6.0 and later now use a font server independent of
    # the X server to render fonts.
    FontPath "unix/:-1"
EndSection

Section "ServerFlags"
    AllowMouseOpenFail # allows the server to start up even if the mouse does not work
EndSection

Section "Module"
    Load "dbe" # Double-Buffering Extension
    Load "v4l" # Video for Linux
    Load "extmod"
    Load "type1"
    Load "freetype"
    Load "glx" # 3D layer
EndSection

Section "InputDevice"
    Identifier "Keyboard1"
    Driver "keyboard"
    Option "XkbModel" "pc105"
    Option "XkbLayout" "fr"
    Option "XkbOptions" "compose:rwin"
EndSection

Section "InputDevice"
    Identifier "Mouse1"
    Driver "mouse"
    Option "Protocol" "ExplorerPS/2"
    Option "Device" "/dev/mouse"
    Option "ZAxisMapping" "6 7"
EndSection

# gestion de l'affichage qu'on peut copier d'une distribution à l'autre
Section "Monitor"
    Identifier "monitor1"
    VendorName "Plug'n Play"
    ModelName "SONY HMD-A200"
    HorizSync 30-70
    VertRefresh 48-120

    # TV fullscreen mode or DVD fullscreen output.
    # 768x576 @ 79 Hz, 50 kHz hsync
    ModeLine "768x576"     50.00  768  832  846 1000   576  590  595  630

    # 768x576 @ 100 Hz, 61.6 kHz hsync
    ModeLine "768x576"     63.07  768  800  960 1024   576  578  590  616
EndSection

Section "Monitor"
    Identifier "monitor2"

    # TV fullscreen mode or DVD fullscreen output.
    # 768x576 @ 79 Hz, 50 kHz hsync
    ModeLine "768x576"     50.00  768  832  846 1000   576  590  595  630

    # 768x576 @ 100 Hz, 61.6 kHz hsync
    ModeLine "768x576"     63.07  768  800  960 1024   576  578  590  616
EndSection

Section "Device"
    Identifier "device1"
    VendorName "S3 Inc."
    BoardName "S3 Savage4"
    Driver "savage"
    VideoRam 4096
    Screen 0
    BusID "PCI:0:5:0"
    Option "DPMS"
    Option "no_accel"   # You may enable this if there are timeouts when starting X
EndSection

Section "Device"
    Identifier "device2"
    VendorName "VIA Technologies Inc"
    BoardName "S3 UniChrome"
    Driver "via"
    Screen 0
    BusID "PCI:1:0:0"
    Option "DPMS"
EndSection

Section "Screen"
    Identifier "screen1"
    Device "device1"
    Monitor "monitor1"
    DefaultColorDepth 16

    Subsection "Display"
        Depth 16
        Virtual 1024 768
    EndSubsection

EndSection

Section "Screen"
    Identifier "screen2"
    Device "device2"
    Monitor "monitor2"
    DefaultColorDepth 16

    Subsection "Display"
        Depth 8
        Virtual 1024 768
    EndSubsection

    Subsection "Display"
        Depth 15
        Virtual 1024 768
    EndSubsection

    Subsection "Display"
        Depth 16
        Virtual 1024 768
    EndSubsection

    Subsection "Display"
        Depth 24
        Virtual 1024 768
    EndSubsection
EndSection

Section "ServerLayout"
    Identifier "layout1"
    InputDevice "Keyboard1" "CoreKeyboard"
    InputDevice "Mouse1" "CorePointer"
    Screen "screen1"
    Screen "screen2" RightOf "screen1"
    Option "Xinerama"
EndSection

1.2. Section spécifique

Cette section, je vous conseille de la laisser générer par votre distribution.

Cependant, vous pouvez ajouter des polices de caractères en indiquant leur emplacement qui dépend de votre version de Linux. Pour une Mandriva 2006 ou précédente :
FontPath "/usr/share/fonts/misc:unscaled"
Pour une Mandriva 2007 :
FontPath "/usr/X11R6/lib/X11/fonts/75dpi:unscaled"
FontPath "/usr/X11R6/lib/X11/fonts/TTF"
Pour une Debian sid en 2006 :
FontPath        "/usr/share/fonts/X11/75dpi"
FontPath        "/usr/lib/X11/fonts/75dpi"
Ajouter une police de caractères m'a déjà permis de sauver une mise à jour plantée qui empêchait de lancer X car la font fixed manquait. J'ai rajouté la police TTF et le serveur X a enfin pu repartir.

La section qui semble vraiment dépendante de la distribution est la section module.


1.3. La gestion de l'affichage

Cette partie informe sur les cartes écrans (section Device), les écrans (section Monitor), les couples carte/écran (section Screen) et comment on met tout ça ensemble avec clavier + souris définis dans la première partie (section ServerLayout).
Comme elle est indépendante de la distribution, vous pouvez la faire générer par Mandriva et la conserver sur votre distribution.

La section la plus critique est la section Device : elle doit définir le driver utilisé (Driver) pour la carte ainsi que son emplacement dans le fond de panier (BusID). Un changement de place de la carte PCI changera son BusID, donc la configuration de cette partie. Toujours sur les cartes écrans, j'ai deux remarques à faire. La première, c'est que je ne suis pas arrivé à faire en tourner deux avec les mêmes drivers (je n'ai guère essayé car j'ai toujours eu des cartes cartes ISA en stock) et si j'avais une nVidia, en prenant le noyau nvidia de Mandrake (pas testé sous Mandriva), je ne pouvais plus faire fonctionner l'autre (problème de configuration noyau sûrement, mais pas testé).

La section que l'on doit configurer soi même, c'est ServerLayout : je n'ai pas trouvé de logiciel pour faire le placement relatif des écrans. J'ai bien essayé de faire un programme copiant un peu l'interface de Windows, mais je me suis arrêté faute de tests suffisants http://troumad.info/Linux/mon_essai_mode.zip. Cette section comporte aussi l'option xinerama, pour qu'elle soit valide, il faut que la profondeur (nombre de couleurs) soit la même sur les écrans. Elle se règle dans la section Screen (paramètre DefaultColorDepth).


1.4. Xinerama

L'option Xinerama du ServerLayout n'est pas obligatoire. Son but est d'unifier les deux écrans en un grand écran. Elle permet de passer les fenêtres d'une application d'une fenêtre à l'autre, d'étendre une fenêtre sur deux écrans (ou plus). Cependant, il est tout à fait possible de ne pas vouloir cette option.

La désactivation de cette option rend les deux écrans indépendants, même si on ne se logge que sur un des deux pour accéder aux deux. Cette desactivation permet de beneficier de l'acceleration 3d de chacune des cartes avec leur driver respectif. Ceci peut permettre, quand on utilise plusieurs bureaux virtuels de changer de bureaux que sur un seul des deux écrans.


2. Double écran sur un portable ou une carte écran avec deux sorties

Mon portable est un DELL LATITUDE D510 avec une carte vidéo intel i915GM dont le driver est le i810. Donc un "man i810" vous aidera beaucoup pour améliorer votre configuration.


2.1. xorg.conf

Section "Files"
    # font server independent of the X server to render fonts.
    FontPath "unix/:-1"
EndSection

Section "Extensions"
    Option "Composite"
EndSection

Section "ServerFlags"
    AllowMouseOpenFail # allows the server to start up even if the mouse does not work
EndSection

Section "Module"
    Load "dbe" # Double-Buffering Extension
    Load "v4l" # Video for Linux
    Load "extmod"
    Load "type1"
    Load "freetype"
    Load "glx" # 3D layer
    Load "dri" # direct rendering
EndSection

Section "InputDevice"
    Identifier "Keyboard1"
    Driver "kbd"
    Option "XkbModel" "pc105"
    Option "XkbLayout" "fr"
    Option "XkbOptions" "compose:rwin"
EndSection

Section "InputDevice"
    Identifier "Mouse1"
    Driver "mouse"
    Option "Protocol" "ExplorerPS/2"
    Option "Device" "/dev/mouse"
EndSection

Section "InputDevice"
    Identifier "SynapticsMouse1"
    Driver "synaptics"
    Option "EdgeMotionMinSpeed" "200"
    Option "MinSpeed" "0.8"
    Option "MaxSpeed" "1.00"
    Option "BottomEdge" "650"
    Option "EdgeMotionMaxSpeed" "200"
    Option "UpDownScrolling" "0"
    Option "CircScrollTrigger" "2"
    Option "SHMConfig" "on"
    Option "LeftEdge" "120"
    Option "FingerLow" "14"
    Option "HorizScrollDelta" "20"
    Option "MaxTapMove" "110"
    Option "FingerHigh" "15"
    Option "VertScrollDelta" "20"
    Option "CircularScrolling" "1"
    Option "AccelFactor" "0.015"
    Option "TopEdge" "120"
    Option "RightEdge" "830"
EndSection

Section "Monitor"
    Identifier "monitor1"
    VendorName "Dell"
    ModelName "Dell 1024x768 Laptop Display Panel"
    HorizSync 31.5-48.5
    VertRefresh 59.0-75.0
EndSection

Section "Monitor"
    Identifier "monitor2"
    VendorName "Plug'n Play"
    ModelName "SAMTRON"
    HorizSync 30-81
    VertRefresh 56-75

    # Monitor preferred modeline (60.0 Hz vsync, 64.0 kHz hsync, ratio 5/4)
    ModeLine "1280x1024" 108 1280 1328 1440 1688 1024 1025 1028 1066 +hsync +vsync

    # TV fullscreen mode or DVD fullscreen output.
    # 768x576 @ 79 Hz, 50 kHz hsync
    ModeLine "768x576"     50.00  768  832  846 1000   576  590  595  630

    # 768x576 @ 100 Hz, 61.6 kHz hsync
    ModeLine "768x576"     63.07  768  800  960 1024   576  578  590  616
EndSection

Section "Monitor"
    Identifier "TV1"
    ModelName "Svideo"
EndSection

Section "Device"
    Identifier "device1"
    VendorName "Intel Corp."
    BoardName "Intel 915"
    Driver "i810"
    Screen 0
    BusID "PCI:0:2:0"
    Option "DPMS"
    Option "May_Need_ForceBIOS" "1"
    Option "XaaNoOffscreenPixmaps" "1"
    Option "AccelMethod" "EXA"
    Option "MonitorLayout" "CRT,LFP"
EndSection

Section "Device"
    Identifier "device2"

    # ecran ext
    Driver "i810"
    Screen 1
    BusID "PCI:0:2:0"
    Option "DPMS"
    Option "May_Need_ForceBIOS" "1"
    Option "XaaNoOffscreenPixmaps" "1"
    Option "AccelMethod" "EXA"
EndSection

Section "Device"
    Identifier "device-seul"
    VendorName "Intel Corp."
    BoardName "Intel 915"
    Driver "i810"
    BusID "PCI:0:2:0"
    Option "DPMS"
    Option "May_Need_ForceBIOS" "1"
    Option "XaaNoOffscreenPixmaps" "1"
    Option "MonitorLayout" "CRT,LFP"
    Option "Clone" "TRUE"
    Option "SWCursor"
EndSection

Section "Device"
    Identifier "Card-TV"
    VendorName "Intel Corp."
    BoardName "Intel 915"
    Driver "i810"
    BusID "PCI:0:2:0"
    Option "MonitorLayout" "TV"
EndSection

Section "Screen"
    Identifier "screenTV1"
    Device "Card-TV"
    Monitor "TV1"
    DefaultColorDepth 16

    Subsection "Display"
        Depth 16
        Virtual 1366 768
    EndSubsection
EndSection

Section "Screen"
    Identifier "screen2"
    Device "device2"
    Monitor "monitor2"

    # ecran extérieur
    DefaultColorDepth 16

    Subsection "Display"
        Depth 16
        Virtual 1280 1024
    EndSubsection

EndSection

Section "Screen"
    Identifier "screen-seul"
    Device "device-seul"
    Monitor "monitor2"
    DefaultColorDepth 16

    Subsection "Display"
        Depth 16
        Virtual 1024 768
    EndSubsection

EndSection

Section "Screen"
    Identifier "screen1"
    Device "device1"
    Monitor "monitor1"
    DefaultColorDepth 16

    Subsection "Display"
        Depth 16
        Modes "1024x768" "832x624" "800x600" "640x480" "480x360" "320x240"
    EndSubsection

EndSection

Section "ServerLayout"
    Identifier "double"
    InputDevice "Keyboard1" "CoreKeyboard"
    InputDevice "Mouse1" "CorePointer"
    InputDevice "SynapticsMouse1" "AlwaysCore"
    Screen "screen1"
    Screen "screen2" RightOf "screen1"
    Option "Xinerama" "on"
EndSection

Section "ServerLayout"
    Identifier "seul"
    InputDevice "Keyboard1" "CoreKeyboard"
    InputDevice "Mouse1" "CorePointer"
    InputDevice "SynapticsMouse1" "AlwaysCore"
    Screen "screen-seul"
EndSection

Section "ServerLayout"
    Identifier "TV"
    InputDevice "Keyboard1" "CoreKeyboard"
    InputDevice "Mouse1" "CorePointer"
    Screen "screenTV1"
EndSection

2.2. Les sections Device

C'est sur ces sections que j'ai dû intervenir. Que ce soit Mandriva ou Ubuntu, personne n'était arrivé à me faire l'affichage sur les deux écrans alors qu'un essai sous l'OS concurent trop connu m'a montré que c'était possible.

Ce sont les deux lignes suivantes que j'ai du rajouter dans la partie device. La première indiquant de quelle sortie je parle (la 0 ou la 1), la seconde indiquant la nature des écrans. Cette seconde est aussi indispensable pour l'envoi simultané du même affichage sur l'écran du portable (ou la première sortie d'une carte avec deux sorties - HDMI régulièrement ) et sa sortie VGA. C'est encore elle que l'on doit modifier pour avoir la sortie TV (PAL indisponible sous Linux avec le chipset Intel à l'instant où j'écris cet article).
    Screen 0
    Option "MonitorLayout" "CRT,LFP"

2.3. Les sections ServerLayout

Dans cet exemple, contrairement à l'exemple précédent, plusieurs sections ServerLayout sont présentes. Ceci est assez rare et parfois bien utile.


2.3.1. Pourquoi différents ServerLayout

Avec un portable, on peut être dans plusieurs environnements suivant où on est. Il faut donc les prévoir, c'est pour cela que j'ai mis plusieurs ServerLayout. En effet, chacun défini un environnement de travail différent.

Le premier définit un affichage différent sur l'écran du portable et sur un écran extérieur, le mode double écran habituel. Ce mode, bien qu'utilisable avec un vidéo projecteur, n'est pas très pratique dans un tel environnement de travail.

Comme on n'a pas toujours d'écran extérieur disponible, le second défini un affichage uniquement sur l'écran du portable et comme ça ne demande rien de plus, j'impose en même temps une duplication sur la sortie extérieure afin de penser à un vidéo projecteur possible.

Le dernier active la sortie TV du portable afin de sortir sur la TV en mode SVideo.


2.3.2. Choix d'un ServerLayout

Par défaut, c'est le premier ServerLayout qui est choisi. Mais, dans la section ServerFlags, on peut en choisir un particulier avec Option "DefaultServerLayout" "layout-id". Mais ces options étant en dur dans le fichier xorg.conf, ceci ne permet pas de changer facilement de configuration d'affichage !

Sous Mandriva, mon portable ne lance pas X au boot, je le fais moi-même à la main. Comme ça, je peux donc choisir la configuration graphique. Voici les commandes qui me servent à lancer le serveur X avec mon utilisateur lambda une fois logué en ligne de commande :
alias seul="Ice -layout seul"
alias loin="Xfce -layout seul"
alias TV='Ice -layout TV'
alias Ice="startx /etc/X11/xdm/Xsession IceWM -- "
alias Gn="startx /etc/X11/xdm/Xsession GNOME -- "
alias Win="startx /etc/X11/xdm/Xsession WindowMaker -- "
alias En="startx /etc/X11/xdm/Xsession Enlightenment -- "
alias Black="startx /etc/X11/xdm/Xsession BlackBox -- "
alias Saw="startx /etc/X11/xdm/Xsession Sawfish -- "
alias Xfce="startx /etc/X11/xdm/Xsession xfce4 -- "
alias Kde="startx /etc/X11/xdm/Xsession KDE -- "
Les interfaces graphiques disponibles sous Mandriva sont visibles dans /etc/X11/wmsession.d/ .

Par défaut, je lance Ice, quand je souhaite un affichage unique, je choisi seul. Je peux même choisir loin afin de ne pas lancer le startup de IceWM qui râle quand je n'ai pas de connexion internet avec firefox et surtout thunderbird. À vous d'adapter ces alias si iceWM n'est pas votre interface graphique préférée !

Je suis sans voie pour les autres distributions. Je peux juste dire que pour Debian, ça ne marche pas et que je serais heureux que l'on me donne la solution !

Remarques : ceci devient heureusement inutile avec le nouveau xorg qui pourra s'adapter automatiquement aux nouvelles configurations sans avoir à choisir un ServerLayout particulier.


3. Les essais

Il est rare que tout soit bon du premier coup !


3.1. xorg.conf

Je conseille fortement avec toute modification manuelle du fichier /etc/X/xorg.conf de le copier dans un répertoire dédié en rajoutant à son nom un suffixe pour mieux l'identifier.

Le point important à savoir quand on lance le gestionnaire de connexion, c'est que si dans le répertoire de lancement, il trouve un fichier de configuration de xorg, alors ce sera celui-ci qui sera utilisé. Donc, si vous modifiez le fichier /etc/X/xorg.conf et qu'il ne se passe rien, regardez ce qui se trouve dans le répertoire à partir du quel vous lancer X !


3.2. Place des écrans

La place relative des écrans se gère dans la section ServerLayout. Ce qui suit est une traduction personnelle du "man xorg.conf", juste la partie qui définit la position relative des écrans.


3.2.1. Extrait de man xorg.conf

Screen screen-num "screen-id" position-information
Chaque écran utilisé doit être défini comme ceci. Le champ screen-id est obligatoire, et indique de quel écran (section screen) il s'agit. Le champ "screen-num" est facultatif, et peut être employé pour indiquer le numéro de l'écran dans des configurations multi-tête. Quand ce champ est omis, les écrans seront numérotés dans l'ordre d'apparition. Les numéros d'écran devront être des entiers en 0 et le nombre d'écran moins un (tous les nombres de 0 au plus grand devront être pris). Le champ "position-information" décrit la position relative des écrans. On peut fournir cette information de différentes manières :

  • x y
  • Absolute x y
    Ces deux méthodes indiquent que les coordonnées du coin supérieur gauche sont (x,y). Le mot-clé "Absolute" est facultatif. Quelques versions plus anciennes de Xorg (4.2 et antérieures) n'identifient pas le mot-clef "Absolute", ainsi il est plus sûr d'indiquer juste les coordonnées sans ce mot clef.
  • RightOf "screen-id"
  • LeftOf "screen-id"
  • Above "screen-id"
  • Below "screen-id"
  • Relative "screen-id" x y
    Celles-ci donnent la localisation de l'écran relativement à un autre écran. Les quatre premières placent l'écran immédiatement à droite, à gauche, en haut ou au-dessous de l'autre écran. En plaçant à droite ou à gauche, les bords supérieurs sont alignés. En plaçant au-dessus ou en-dessous, des bords gauches sont alignés. La forme "Relative" indique l'excentration d'origine de l'écran (coin supérieur gauche) relativement à l'origine d'un autre écran.

3.2.2. La zone écran

Une maximisation sur l'ensemble des fenêtres se fait sur le rectangle minimal qui englobe tout l'affichage. Son haut sera le point le plus haut de l'ensemble des écrans, sa droite, le point le plus à droite, sa gauche, le point le plus à gauche et son bas, le point le plus en bas. L'image à gauche est un exemple avec son portable et son écran extérieur. Le coin noir est le coin invisible.
->Zoom sur le coin noir->
Comme il n'est pas obligatoire de couvrir toute cette surface, il peut y avoir des zones mortes. La maximisation d'une fenêtre sur un écran se fera sur l'écran complet sans prendre en compte cette zone écran. Mais, un menu déroulant se débrouillera pour rester sur cette zone écran et donc pourra parfois sortir de la zone visible. L'image à droite, un zoom de l'image précédente, est un exemple de menu déroulant à moitié caché, si je l'avais fait apparaître plus à gauche, on ne verrait plus le bas.

3.3. /var/log/Xorg.0.log

Le parcours du fichier de log peut être très intéressant en cas d'essais de modifications manuelles du fichier de configuration de xorg. Un grep EE /var/log/Xorg.0.log vous donnera la liste des options défectueuses et un grep WW /var/log/Xorg.0.log vous informera des petits défauts. Ceci peut permettre plus facilement de trouver d'où vient l'origine de votre problème et peut indiquer que des paramètres ne sont pas valables avec le driver que vous utilisez bien que vous les ayez crus universels. Je donnerais l'exemple de Option "TV" "PAL-N" qui n'existe pas avec le driver i810.


4. L'utilisation xrandr


4.1. Présentation de xrandr

Il semblerait que la configuration par xorg.conf deviendra assez vite désuète. En effet, il est déjà possible d'utiliser les fonctionnalités RandR de xorg en utilisant la commande xrandr. Un des gros avantage de cette dernière est de pouvoir reconfigurer l'affichage sans avoir à relancer le serveur X. C'est donc très pratique dès que l'environnement est variable, comme avec un ordinateur portable.

La meilleure façon d'appréhender les possibilités de xrandr est de regarder man xrandr qui est traduit en français. Attention, seules les versions de RandR (composante de xorg) supérieures ou égal à 1.2 peuvent configurer un affichage sur deux écrans. Ceci est valable à partir de la version 1.3 de xorg.

Le double écran n'est plus géré par le fichier de configuration /etc/X11/xorg.conf, mais il est géré par l'utilisateur final qui peut l'adapter à ses besoins. xorg.conf ne doit générer (pour le moment au moins) qu'un écran virtuel englobant l'affichage qu'on voudra avoir. Ce xorg.conf pourra donc être extrémement réduit. Voici la partie spécifique à l'affichage :
Section "Monitor"
	    Identifier "monitor1"
	    VendorName "Plug'n Play"
	    ModelName ""

	    HorizSync 28.0 - 81.0
	    VertRefresh 56.0 - 75.0
	    Modeline "1360x768_60.00"  85.86  1366 1460 1604 1800  768 769 772 795  -HSync +Vsync
	    Option "DPMS"
EndSection

Section "Device"
	    Identifier "device1"
	    VendorName "Intel Corp."
	    BoardName "Intel 915"
	    Driver "intel"
	    BusID "PCI:0:2:0"
	    Option "DPMS"
	    Option "XaaNoOffscreenPixmaps" #"1"
	    Option "SWCursor"
EndSection

Section "Screen"
	    Identifier "screen1"
	    Device "device1"
	    Monitor "monitor1"
	    DefaultColorDepth 16

	    Subsection "Display"
	        Virtual 2304 1536
		# je pourrais mettre côté à côte un écran de 1024 de large et un autre de 1280
		# ou l'un sur l'autre 2 écrans de 768 de hauts
	    EndSubsection
EndSection

Section "ServerLayout"
	    Identifier "xrandr"
	    InputDevice "Keyboard1" "CoreKeyboard"
	    InputDevice "Mouse1" "CorePointer"
	    InputDevice "SynapticsMouse1" "AlwaysCore"
	    Screen "screen1"
EndSection

4.2. version de xrandr

Un xrandr vous informera rapidement des possibilités de votre configuration :
[troumad@portable][~/tmp]$ xrandr --prop
xrandr: Server RandR version before 1.2
[troumad@localhost][~]  xrandr
Screen 0: minimum 1600 x 600, current 2048 x 768, maximum 2048 x 768
default connected 2048x768+0+0 0mm x 0mm
   2048x768      429.0* 
   1600x600      429.0 
Le premier exemple indique la présence d'une version trop ancienne de RandR pour pouvoir gérer un affichage sur 2 écrans. Le second affiche une configuration avec un seul écran. Le plus surprenant, dans ce second cas, c'est qu'on a déjà un affichage sur 2 écrans avec le driver ati. Donc, dans l'état actuel des choses, xrandr ne peut rien faire à ce niveau. Cependant, pour pouvoir avoir cet affichage sur deux écrans, j'ai du modifier le xorg.conf par rapport à l'ancienne version de xorg :
[...]

Section "Device"
    [...]
    Option "MetaModes" "1024x768-1024x768 800x600-800x600"
    [...]
EndSection

Section "Screen"
    [...]
    Subsection "Display"
        Modes "1024x768"
        Virtual 2048 768
    EndSubsection
EndSection

[...]

Section "ServerLayout"
    Identifier "layout1"
    InputDevice "Keyboard1" "CoreKeyboard"
    InputDevice "Mouse1" "CorePointer"
    Screen "screen0"
EndSection
Ça marche comme ça, mais je ne suis pas heureux de cet état des choses car je n'ai défini nulle part la place de relative des deux écrans. Peut-être que lorsque cette version de xorg sortira définitivement en version stable, je pourrai trouver plus d'explications.


4.3. utilisation de xrandr

Toutes les explications ici présentées n'ont été testée qu'avec le driver intel sur un chipset i915GM. Si vous avez des retours sur d'autres chipset, je serai heureux de les avoir.


4.3.1. État d'origine

Par defaut, il y a le même affichage sur les deux écrans, même si parfois, ils ont une taille différente. Dans ce cas, le petit écran ne va afficher qu'une partie de l'écran. L'utilisateur verra sur le total de ces deux écrans l'image ci-dessous :

Alors que l'écran virtuel ne sera que le plus gran des écrans.

Il vous restera alors à configurer votre affichage : la place d'un écran par rapport à l'autre.

C'est encore avec xrandr qu'on va identifier nos écrans ainsi que leurs modes disponibles. xrandr --prop pourra apporter plus de renseignements.
[troumad@portable][~]$ xrandr
Screen 0: minimum 320 x 200, current 2304 x 1024, maximum 2304 x 1536
VGA connected 1280x1024+1024+0 (normal left inverted right) 376mm x 301mm
    1280x1024      60.0*+   59.9  
    1360x768_60.00   60.0  
    1152x864       75.0     74.8  
    1024x768       70.1     60.0  
    832x624        74.6  
    800x600        72.2     75.0     60.3     56.2  
    640x480        75.0     72.8     66.7     60.0  
    720x400        70.1  
LVDS connected 1024x768+0+0 (normal left inverted right) 304mm x 228mm
    1024x768       60.0*+
    800x600        60.3  
    640x480        59.9  
TMDS-1 disconnected (normal left inverted right)
TV disconnected (normal left inverted right)
Je repère avec cette instruction que j'ai quatre sorties écran (malheureusement, je n'en ai que 3 réellement). La première : la sortie VGA, la seconde : l'écran du portable, la troisième : inconnue et la quatrième, la sortie TV. Au début, je voyais que mon écran plat n'était pas entièrement reconnu : il manquait le mode 1280x1024 ! Ceci était du au mauvais paramétrage des paramètres HorizSync et VertRefresh.


4.3.2. Placement des écrans

Pour la mise en place du double écran, l'écran virtuel maximal défini dans la section Screen : Virtual 2304 1536 doit contenir l'ensemble des deux écrans. xrandr pourra utiliser simplement comme ceci : xrandr --output VGA --above LVDS ou comme ceci : randr --output LVDS --left-of VGA. Au démarrage, l'affichage se fait en mode clone sur les deux écrans, cette dernière instruction leur permet d'afficher chacun une partie différente de l'écran virtuel et d'étendre l'écran virtuel sur le rectangle minimal couvrant notre affichage. Si on place juste les écrans dessus, dessous, à gauche ou à droite, les écrans sont alignés par défaut comme avec l'ancienne version de xorg : par le haut et la droite.

Si vous voulez modifier un réglage précédent, je vous conseille de revenir à zéro avant de le faire :
[troumad@portable][~]$ xrandr --output LVDS --pos 0x0
[troumad@portable][~]$ xrandr --output LVDS --pos 0x0
[troumad@portable][~]$ xrandr --output VGA --pos 1026x-230
[troumad@portable][~]$ xrandr
Screen 0: minimum 320 x 200, current 2306 x 1024, maximum 2390 x 1536
VGA connected 1280x1024+1026+0 (normal left inverted right) 376mm x 301mm
   1280x1024      60.0*+   59.9  
   1360x768_60.00   60.0  
   1152x864       75.0     74.8  
   1024x768       70.1     60.0  
   832x624        74.6  
   800x600        72.2     75.0     60.3     56.2  
   640x480        75.0     72.8     66.7     60.0  
   720x400        70.1  
LVDS connected 1024x768+0+230 (normal left inverted right) 304mm x 228mm
   1024x768       60.0*+
   800x600        60.3  
   640x480        59.9  
TMDS-1 disconnected (normal left inverted right)
TV disconnected (normal left inverted right)
J'ai fait un réglage avec un nombre négatif : au lieu de descendre l'écran VGA, ce réglage a monté l'écran LVDS. On voit ceci avec le xrandr que j'ai fait juste après : les coordonnées de l'écran VGA sont 1026+0 et celle du LVDS sont 0+230. Il faut donc faire attention avec l'utilisation d'une coordonnée négative sur un écran car pour l'annuler, il faut intervenir sur celles de tous les autres. Voici le résultat final :

  Copie d'écran éffectuée sous iceWM.

4.3.3. Autres possibilités

xrandr possède de nombreux autres avantages et permet de s'adapter à de nombreuses situations suivant où vous arrivez avec votre ordinateur portable :

  • le rétroprojecteur est accroché au plafond et l'image est à l'envers : xrandr --output VGA --rotate inverted ou xrandr --output VGA --reflect xy. Le rétro projecteur peut même être posé sur le côté, dans ce cas, on dispose de 'left' ou 'right'. xrandr --output VGA --rotate normal si vous venez de faire l'essai sur un écran dans le bon sens afin de retrouver la configuration initiale ;) .
  • Le rétroprojecteur éclaire l'envers de l'écran qu'on voit par transparence : xrandr --output VGA --reflect x et xrandr --output VGA --reflect normal pour revenir dans la configuration d'origine (--reflect ne marche pas chez moi).
  • Un rétroprojecteur à l'envers par transparence : somme des deux points précédents ou uniquement une symétrie suivant y...

4.4. L'affichage en 1360x768

Bien que lors de la mise en route de xorg, avec mon écran 1360x768, j'ai une définition de 1024x768 sur la sortie VGA (même affichage que l'écran du portable), xrandr offre les mêmes options que précédemment, j'active donc l'affichage en 1360x768 avec une des deux commandes suivantes :
xrandr --output VGA --mode 1360x768_60.00
xrandr --output VGA --auto
J'aurais pu éviter ce problème, mais comme c'est un portable qui est régulièrement sur un écran 1280x1024, je ne peux pas choisir cet écran 16/9 comme configuration principale ! Après, il suffit de placer les deux écrans l'un par rapport à l'autre en fonction de votre configuration locale : xrandr --output LVDS --below VGA par exemple.


4.5. La sortie svideo

Dès que la sortie svideo est branchée, l'affichage se fait aussi dessus. La commande xrandr nous montre que la sortie TV est active et on peut donc adapter comme précédement l'affichage de la sortie svideo à la TV qui est en 1024x768 par défaut ainsi que placer la TV par rapport à l'écran de l'ordinateur selon notre disposition locale. Je fais donc un xrandr --output TV --mode 848x480 --above LVDS pour avoir ma configuration finale.

  Vous pouvez remarquer sur
cette copie d'écran l'alignement
à droite qui se fait naturellement
lors de l'empilement vertical
d'écrans.

4.6. Les parties invisibles

Contrairement à l'ancienne version de xorg, les parties invisibles apparaissent dans les copies d'écrans, en plus avec les caractéristiques du fond de l'écran. Pour mieux la voir, je l'ai teinté en gris sur le dessin ci-dessus alors qu'elle aurait du être en beige comme la petite bande de fond d'écran qui reste sur le bord juste à côté. Ceci signale que cette partie existe. Cette existence peut parfois surprendre : la souris peut aller dans cet espace et elle devient donc invisible elle aussi !


4.7. Les GUI de xrandr

Les GUI de xrandr sont grandr_applet sous gnome et krandrtary sous KDE. Mais pour le moment, RandR 1.2 n'étant pas encore dans les distributions stables, ils ne gérent que RandR 1.0 ou 1.1, donc pas le multi-écran. Ceci se comprend car il reste des bugs à corriger !

Pour un fonctionnement avec un portable avec différente possibilité d'écrans en fonction du lieu, je me suis fait un petit programme en C que vous pouvez récupérer : http://troumad.org/Linux/essai/ecran.zip.


4.8. Conclusion

Ces nouvelles options permettent de gérer plusieurs configurations d'affichage différentes sans avoir à passer par une modification du fichier de configuration /etc/X11/xorg.conf. Le grand avantage de cette nouveauté est de pouvoir s'adapter à son environnement graphique sans avoir accès aux droits administrateurs pour modifier un fichier de configuration. Ceci est d'autant plus intéressant que les ordinateurs portables se démocratisent en même temps que les vidéos projecteurs, donc les utilisateurs sont de plus en plus souvent confrontés à des configurations différentes avec le même matériel.


5. L'utilisation de plusieurs écrans


5.1. Vidéo

Au moins sous Mandriva 2007.X (pas avec la nouvelle version de xorg), j'ai un problème d'affichage des vidéos avec l'affichage sur plusieurs écrans. Je viens de trouver le remède sur Mandriva Linux 2007 Errata : j'applique les correctifs pour les Bureaux 3D ! Est-ce dû à Mandriva ? À xinerama ? Au couple Xinerama chipset i915GM ?


5.2. KDE

Sous KDE, la gestion des deux écrans est automatique. On peut tout simplement avec la souris placer la barre des tâches où on souhaite en la faisant glisser à l'emplacement souhaité.

Il est aussi possible de régler KDE pour l'utilisation personnalisée des deux écrans avec le centre de configuration de KDE dans périphérique affichage.

Vous pouvez par exemple choisir en désactivant la "maximisation avec plusieurs moniteurs" qu'une maximisation d'une fenêtre se fasse sur l'ensemble des écrans, la zone écran. On peut aussi bloquer les fenêtres maximisées sur leur écran en déactivant l'option kcontrol > bureau > comportement des fenêtres > Déplacement > permettre le déplacement et le redimentionnement des fenêtres maximisées.


5.3. Gnome

Comme sous KDE l'emplacement des barres de tâche se gère simplement à la souris.


5.4. iceWM

L'emplacement de la barre de tâche se gère sur le fichier de configuration ~/.icewm/preferences avec l'option XineramaPrimaryScreen=1 (0 pour le premier écran définit dans le ServerLayout). Bien que l'affichage de la barre se fasse sur un seul écran, la maximisation des écrans sur l'écran sans la barre de tache ne prend pas la place occupée par cette barre sur l'autre écran.


5.5. xfce4

L'emplacement des barres de menu se gère avec clic-droit sur le panneau de configuration > Configurer le panneau. Tout en bas, on choisit le moniteur. Juste en dessus on choisit la place de la barre sur le moniteur.

Un avantage de xfce4, c'est que si on veut bouger une fenêtre maximisée, celle-ci diminue ("se démaximise").


5.6. enlightenment

Les miniatures des bureaux virtuels peuvent poser un problème si le coin bas à gauche de la zone écran n'est pas visible. Par défaut, ces miniatures y sont placées, alors elles sont inaccessibles et invisibles ! Il faudra les mettre ailleurs grâce à une autre configuration.

Voir Installation et configuration d'Enlightenment dans Mandriva pour plus d'informations sur cet environnement.


5.7. FluxBox

Pas génial, je dirais. En effet, la barre de menu ne se fixe pas sur un écran en position vertical, mais déborde toujours sur le voisin ! En plus, elle se met sans problème (pour elle) dans la zone morte de mon écran.

Vous me direz, de la mettre verticalement cette barre ! Et bien, je n'y arrive pas avec ma version...


5.8. Ion3

Pas fait pour le double écran. En effet, ion3 ne prend en compte que la zone écran et ne gère pas du tout le coin noir en cas de non recouvrement complet de cette zone !

Voir http://dev.nozav.org/intro_ion.html pour plus d'informations sur cet environnement vraiment différent.


6. Améliorations possibles

Si vous avez lu mon document, vous êtes sûrement tombés sur des questions que je me pose, je suis bien sur preneur de toute réponse. Vous avez aussi vu que j'ai testé très peu de distributions : Ubuntu (que je n'utilise plus), Mandriva (que j'utilise principalement en version power pack ou cooker) ou Debian. Si vous testez sur d'autres distributions, dites-le moi !

Je ne suis pas un expert en la matière, j'ai juste passé du temps à tester la configuration de xorg pour arriver à mes fins. Comme j'y suis arrivé, j'ai fait ce texte pour vous aider à y arriver aussi, pour informer que c'est faisable si vous n'y pensiez pas, pour dire que, aussi, sous Linux c'est faisable. Donc, si vous pensez que je dois rajouter des informations qui vous semblent importantes, faites-les moi parvenir pour que tous puissent en bénéficier.


7. Remerciements

Pour la relecture, je remercie Gorgonite, Miles et trotters213.



Valid XHTML 1.1!Valid CSS!

Copyright (c) 2006 Bernard SIAUD. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.2 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the license is included in the section entitled "GNU Free Documentation License" : http://www.gnu.org/licenses/fdl.txt