J'ai une configuration multi-écrans avec 2 écrans (3 avec le notebook T460 lui-même) sur xubuntu 16.04 sur un commutateur KVM DP. Le notebook est connecté via la station d'accueil Dock-3 via 2 ports DP.
Chaque fois que je passe de bureau à ordinateur portable, la configuration du moniteur est perdue. Je dois donc le configurer à partir de zéro, y compris l'activation des moniteurs individuels. Existe-t-il un moyen de sauvegarder ces configurations et de les restaurer automatiquement si le notebook est connecté à la station d'accueil?
La sortie (raccourcie) de xrandr
avec les écrans connectés:
Screen 0: minimum 8 x 8, current 6800 x 1440, maximum 32767 x 32767
eDP1 connected 2560x1440+4240+0 (normal left inverted right x axis y axis) 310mm x 170mm
2560x1440 60.00*+ 48.00
1920x1440 60.00
.........
DP1 disconnected (normal left inverted right x axis y axis)
DP2 disconnected (normal left inverted right x axis y axis)
DP2-1 connected 1680x1050+2560+0 (normal left inverted right x axis y axis) 473mm x 296mm
1680x1050 59.88*+ 59.95
1920x1080 60.00 50.00 59.94
..........
DP2-2 connected primary 2560x1440+0+0 (normal left inverted right x axis y axis) 527mm x 296mm
2560x1440 59.95*+
1920x1200 59.95
..........
DP2-3 disconnected (normal left inverted right x axis y axis)
HDMI1 disconnected (normal left inverted right x axis y axis)
HDMI2 disconnected (normal left inverted right x axis y axis)
VIRTUAL1 disconnected (normal left inverted right x axis y axis)
Le problème que vous rencontrez n’est pas exclusif à 16.04, il se produit sur de nombreuses versions d’Ubuntu.
En lisant votre sortie de xrandr
, et en supposant que je n’ai fait aucune faute de frappe, la commande suivante doit organiser vos écrans de la façon dont vous les avez configurés:
xrandr --output DP2-2 --auto --pos 0x0 --output DP2-1 --auto --pos 2560x0 --output eDP1 --auto --pos 4240x0
La solution la plus rapide et la plus simple consiste à l'ajouter à une touche de raccourci: Paramètres> Clavier> Raccourcis d'applications. Ensuite, appuyez sur le raccourci une fois les écrans connectés.
À partir de la sortie de xrandr
, nous pouvons voir les informations sur les trois écrans connectés:
eDP1 connected 2560x1440+4240+0
DP2-1 connected 1680x1050+2560+0
DP2-2 connected primary 2560x1440+0+0
Dans la ou les dernières sections: 2560x1440+4240+0
, dans la partie: +4240+0
, on peut voir la position de l'écran dans l'image complète des écrans combinés (x, y). De gauche à droite, les écrans sont alors évidemment disposés comme suit:
DP2-2 +0+0 | DP2-1 +2560+0 | eDP1 +4240+0
Si cet arrangement n'est pas mémorisé automatiquement, nous pouvons le configurer avec la commande que j'ai ajoutée au début de cette réponse.
L’option --auto
j’ai ajoutée, puisque vous avez mentionné que vous deviez également activer les écrans.
Comme demandé, un petit script bash à exécuter en arrière-plan pour effectuer la configuration si les écrans sont connectés:
#!/bin/bash
let "target = 3"
swon=false
function nscreens {
curr=$(xrandr | grep " connected" | wc -l)
}
function setup_scr {
xrandr --output DP2-1 --auto --pos 0x0 \
--output DP2-2 --auto --pos 2560x0 \
--output eDP1 --auto --pos 4240x0
}
while true
do
sleep 4
nscreens
if [ "$curr" -eq "$target" ] && [ "$swon" == false ]
then
setup_scr
swon=true
Elif [ "$curr" -ne "$target" ] && [ "$swon" == true ]
then
swon=false
fi
done
setup_scr.sh
, puis exécutez-le.Testez-le dans un terminal avec la commande:
/path/to/setup_scr.sh
connecter/déconnecter les écrans
si cela fonctionne bien, ajoutez-le aux applications de démarrage: Dash> Applications de démarrage> Ajouter. Ajoutez la commande:
/bin/bash -c "sleep 15 && /path/to/setup_scr.sh"
Une fois toutes les 4 secondes, le script compte le nombre d'écrans connectés. S'il est égal à 3, il lance la configuration une seule fois, en se rappelant qu'il a paramétré les écrans en commutant la valeur de "swon" (activé) sur true
.
Ensuite, si le nombre d’écrans n’est plus égal à 3, "swon" est à nouveau réglé sur false
, et ainsi de suite.
J'ai testé le script sur ma configuration à deux écrans et tout fonctionnait bien. Cependant, il est toujours possible que je fasse une faute de frappe quelque part et, évidemment, je ne pouvais pas le tester sur votre système. En cas d'erreur, veuillez mentionner.
ces réponses ne concernent que la restauration. Pour "sauvegarder" l'état actuel, vous pouvez utiliser ce script (dump_randr.sh)
#!/bin/bash
fileName="$1"
while read -r line; do
IFS=" "
entry=( $line )
display=${entry[0]}
IFS="x+"
if [[ "${entry[2]}" == primary ]]; then
primary=1
measurement=( ${entry[3]} )
else
primary=0
measurement=( ${entry[2]} )
fi
unset IFS
width=${measurement[0]}
height=${measurement[1]}
left=${measurement[2]}
top=${measurement[3]}
xrandrOpt="$xrandrOpt --output $display --mode ${width}x${height} --pos ${left}x${top}"
((primary)) && xrandrOpt="$xrandrOpt --primary"
done < <(xrandr | grep " connected")
echo "#!/bin/bash" > "$fileName"
echo "xrandr $xrandrOpt" > "$fileName"
chmod +x "$fileName"
Cela va vider les options actuelles de xrandr pour les utiliser à nouveau. Vous pouvez faire quelque chose comme ceci pour stocker la configuration actuelle:
dump_randr.sh 2_monitors_home.sh
qui crée 2_monitors_home.sh
pour restaurer l'état actuel.
J'ai essayé la méthode proposée par Jacob Vlijm, que j'ai bien sûr modifiée pour mon scénario. Cela ne fonctionnait pas vraiment et pour quelque raison que ce soit, toute commande xrand qui avait eu --auto ou --pos dans celui-ci avait écrasé ma machine (je me suis servi de Xubuntu 16.04)
Voici ma solution à cela
xrandr --output HDMI1 --mode 1920x1080 --pos 0x0 --rate 60.00 --output eDP1 --off
cela prend mon écran secondaire que j'ai connecté via HDMI et le règle sur 1080p 60Hz tout en désactivant l'écran de mon ordinateur portable
xrandr --output eDP1 --mode 1366x768 --pos 0x0 --rate 60.00
cela règle l'écran de mon ordinateur portable à sa résolution native 1366x768 60Hz
J'utilise la première configuration lorsque je suis connecté à 2 écrans et j'utilise la deuxième configuration lorsque je ne suis connecté qu'à l'écran de mon ordinateur portable.
Voici mon fichier setup_scr.sh:
#!/bin/bash
let "target = 2"
swon=false
function nscreens
{
curr=$(xrandr | grep " connected" | wc -l)
}
function setup_dubai
{
xrandr --output HDMI1 --mode 1920x1080 --pos 0x0 --rate 60.00 --output eDP1 --off
}
function setup_normal
{
xrandr --output eDP1 --mode 1366x768 --pos 0x0 --rate 60.00
}
while true
do
sleep 4
nscreens
if [ "$curr" -eq "$target" ] && [ "$swon" == false ]
then
setup_dubai
swon=true
Elif [ "$curr" -ne "$target" ] && [ "$swon" == true ]
then
swon=false
setup_normal
fi
done
Merci à Jacob Vlijm pour avoir rendu cette configuration très simple avec sa bonne explication