Désactiver les affichages débranchés (xrandr)

17

J'ai un ordinateur portable avec deux sorties vidéo que j'utilise quand je suis à la maison (HDMI1, VGA1). Pour les activer, je fais ceci:

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

Quand je veux aller au travail, je prends mon ordinateur portable mais lance d'abord le suivant:

xrandr --output VGA1 --off
xrandr --output LVDS1 --left-of HDMI1 --auto
xrandr --output HDMI1 --off

Et cela laisse mon écran d'ordinateur portable actif comme il se doit.

Le problème que je rencontre est que parfois je ne me souviens pas de désactiver les deux écrans avant de mettre mon ordinateur au travail. À mon arrivée, j'essaie différentes combinaisons de --outputet --offmais je ne parviens pas à réactiver mon écran.

Voici la sortie que je lance xrandrsans rien afficher:

Screen 0: minimum 320 x 200, current 3840 x 1080, maximum 8192 x 8192
LVDS1 connected (normal left inverted right x axis y axis)
   1366x768       60.0 +
   1024x768       60.0··
   800x600        60.3     56.2··
   640x480        59.9··
VGA1 disconnected 1920x1080+1920+0 (normal left inverted right x axis y axis) 0mm x 0mm
HDMI1 disconnected 1920x1080+0+0 (normal left inverted right x axis y axis) 0mm x 0mm
DP1 disconnected (normal left inverted right x axis y axis)
  1920x1080 (0x4c)  148.5MHz
        h: width  1920 start 2008 end 2052 total 2200 skew    0 clock   67.5KHz
        v: height 1080 start 1084 end 1089 total 1125           clock   60.0Hz

Presque toutes les commandes que j'ai essayées retournent:

xrandr: Configure crtc 2 failed
X Error of failed request:  BadMatch (invalid parameter attributes)
  Major opcode of failed request:  140 (RANDR)
  Minor opcode of failed request:  21 (RRSetCrtcConfig)
  Serial number of failed request:  40
  Current serial number in output stream:  40

C'est comme si les deux moniteurs n'abandonnaient pas leur CRTC et comme mon matériel ne supporte que 2, il est verrouillé jusqu'à ce que je branche ces moniteurs et les désactive.


la source

Réponses:

11

Vous pouvez mettre toute votre configuration en une seule commande, comme:

xrandr --output VGA1 --off --output HDMI1 --off --output LVDS1 --left-of HDMI1 --auto

et cela devrait faire le travail, car comme il est difficile d'écrire (trop longtemps), vous pouvez créer un script qui teste les écrans actuellement attachés et effectue la configuration souhaitée. (vous pouvez ajouter à un raccourci clavier)

if [ -z `xrandr --query | grep "HDMI1 connected"` ]
then
    xrandr --output DP2 --off --output DP1 --off --output HDMI2 --off \
        --output HDMI1 --off \
        --output LVDS1 --mode 1366x768 --pos 0x0 --rotate normal \
        --output VGA1 --off
else
    xrandr --output DP2 --off --output DP1 --off --output HDMI2 --off \
        --output HDMI1 --mode 1920x1080 --pos 0x0 --rotate normal --primary \
        --output LVDS1 --off --output VGA1 --off
fi

ce n'est pas un script de fantaisie mais peut fonctionner pour vous.

Agomezl
la source
1

Il ne semble pas y avoir d'événement généré lorsqu'un écran est malheureusement débranché. avoir un script poll xrandr est assez lourd mais vous pouvez regarder dans / sys / class / drm / * / status et interroger ces fichiers puis prendre l'action xrandr requise lorsque le statut passe de `` connecté '' à autre chose (ou disparaît complètement).

Cwissy
la source
1

Je sais que c'est un super vieux fil, mais je voulais partager comment j'ai résolu le problème, en utilisant vos informations pour allumer et éteindre les moniteurs, puis les déconnecter. J'ai utilisé un programme appelé autorandr et j'ai simplement configuré mon écran avec deux moniteurs autorandr --save docked. Ensuite, j'ai utilisé cela xrandr --output VGA --off, puis débranché mon moniteur, puis autorandr --save mobile. Autorandr basculera automatiquement entre les différents modes en fonction de ce que vous avez branché ou débranché. J'espère que cela aide toute autre personne qui tombe sur cela! C'est aussi comme ma première vraie réponse, alors faites-moi savoir si je peux changer quelque chose pour être plus clair.

ViperZer0
la source