Ok, ça n’a pas été simple, je l’admets. Mais j’ai réussi.
Voici donc comment je configure l’affichage de xorg pour utiliser un bureau étendu avec trois écrans. Ca fonctionne plutôt bien.
Ma configuration est la suivante:
- Deux cartes Radeon HD 5450
- Deux écran Samsung 24″ à une résolution maximum de 1920×1080
- Un écran HP 24″ à une résolution maximum de 1920x1200L’écran
- Pilotes open source xserver-xorg-video-ati
J’utilise xUbuntu 13.10 avec donc xfce, ça ne devrait pas faire une grande différence pour une autre distribution. C’est quand même xorg qui est derrière.
Pour paramétrer mon affichage, j’utilise xrandr que j’exécute avec un script automatique au démarrage de la session. C’est la seule façon que j’ai trouvé pour que mon affichage soit correct. Lorsque j’ai tenté d’utiliser l’outil de configuration d’affichage dans les paramètres de xfce, j’avais des problèmes de décalage, ou des écrans qui se chevauchaient. arandr n’a pas résolu ce problème. J’ai donc fini par utiliser arandr pour avoir un exemple de script, que j’ai ensuite adapté à mon besoin.
Pour définir la bonne configuration, nous avons besoin de différentes informations. D’abord il faut identifier les affichages: pour ce faire, on utilise xrandr, et pour faire direct et simple, on affiche que les interfaces connectées:
xrandr --query | grep " connected"
Ce qui retourne chez moi:
HDMI-0 connected primary 1920x1080+1200+840 (normal left inverted right x axis y axis) 160mm x 90mm
DVI-0 connected 1200x1920+0+0 left (normal left inverted right x axis y axis) 518mm x 324mm
DVI-1-1 connected 1920x1080+3120+840 (normal left inverted right x axis y axis) 530mm x 300mm
J’ai donc un écran en HDMI-0, un en DVI-0 et un en DVI-1-1. Je sais que mon HP est à gauche en DVI-0. Mon premier Samsung est au centre en HDMI-0, et le second samsung à droite en DVI-1-1 (oui, c’est quand même moi qui les ai branchés).
A noter que mon écran HP en 1920×1200 est utilisé en position portrait ce qui nécessite une rotation sur la gauche.
Il faut maintenant calculer la taille du bureau que l’on souhaite. Le bureau doit être un rectangle. Sachant que j’utilise mon écran HP à gauche et en portrait, la hauteur de mon bureau doit être de 1920, faute de quoi, cet écran n’affichera pas un bureau sur toute la hauteur. La largeur du bureau elle correspond à la largeur de mes trois écrans réunis: 1200 + 1920 + 1920 = 5040. Je dois donc déterminer la taille de mon bureau à 5040×1920.
Je dois également définir la position de mes différents écrans. Je souhaite qu’ils soient alignés sur le bas. Le HP positionné à gauche, au milieu le premier samsung et à droite le second samsung. A noter que s’ils ne sont pas alignés sur le bas, je n’ai pas réussi à avoir le bureau sur toute la hauteur sur l’écran en mode portrait. Difficile de savoir pourquoi, et comme cette solution me convient, je n’ai pas beaucoup cherché la réponse.
La position de mon HP est donc 0x0. Nous partons du coin supérieur gauche du bureau. Le prochain écran, celui du milieu, sera donc positionné à 1200px du premier (puisqu’en mode portrait, c’est la largeur de celui-ci), et à 840px vers le bas (mon écran HP a une hauteur de 1920, mon écran samsung une hauteur de 1080. La différence est donc de 840, ce qui aligne l’écran samsung vers le bas). Ca nous donne donc 1200×840. Mon second écran smasung lui se trouve à la droite des deux précédents. Donc 1200+1920=3120 pour la position horizontale, et on reprend 840 pour la position verticale. Nous avons donc 3120×840.
En résumé
Taille du bureau:
- 5040×1920
HP:
- Connection DVI-0
- Résolution: 1920×1200
- Tourné sur la gauche
- Position 0x0
Samsung 1:
- Connection HDMI-0
- Résolution: 1920×1080
- Défini comme écran primaire
- Position 1200×840
Samsung 2:
- Connection DVI-1-1
- Résolution: 1920×1080
- Position 3120×840
Il ne reste plus qu’à exécuter la command xdrandr qui va nous arranger tout ça:
xrandr --size 5040x1920 --output HDMI-0 --mode 1920x1080 --pos 1200x840 --primary \
--output DVI-1-1 --mode 1920x1080 --pos 3120x840 \
--output DVI-0 --mode 1920x1200 --pos 0x0 --rotate left
Pour que cette configuration s’applique à chaque démarrage de session, j’ai créé un script que j’ai ajouté dans “autostart” sur xfce. Le contenu de ce script est le suivant:
#!/bin/bash
sleep 5
xrandr --size 5040x1920 --output HDMI-0 --mode 1920x1080 --pos 1200x840 --primary \
--output DVI-1-1 --mode 1920x1080 --pos 3120x840 \
--output DVI-0 --mode 1920x1200 --pos 0x0 --rotate left
J’ai ajouté une pause de 5 seconde au lancement du script, car au moment de l’exécution, la session n’est pas prête, et si xrandr est lancé trop top, il n’était pas pris en compte. Depuis l’ajout de cette pause, je n’ai aucune surprise, et mon affichage est configuré correctement à chaque lancement de session.
Pour que ce script soit exécuté à chaque démarrage de session sur xfce4, rendez-vous dans les paramètres de démarrage de session. Je l’ai en anglais, je vous laisse trouver l’équivalence en français. Il s’agit de “Session and Startup”. Dans l’onglet “Application Autostart”, vous pouvez ajouter votre script.
J’ai testé les pilotes propriétaire AMD ainsi que Xinerama. Mais ça ne répondait pas à mon attente… Cette solution me convient.
J’ai toutefois un petit problème (assez gênant il est vrai) sur le troisième écran qui est connecté à la seconde carte Radeon. Lorsque je fais une série d’entrées au clavier ou à la souris, la dernière entrée avant une pause n’est pas appliquée jsuqu’à ce que je refasse une entrée (celle-ci pouvant être une touche clavier, ou un mouvement de la souris). C’est très gênant car le dernière caractère d’une phrase par exemple n’apparait que quand je refais une action. Et ceci est vrai pour toutes les actions d’entrée sur cet écran. Je n’ai pas encore trouvé la raison de ce souci.