Xorg - dual screen

Posté le ven 03 décembre 2010 dans linux

Rien à faire, pas moyen d'avoir l'image sur votre second écran ! Ce qui va suivre devrait intéresser les personnes qui souhaitent :

  • brancher un projecteur vidéo sur leur portable ;
  • utiliser un écran plus confortable que celui de leur portable lorsqu'ils sont au bureau ou à la maison ;
  • utiliser un bureau étendu, c'est-à-dire un bureau réparti sur deux écrans ;
  • brancher votre ordinateur à la télévision grâce au connecteur HDMI.

Je présenterai uniquement l'activation du double écran pour les ordinateurs possédant une seule carte graphique muni de deux connecteurs. Ce qui est le cas des ordinateurs portables et des personnes qui disposent de plusieurs connecteurs sur leur carte graphique.

J'ai réalisé cette configuration sur un vieux portable équipé d'une carte ATI Radeon Mobility IGP-320M (c'est-à-dire une carte pas très performante). La version de Xorg était la 7.4.1 nous sommes aujourd'hui à la version 7.7, mais ce qui suit fonctionne toujours.

Xorg

Xorg, c'est la partie de votre GNU/Linux qui gère l'affichage en mode graphique. Depuis la version 7.3 (à vérifier pour la version), le fichier xorg.conf n'est plus obligatoire. Xorg est (en général) capable de détecter et configurer votre matériel tout seul. Et c'est bien comme cela, nous ne devrons pas y toucher !

Si vous lisez la page de man sur xorg.conf, pour activer le double écran, il est indiqué de spécifier une section screen par connecteur, une section monitor par écran, … et blablabla. Cette méthode n'a jamais fonctionné chez moi et fait planter le serveur X. On peut donc oublier tout ceci.

XRandr

C'est grâce à Xrandr que nous allons configurer le double écran. Il permet de déterminer la taille de l'écran, son orientation, sa réflexion, la définition des moniteurs. xrandr est un outil à utiliser en ligne de commande, ce qui suit doit donc être tapé dans une console. Voici ce que donne comme résultat la commande xrandr sur ma machine :

$ xrandr
Screen 0: minimum 320 x 200, current 1680 x 1050, maximum 1680 x 1200
VGA-0 connected 1680x1050+0+0 (normal left inverted right x axis y axis) 433mm x 271mm
   1680x1050      60.0*+   60.0     60.0  
   1600x1024      60.2  
   1400x1050      74.8     70.0     60.0  
   1280x1024      75.0     60.0     60.0  
   1440x900       59.9  
   1280x960       60.0     60.0  
   1360x768       59.8  
   1152x864       75.0     75.0     75.0     70.0     60.0  
   1024x768       75.1     75.0     70.1     60.0  
   832x624        74.6  
   800x600        72.2     75.0     60.3     56.2  
   640x480        75.0     72.8     72.8     75.0     66.7     60.0     59.9  
   720x400        70.1  
LVDS connected 1024x768+0+0 (normal left inverted right x axis y axis) 0mm x 0mm
   1024x768       60.0*+   60.0  
   800x600        60.3  
   640x480        59.9  
S-video disconnected (normal left inverted right x axis y axis)

xrandr indique qu'il y a trois sorties sur la carte graphique :

  • VGA-0 : connecteur VGA situé à l'arrière du portable ;
  • LVDS : écran du portable ;
  • S-video : sortie TV.

Pour chacune des sorties, xrandr indique également les possibilités offertes par les écrans. Par défaut, chaque écran utilise la meilleure de ces définitions. Ce dernier point peut poser un problème.

Dans le cas de ma carte graphique, si l'on souhaite utiliser simultanément VGA-0 et LVDS, leurs définitions doivent être identiques, sinon l'affichage est impossible.

Pour régler le problème, nous allons donc re-configurer VGA-0

$ xrandr --output VGA-0 --mode 1024x768 --rate 60
$ xrandr
Screen 0: minimum 320 x 200, current 1024 x 768, maximum 1680 x 1200
VGA-0 connected 1024x768+0+0 (normal left inverted right x axis y axis) 433mm x 271mm
  1680x1050 60.0 + 60.0 60.0
  1600x1024 60.2
  1400x1050 74.8 70.0 60.0
  1280x1024 75.0 60.0 60.0
  1440x900 59.9
  1280x960 60.0 60.0
  1360x768 59.8
  1152x864 75.0 75.0 75.0 70.0 60.0
  1024x768 75.1 75.0 70.1 60.0*
  832x624 74.6
  800x600 72.2 75.0 60.3 56.2
  640x480 75.0 72.8 72.8 75.0 66.7 60.0 59.9
  720x400 70.1
LVDS connected 1024x768+0+0 (normal left inverted right x axis y axis) 0mm x 0mm
  1024x768 60.0*+ 60.0
  800x600 60.3
  640x480 59.9
S-video disconnected (normal left inverted right x axis y axis)

Comme d'habitude, cela ne fonctionne pas du premier coup, loi de Murphy oblige, il n'y a toujours rien sur mon écran externe.

Il suffit d'arrêter et de redémarrer le LVDS !!! (il fallait le sucer de son pouce). Le problème est que si vous arrêtez LVDS, comme VGA-0 ne fonctionne toujours pas et bien vous n'avez plus d'affichage. Il faut donc tapez les deux lignes de commande en une fois.

$ xrandr --output LVDS --off; xrandr --output LVDS --auto

Et là, comme par magie, mon écran externe s'est allumé, VGA-0 est donc un clone de LVDS.

Scripts d'activations/désactivations

Pour me faciliter la vie, j'ai placé sur mon bureau 4 scripts qui permettent de passer d'un mode à un autre d'un simple clic.

LVDS seul

#!/bin/bash
# LVDS only
xrandr --output VGA-0 --off
xrandr --output LVDS --off
xrandr --output LVDS --auto

VGA-0 seul en automatique

#!/bin/bash
# VGA-0 only @home
xrandr --output LVDS --off
xrandr --output VGA-0 --off
xrandr --output VGA-0 --auto

VGA-0 seul avec une définition spécifique

#!/bin/bash
# VGA-0 only @office
xrandr --output LVDS --off
xrandr --output VGA-0 --off
xrandr --output VGA-0 --mode 1400x1050

Clonage LVDS VGA-0

#!/bin/bash
#LVDS VGA-0 clone
xrandr --output VGA-0 --off
xrandr --output VGA-0 --mode 1024x768 --rate 60
xrandr --output LVDS --off
xrandr --output LVDS --auto

Comme vous l'aurez remarqué dans les 4 scripts, j'éteins les sorties avant de les configurer.

Bureau étendu

Pour le bureau étendu, il faut tenir compte de la taille maximum que peut avoir votre bureau.

$ xrandr
Screen 0: minimum 320 x 200, current 1024 x 768, maximum 1680 x 1200
...

Dans mon cas, le maximum est de 1680×1200.

Comme ma carte oblige à ce que les définitions soient identiques lorsque les deux sorties sont activées, je peux avoir les configurations suivantes :

  • si le deuxième écran est à gauche ou à droite du portable : 1680/2 soit une largeur maximale de 840 pour chaque écran ;
  • si le deuxième écran est au-dessus ou au-dessous du portable : 1200/2 soit une hauteur maximale de 600 pour chaque écran.

Bureau étendu à droite

#!/bin/bash
# VGA-0 right of LVDS
xrandr --output VGA-0 --off
xrandr --output VGA-0 --mode 800x600 --rate 60 --right-of LVDS
xrandr --output LVDS --off
xrandr --output LVDS --mode 800x600 --rate 60