Gérer un double écran avec Xrandr
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