Zwischen Monitor und Fernseher hin- und herschalten

Für die Bildschirmeinstellungen gibt es sowohl in Gnome wie auch in KDE recht bequeme Konfigurationsmöglichkeiten. Was diese allerdings nicht bieten sind Profile: In aller Regel möchte ich die Ausgabe einfach auf den Fernseher haben und später wieder auf den Monitor umschalten. Und das am besten mit ein und der selben Taste. Mit Xrandr hat wohl jedes Linux mit grafischer Oberfläche das nötige Tool dabei…

Monitore/Fernseher/Beamer identifizieren

Zunächst sollte man die entsprechenden Geräte anschließen. Nun brauchen wir die interne Bezeichnung, die das System für die entsprechenden Ausgänge nutzt:

xrandr | grep connected

Dies liefert bei mir zum Beispiel folgendes:

VGA-0 connected (normal left inverted right x axis y axis)
DVI-0 connected 1680x1050+0+0 (normal left inverted right x axis y axis) 
   474mm x 296mm

Die drei Buchstaben mit Bindestrich und Nummer am Anfang sind die Namen die wir suchen. Welches Ausgabegerät zu welchem Namen gehört sollte man entweder am Anschlussnamen (bei mir nutzt der Fernseher VGA, der Monitor DVI) oder der Auflösung erkennen können. Falls nicht, kann ein Gerät noch mal abgezogen und der Befehl erneut ausgeführt werden: Es sollte dann verschwunden sein.

Verbreitete Anschlüsse (von links nach rechts): DVI, VGA, HDMI

Auf einzelne Geräte umschalten

Mit Xrandr kann man recht einfach auf ein Ausgabegerät wechseln, wenn man denn den Namen kennt:

xrandr --output VGA-0 --auto --output DVI-0 --off

Dies schaltet das VGA-Gerät ein, das DVI-Gerät aus. Andersrum geht es genauso:

xrandr --output VGA-0 --off --output DVI-0 --auto

VGA aus, DVI an. Xrandr findet bei mir die passenden Einstellungen immer automatisch. Ggf. muss man hier noch manuell nachhelfen.

Hin- und herschalten

Nun will ich dynamisch zwischen beiden Geräten hin- und herschalten. Hierfür nutze ich ein Shellskript, z. B. toogle.sh:

#!/bin/bash
EXTERNAL_OUTPUT="VGA-0"
INTERNAL_OUTPUT="DVI-0"

X_USER=$(w -h -s | grep ":[0-9]\W" | head -1 | awk '{print $1}')
export DISPLAY=$(w -h -s | grep ":[0-9]\W" | head -1 | awk '{print $3}')

# Switch to X user if necessary
if [ "$X_USER" != "$USER" ]; then
       SU="su $X_USER -c"
else
       SU="sh -c"
fi

INTERNAL_STATE=$($SU xrandr | grep ^$INTERNAL_OUTPUT | grep " con" | sed "s/.*connected//" | sed "s/ //" | sed "s/ .*//g"| sed "s/(normal//g" )
EXTERNAL_STATE=$($SU xrandr | grep ^$EXTERNAL_OUTPUT | grep " con" | sed "s/.*connected//" | sed "s/ //" | sed "s/ .*//g"| sed "s/(normal//g" )

#echo $INTERNAL_STATE

if [ -z "$INTERNAL_STATE" ]; then
	echo "Switch to DVI"
	xrandr --output $EXTERNAL_OUTPUT --off --output $INTERNAL_OUTPUT --auto	
elif [ -z "$EXTERNAL_STATE" ]; then
	echo "Switch to VGA"
	xrandr --output $EXTERNAL_OUTPUT --auto --output $INTERNAL_OUTPUT --off
fi

Im Skript ganz oben einfach die entsprechenden Gerätenamen einsetzen, die das System verwendet. Nun das Shellskript ausführbar machen…

chmod u+x toggle.sh

und testen…

./toggle.sh

Wenn alles klappt, kann man das Skript nun einfach auf eine Tastenkombination legen oder sich eine Verknüpfung im Systemmenü erstellen.