Sur mon PC précédent, la carte graphique était une Nvidia et le pilote propriétaire permettait de gérer la connexion d’un deuxième écran. Lorsque j’ai du le remplcer en début d’année, j’ai repris un Airis mais avec une puce graphique Intel ; dans ca cas, il faut utiliser Xrandr pour gérer le double écran ou le vidéo-projecteur.

Afficher les caractéristiques des écrans

L’outil xrandr est fournit avec le paquet x11-xserver-utils :

    1761 [root@nanda] $ apt-cache policy x11-xserver-utils
    x11-xserver-utils:
      Installé : 7.7~3
      Candidat : 7.7~3
     Table de version :
     `* 7.7~3 0
            500 http://cdn.debian.net/debian/ sid/main amd64 Packages
            500 http://ftp.fr.debian.org/debian/ wheezy/main amd64 Packages
            100 /var/lib/dpkg/status
         7.5+3 0
            500 http://ftp.fr.debian.org/debian/ squeeze/main amd64 Packages
            500 http://security.debian.org/ squeeze/updates/main amd64 Packages

Pour afficher les différentes connexions vidéo du PC :

    1762 [root@nanda] $ xrandr 
    Screen 0: minimum 320 x 200, current 3280 x 1050, maximum 8192 x 8192
    LVDS1 connected 1600x900+0+0 (normal left inverted right x axis y axis) 382mm x 215mm
       1600x900       60.0*+
       1440x900       59.9  
       1360x768       59.8     60.0  
       1152x864       60.0  
       1024x768       60.0  
       800x600        60.3     56.2  
       640x480        59.9  
    VGA1 connected 1680x1050+1600+0 (normal left inverted right x axis y axis) 473mm x 296mm
       1680x1050      59.9*+
       1680x945       60.0  
       1400x1050      74.9     60.0  
       1600x900       60.0  
       1280x1024      75.0     60.0  
       1440x900       75.0     59.9  
       1280x960       60.0  
       1366x768       60.0  
       1360x768       60.0  
       1280x800       74.9     59.8  
       1152x864       75.0  
       1280x768       74.9     59.9  
       1024x768       75.1     70.1     60.0  
       1024x576       60.0  
       832x624        74.6  
       800x600        72.2     75.0     60.3     56.2  
       848x480        60.0  
       640x480        72.8     75.0     66.7     60.0  
       720x400        70.1  
    HDMI1 disconnected (normal left inverted right x axis y axis)
    DP1 disconnected (normal left inverted right x axis y axis)

Dans cette trace on voit que le PC dispose de 3 sorties vidéos :

  • LVDS1 : c’est l’écran interne du portable, il supporte des définition allant de 640x480 jusque 1600x900.
  • VGA1 : c’est la sortie VGA pour une écran externe ou un vidéo-projecteur. On voit dans le résultat de la commande qu’un écran y est connecté et qu’il supporte une définition comprise entre 720x420 et 1680x1050
  • HDMI1 : c’est la sortie HDMI, il n’y a aucun équipement de connecté

La première ligne du résultat de la commande xrandr donne une information importante :

    Screen 0: minimum 320 x 200, current 3280 x 1050, maximum 8192 x 8192
  • maximum 8192 x 8192 : cette dimension correspond à la taille maximale cumulée des 2 écrans
  • current 3280 x 1050  : c’est la dimension cumulée actuelle des 2 écrans connectés

Lorsque 2 écrans sont connectés, leurs dimensions sont sommées et le résultat ne doit pas dépasser le maximum autorisé.
Dans l’exemple ci-dessus, le deuxième écran est configuré en écran étendu, il est placé sur la droite de l’écran du portable. On fait donc la somme des définitions horizontale de ces 2 écrans (1600+1680=3280), ce résultat est indiqué par la valeur de current ; la dimension verticale indiquée par current correspond à la valeur de l’écran le plus grand. Comme cette valeur est inférieure à la valeur maximale (8192), il n’y a pas de problème.
Si la valeur maximale avait été de 3200x3200, il aurait fallut choisir une définition inférieure pour que la somme reste en dessous de la valeur maximale.

Si le deuxième écran avait été placer au dessu de l’écran du portable, on aurait vérifié la somme des définitions verticale.

Configurer le double écran

Pour configurer le double écran, on va utiliser la commande xrandr en lui rajoutant des paramètres.

Pour activer un écran étendu sur mon PC, j’utilise la commande suivante :

xrandr --output LVDS1   --output VGA1 --auto --right-of LVDS1

Ce qui signifie :

  • --output LVDS1 : configuration de l’écran interne du portable. Tous les paramètres qui suivent cette commande seront appliqués à cet écran
  • --output VGA1 : configuration de l’écran externe
  • --auto : la définition de l’écran sera choisie automatiquement. Normalement, xrandr choisit la meilleur combinaison possible.
  • --right-of LVDS1 : l’écran externe va être placé à droite de l’écran du portable.

On peut retrouver toutes les options de la commande xrandr en consultant l’aide disponible par la commande man xrandr.
On peut également consulter cette page qui est une traduction Française du man ou cette page de la documentation Ubuntu.

Pour désactiver l’écran externe, c’est la commande :

    xrandr --output LVDS1 --auto --output VGA1 --off

Script de configuration

Pour faciliter le passage du simple écran au double écran, j’utilise le script suivant :

    #!/bin/bash
    # -*- coding: UTF8 -*-
    # Variables
    EcrVGA=0
    EcrHDMI=0
    EcranPortable="Ecran portable uniquement"
    EcranPortableEtVGA="Ecran portable + VGA"
    EcranPortableEtHDMI="Ecran portable + HDMI"

    # Test de la présence des écrans externes
    xrandr | grep VGA1 | grep " connected " && EcrVGA=1
    xrandr | grep HDMI1 | grep " connected " && EcrHDMI=1

    #echo -e "\nEcrans détectés :"
    #if [ $EcrVGA -eq 1 ]; then
     #echo -e "\tVGA = Oui"
    #else
     #echo -e "\tVGA = Non"
    #fi
    #if [ $EcrHDMI -eq 1 ]; then
     #echo -e "\tHDMI = Oui"
    #else
     #echo -e "\tHDMI = Non"
    #fi

    Destination=`zenity --title "Ecran secondaire" --text "Choisissez la configuration" --list --radiolist --column "Choix" --column "Ecran" True "$EcranPortable"  False "$EcranPortableEtVGA" False "$EcranPortableEtHDMI"`
    if [ "$Destination" = "" ];  then
     echo -e "\n-I-> Vous avez choisit Annuler.\n"
     exit
    fi  
    echo -e "\nChoix : $Destination\n"
    echo -e "\nVous avez choit \c"
    case $Destination in
     "$EcranPortable" ) #echo " l'écran du portable uniquement."
     xrandr --output LVDS1 --auto --output VGA1 --off
     ;;  
     "$EcranPortableEtVGA" ) #echo " l'écran du portable et l'écran VGA comme secondaire"
     xrandr --output LVDS1 --auto --output VGA1 --auto --right-of LVDS1
     if [ $? -ne 0 ]; then
     echo "ERREUR"
     xrandr --output LVDS1 --auto --output VGA1 --off
     zenity --title "" --info "Suite à une erreur, reconfiguration en écran de portable seul."
     fi
     ;;
     "$EcranPortableEtHDMI" ) #echo " l'écran du portable et l'écran HMI comme secondaire"
     xrandr --output LVDS1 --auto --output HDMI1 --auto --right-of LVDS1
     if [ $? -ne 0 ]; then
     xrandr --output LVDS1 --auto --output VGA1 --off
     zenity --title "" --info "Suite à une erreur, reconfiguration en écran de portable seul."
     fi
     ;;
     esac
    exit 0

Configuration automatique au démarrage

Lorsque l’écran est connecté lors du démarrage du PC ou lors de l’ouverture d’une session, la configuration activée n’est pas celle attendue. Il faut dans ce cas activer le script précédent pour obtenir l’affichage voulut.
Pour palier cet inconvénient, on peut créer le script /etc/X11/Xsession.d/45custom\_xrandr contenant :

    xrandr | grep VGA | grep " connected "
    if [$? -eq 0]; then
      # External monitor is connected
      xrandr --output LVDS1 --auto --output VGA1 --auto --right-of LVDS1
    if [$? -ne 0]; then
    # Something went wrong. Autoconfigure the internal monitor and disable the external one
    xrandr --output LVDS1 --auto --output VGA1 --off
    fi
    else
    # External monitor is not connected
    xrandr --output LVDS1 --auto --output VGA1 --off
    fi