web-dev-qa-db-fra.com

Xubuntu enregistrer la configuration multi-moniteur

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)
2
Atomius

Non spécifique 16.04

Le problème que vous rencontrez n’est pas exclusif à 16.04, il se produit sur de nombreuses versions d’Ubuntu.

Comment résoudre

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.

Explication

À 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

enter image description here

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.

MODIFIER

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
  • Copiez le script dans un fichier vide, enregistrez-le sous le nom 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"
    

Explication

  • 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.

Remarque

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.

4
Jacob Vlijm

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.

2
estani

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

1
Egene