J'ai un petit soucis avec xrandr qui ne répond pas complétement à mes attentes.
J'expose ma situation:
J'ai un portable sous chipset intel (4500MHD), avec une sortie VGA et HDMI, réso 15" (1280x800), et un écran externe 26" (1920x1200).
Plusieurs cas d'utilisation:
Lorsque le portable est seul, pas de soucis j'utilise LVDS1 pour avoir l'image sur l'écran du portable.
Lorsque j'ai l'écran externe connecté et allumé, je ne veut utiliser que HDMI1 (et LVDS1 est off).
Pas de bureau étendu/clone de prévu, je préfère avoir tout sur le même écran.
Là où ca se corse, c'est la sortie de xrandr.
LVDS1 allumé et HDMI1 non connecté:
Code :
- Screen 0: minimum 320 x 200, current 1280 x 800, maximum 8192 x 8192
- VGA1 disconnected (normal left inverted right x axis y axis)
- LVDS1 connected 1280x800+0+0 (normal left inverted right x axis y axis) 331mm x 207mm
- 1280x800 59.9*+
- 1024x768 60.0
- 800x600 60.3 56.2
- 640x480 59.9
- HDMI1 disconnected (normal left inverted right x axis y axis)
|
LVDS1 allumé et HDMI1 connecté mais non allumé:
Code :
- Screen 0: minimum 320 x 200, current 1280 x 800, maximum 8192 x 8192
- VGA1 disconnected (normal left inverted right x axis y axis)
- LVDS1 connected 1280x800+0+0 (normal left inverted right x axis y axis) 331mm x 207mm
- 1280x800 59.9*+
- 1024x768 60.0
- 800x600 60.3 56.2
- 640x480 59.9
- HDMI1 connected (normal left inverted right x axis y axis)
- 1920x1200 60.0 +
|
LVDS1 allumé et HDMI1 connecté et allumé:
Code :
- Screen 0: minimum 320 x 200, current 1920 x 1200, maximum 8192 x 8192
- VGA1 disconnected (normal left inverted right x axis y axis)
- LVDS1 connected 1280x800+0+0 (normal left inverted right x axis y axis) 331mm x 207mm
- 1280x800 59.9*+
- 1024x768 60.0
- 800x600 60.3 56.2
- 640x480 59.9
- HDMI1 connected 1920x1200+0+0 (normal left inverted right x axis y axis) 550mm x 343mm
- 1920x1200 60.0*+
|
LVDS1 éteint et HDMI1 connecté et allumé:
Code :
- Screen 0: minimum 320 x 200, current 1920 x 1200, maximum 8192 x 8192
- VGA1 disconnected (normal left inverted right x axis y axis)
- LVDS1 connected 1280x800+0+0 (normal left inverted right x axis y axis) 331mm x 207mm
- 1280x800 59.9*+
- 1024x768 60.0
- 800x600 60.3 56.2
- 640x480 59.9
- HDMI1 connected 1920x1200+0+0 (normal left inverted right x axis y axis) 550mm x 343mm
- 1920x1200 60.0*+
|
Avec ca, j'en ai déduis qu'un écran allumé avait une résolution préférée assignée (" connected " + "1920x1200+0+0" dans mon cas).
Mais xrandr ne semble pas me donner le même résultat.
Par exemple, en branchant l'écran sur la sortie HDMI, xrandr me donne ca:
LVDS1 allumé et HDMI1 connecté mais non allumé:
LVDS1 allumé et HDMI1 passage de connecté et allumé à déconnecter et éteint:
Code :
- Screen 0: minimum 320 x 200, current 1920 x 1200, maximum 8192 x 8192
- VGA1 disconnected (normal left inverted right x axis y axis)
- LVDS1 connected 1280x800+0+0 (normal left inverted right x axis y axis) 331mm x 207mm
- 1280x800 59.9*+
- 1024x768 60.0
- 800x600 60.3 56.2
- 640x480 59.9
- HDMI1 disconnected 1920x1200+0+0 (normal left inverted right x axis y axis) 550mm x 343mm
|
Ok pour disconnected, mais la résolution est toujours présente
Je rebranche l'écran externe sans l'allumer:
LVDS1 allumé et HDMI1 connecté et non allumé:
Code :
- Screen 0: minimum 320 x 200, current 1920 x 1200, maximum 8192 x 8192
- VGA1 disconnected (normal left inverted right x axis y axis)
- LVDS1 connected 1280x800+0+0 (normal left inverted right x axis y axis) 331mm x 207mm
- 1280x800 59.9*+
- 1024x768 60.0
- 800x600 60.3 56.2
- 640x480 59.9
- HDMI1 connected 1920x1200+0+0 (normal left inverted right x axis y axis) 550mm x 343mm
- 1920x1200 60.0*+
|
Ah bah là, il semble connecté et allumé
"connected" renvoi donc l'état physique de la sortie (quelque chose est branché dessus ou pas).
Mais comment être certain qu'un écran est bel et bien allumé ?
Je me suis inspiré de ce lien: http://www.thinkwiki.org/wiki/Xorg [...] t_on_login
La première ouverture de session fonctionne bien quand l'écran externe est effectivement allumé et branché, mais pas par la suite si je décide de changer de configuration.
Mon petit script adapté:
Code :
- #!/bin/sh
- # If an external monitor is connected, place it with xrandr
- # External output may be "VGA" or "VGA-0" or "DVI-0" or "TMDS-1"
- EXTERNAL_OUTPUT="HDMI1"
- INTERNAL_OUTPUT="LVDS1"
- # EXTERNAL_LOCATION may be one of: left, right, above, or below
- EXTERNAL_LOCATION="right"
- case "$EXTERNAL_LOCATION" in
- left|LEFT)
- EXTERNAL_LOCATION="--left-of $INTERNAL_OUTPUT"
- ;;
- right|RIGHT)
- EXTERNAL_LOCATION="--right-of $INTERNAL_OUTPUT"
- ;;
- top|TOP|above|ABOVE)
- EXTERNAL_LOCATION="--above $INTERNAL_OUTPUT"
- ;;
- bottom|BOTTOM|below|BELOW)
- EXTERNAL_LOCATION="--below $INTERNAL_OUTPUT"
- ;;
- *)
- EXTERNAL_LOCATION="--left-of $INTERNAL_OUTPUT"
- ;;
- esac
- XRANDR_EXTERNAL=`xrandr |grep $EXTERNAL_OUTPUT`;
- IS_CONNECTED=`echo $XRANDR_EXTERNAL |grep " connected " |wc -l`;
- IS_ON=`echo $XRANDR_EXTERNAL |sed 's/.* connected //' |sed 's/(.*//' |wc -m`;
- if [ $IS_CONNECTED -eq 1 ]; then
- if [ $IS_ON -ne 1 ]; then
- echo "connecté et allumé";
- xrandr --output $EXTERNAL_OUTPUT --mode 1920x1200 --pos 0x0 --rotate normal --output $INTERNAL_OUTPUT --off
- # xrandr --output $INTERNAL_OUTPUT --auto --output $EXTERNAL_OUTPUT --auto $EXTERNAL_LOCATION
- # Alternative command in case of trouble:
- # (sleep 2; xrandr --output $INTERNAL_OUTPUT --auto --output $EXTERNAL_OUTPUT --auto $EXTERNAL_LOCATION) &
- fi
- else
- xrandr --output $INTERNAL_OUTPUT --auto --output $EXTERNAL_OUTPUT --off
- fi
|
A vot' bon coeur