Einführung
An einem Computer oder Notebook angeschlossene Bildschirme kann man sehr einfach
mit dem Tool xrandr
verwalten und steuern. Dabei kann man z. B. den
Bildausschnitt oder die Auflösung festlegen. Dieser Artikel gilt für Bildschirme
wie auch für Beamer.
Bildschirme erkennen
Mit folgendem Befehl kann man feststellen, welche Bildschirme einem zur Verfügung stehen und wie die aktuelle Konfiguration aussieht:
$ xrandr --query
Wenn an meinem Notebook kein externer Bildschirm angeschlossen ist, sieht das so aus:
$ xrandr --query
Screen 0: minimum 320 x 200, current 1280 x 800, maximum 8192 x 8192
LVDS1 connected 1280x800+0+0 (normal left inverted right x axis y axis) 261mm x 163mm
1280x800 60.2*+ 50.0
1024x768 60.0
800x600 60.3 56.2
640x480 59.9
VGA1 disconnected (normal left inverted right x axis y axis)
HDMI1 disconnected (normal left inverted right x axis y axis)
DP1 disconnected (normal left inverted right x axis y axis)
Am Status disconnected
ist gut ersichtlich, dass am VGA-Port ( VGA1
) noch kein Gerät angeschlossen ist. Nach dem Einstecken von einem Bildschirm am VGA Port sieht die Ausgabe folgendermassen aus:
$ xrandr --query
Screen 0: minimum 320 x 200, current 1280 x 800, maximum 8192 x 8192
LVDS1 connected 1280x800+0+0 (normal left inverted right x axis y axis) 261mm x 163mm
1280x800 60.2*+ 50.0
1024x768 60.0
800x600 60.3 56.2
640x480 59.9
VGA1 connected (normal left inverted right x axis y axis)
1024x768 60.0 + 85.0 75.1 70.1
1280x1024 60.0
1152x864 75.0
832x624 74.6
800x600 85.1 72.2 75.0 60.3
640x480 85.0 72.8 75.0 60.0
HDMI1 disconnected (normal left inverted right x axis y axis)
DP1 disconnected (normal left inverted right x axis y axis)
Das Pluszeichen ( +
) zeigt, welche Auflösung für die Autokonfiguration (
--auto
) verwendet wird. Der Stern ( *
) zeigt, welche Auflösung aktiv ist. In
diesem Fall ist nur der interne Monitor ( LVDS1
) aktiviert. Der externe
Bildschirm ( VGA1
) ist nicht aktiv.
Alle angeschlossenen Bildschirme automatisch aktivieren
Um alle angeschlossenen Bildschirme zu aktivieren, genügt dieser einfache Befehl:
$ xrandr --auto
Somit werden alle angeschlossenen Geräte automatisch mit der passendsten
Auflösung (erkennbar am +
) konfiguriert und eingeschaltet. Dabei liegen die
zwei Bilder übereinander. Ist ein Bildschirm kleiner, wird dort das Bild
abgeschnitten und ist nicht komplett sichtbar.
Nach dem Ausstecken von einem Monitor kann man diesen Befehl auch zum Deaktivieren vom nicht mehr mehr angeschlosenen Monitor verwenden.
Nur externen Bildschirm verwenden
Der externe Bildschirm ( VGA1
) kann mit diesem Befehl aktiviert und der interne Bildschirm ( LVDS1
) deaktiviert werden:
$ xrandr --output LVDS1 --off --output VGA1 --auto
Jetzt ist nur noch der externe Bildschirm aktiv.
Nur internen Bildschirm verwenden
Wenn man den externen Monitor ( VGA1
) deaktivieren und nur noch den internen Monitor ( LVDS1
) verwenden will, kann man folgenden Befehl nutzen:
$ xrandr --output LVDS1 --auto --output VGA1 --off
Jetzt ist nur noch der interne Bildschirm aktiv.
Internen Bildschirm mit externem Bildschirm erweitern
Manchmal möchte man den internen Bildschirm um den externen Bildschirm erweitern. Mit dem Schalter --right-of
, --left-of
, --above
oder --below
kann man dabei die Position festlegen.
$ xrandr --output LVDS1 --auto --output VGA1 --auto --right-of LVDS1
Nach dem Ausführen von diesem Befehl, ist der externe Bildschirm ( VGA1
) auf der rechten Seite vom internen Bildschirm ( LVDS1
) aktiv.
Internen Bildschirm auf externen Bildschirm clonen
Um genau dasselbe Bild auf beiden Bildschirmen auszugeben, muss man zuerst die grösste gemeinsame Auflösung herausfinden. Diese Information kann man mit xrandr --query
herausfinden. Folgender Befehl macht das automatisch:
$ xrandr --query | awk '/^ *[0-9]*x[0-9]*/{ print $1 }' | sort -n | uniq -d | tail -1
Dass der externe Bildschirm ( VGA1
) dasselbe wie der interne Bildschirm ( LVDS1
) anzeigt, wird mit dem Schalter --same-as LVDS1
gesagt. Die gemeinsame Auflösung muss man für beide Bildschirme mit dem Schalter --mode
definieren. So sieht der Befehl aus:
$ xrandr --output LVDS1 --mode 1024x768 --output VGA1 --same-as LVDS1 --mode 1024x768
Jetzt nutzen beide Bildschirme die selbe Auflösung und zeigen den selben Inhalt an.
Automatisierung mit einem Script
Ich habe mir ein Wrapper-Script geschrieben, welches diese Aufgaben für mich übernimmt:
#!/usr/bin/env bash
######################################################################
#
# bildschirm
# Bildschirme/Beamer steuern und verwalten
#
# Copyright 2011 Emanuel Duss
# Licensed under GNU General Public License
#
# 2011-07-26; Emanuel Duss; Erste Version
# 2012-08-26; Emanuel Duss; $CLONERES automatisch bestimmen
#
######################################################################
######################################################################
# Variabeln
INTERN="LVDS1"
EXTERN="VGA1"
######################################################################
# Funktionen
PrintUsage(){
cat << EOI
Usage:
bildschirm < modes | intern | extern | clone | extend >
Optionen:
modes Moegliche Modes ausgeben
intern Nur internen Bildschirm verwenden
extern Nur externer Bildschirm verwenden
clone Gleiche Ausgabe auf beiden Bildschirmen
extend Bild auf externem Bildschirm erweitern
EOI
}
######################################################################
# Main
case $1 in
modes)
xrandr -q
;;
intern)
xrandr --output $INTERN --auto --output $EXTERN --off
;;
extern)
xrandr --output $INTERN --off --output $EXTERN --auto
;;
clone)
CLONERES=`xrandr --query | awk '/^ *[0-9]*x[0-9]*/{ print $1 }' | sort -n | uniq -d | tail -1`
xrandr --output $INTERN --mode $CLONERES --output $EXTERN --same-as $INTERN --mode $CLONERES
;;
extend)
xrandr --output $INTERN --auto --output $EXTERN --auto --right-of $INTERN
# xrandr --output $EXTERN --mode $EXTRES --pos 1280x0 --output $INTERN --mode $INTRES --pos 0x400
;;
*)
PrintUsage
;;
esac
# EOF
Dem Skript gibt man als ersten Parameter entweder modes
, intern
, extern
, clone
oder extend
mit und schon wird der richtige xrandr
-Befehl aufgerufen. Das sind die möglichen Optionen:
modes
: Moegliche Modes ausgebenintern
: Nur internen Bildschirm verwendenextern
: Nur externer Bildschirm verwendenclone
: Gleiche Ausgabe auf beiden Bildschirmenextend
: Bild auf externem Bildschirm erweitern
Wenn ich z.B. jetzt auf beiden Bildschirmen das gleiche Bild anzeigen will, mache ich das so:
$ bildschirm clone
Vorausgesetzt das Script ist ausführbar im $PATH
zu finden.
Die aktuellste Version davon gibt es auf GitHub in meinem Scripts Repository: screenctl.
Links und weitere Informationen
- XRandR Projektseite: http://www.x.org/wiki/Projects/XRandR