Kommandozeilen-Magie

 

  Martin's virtual lair

Ein verbreitetes Problem mit Monitoren unter Linux ist, dass die von einem bestimmten Monitor unterstützten Auflösungen nicht korrekt an das Betriebssystem übermittelt werden, wodurch es zu suboptimalen Bildschirmauflösungen kommt. Um dieses Problem zu beheben, muss man die vom Monitor unterstützten Auflösungen im Handbuch nachschlagen und dann manuell unter Linux einrichten. Leider ist der letzte Schritt bei aktuellen Ubuntu-Versionen immer noch alles andere als intuitiv. Zudem funktionieren viele der Schritt-für-Schritt-Anleitungen, die man mit Google findet, nur unter älteren Versionen von Ubuntu (z.B. diejenigen, die die mittlerweile veraltete /etc/X11/xorg.conf verwenden), oder sie greifen unnötig tief ins System ein, wodurch es zu Konflikten kommen kann. Knapp zusammengefasst, besteht die derzeit korrekte Vorgehensweise darin, den Befehl xrandr zu verwenden und die korrekten Einstellungen in der .xprofile Datei im Heimatverzeichnis abzuspeichern. Superuser-Rechte werden überhaupt nicht benötigt!

Meine Situation gestaltete sich wie folgt: Ich wollte den Monitor LG Flatron M228WD an den VGA-Anschluss eines ThinkPad X220 Laptops anschließen. Die höchste von diesem Monitor unterstützte Auflösung ist 1680x1050, aber Ubuntu 14.10 zeigte nur 1024x768 an. Ich war zudem nicht in der Lage, in den Bildschirmeinstellungen (Anwendungen → Systemwerkzeuge → Systemeinstellungen → Anzeigegeräte) eine höhere Auflösung zu wählen.

Zuerst müssen wir den Namen der Anzeige, deren Auflösung wir modifizieren wollen, ausfindig machen. Hierzu muss der externe Monitor angeschlossen sein, und dann xrandr ohne Argumente ausgeführt werden:

$ xrandr
Screen 0: minimum 8 x 8, current 2390 x 768, maximum 32767 x 32767
LVDS1 connected primary 1366x768+0+0 (normal left inverted right x axis y axis) 277mm x 156mm
1366x768 60.0*+
1360x768 59.8 60.0
1024x768 60.0
800x600 60.3 56.2
640x480 59.9
VGA1 connected 1024x768+1366+0 (normal left inverted right x axis y axis) 0mm x 0mm
1024x768 60.0* 800x600 60.3 56.2
848x480 60.0
640x480 59.9
HDMI1 disconnected (normal left inverted right x axis y axis)
DP1 disconnected (normal left inverted right x axis y axis)

Durch diese Ausgabe erfahren wir, dass die interne Laptop-Anzeige den Namen LVDS1 hat und die externe Monitor-Anzeige den Namen VGA1. Wir sehen auch, dass 1024x768 die höchste Auflösung ist, der derzeit für die externe Anzeige zur Verfügung steht.

Als nächstes benutzen wir das Werkzeug cvt, um die sogenannten Modelines der gewünschten Bildschirmauflösung zu berechnen. Für 1680x1050 erhalten wir folgendes:

$ cvt 1680 1050
# 1680x1050 59.95 Hz (CVT 1.76MA) hsync: 65.29 kHz; pclk: 146.25 MHz
Modeline "1680x1050_60.00" 146.25 1680 1784 1960 2240 1050 1053 1059 1089 -hsync +vsync

Jetzt haben wir die benötigten Informationen, um einen neuen Anzeigemodus für den externen Monitor einzurichten. Wir führen die folgenden beiden xrandr Befehle aus:

$ xrandr --newmode "1680x1050_60.00"  146.25  1680 1784 1960 2240  1050 1053 1059 1089 -hsync +vsync
$ xrandr --addmode VGA1 "1680x1050_60.00"

Der erste Befehl definiert einen neuen Anzeigemodus mit dem Namen "1680x1050_60.00" (man kann einen beliebigen anderen Namen wählen), und der zweite Befehl assoziiert den neuen Anzeigemodus mit dem externen Monitor. Jetzt können wir in den Bildschirmeinstellungen die Auflösung 1680x1050 für den externen Monitor auswählen!

Da die obigen Einstellungen nur für die aktuelle Sitzung gültig sind, müssen wir sie in einer Datei abspeichern, welche bei jeder Anmeldung in GNOME ausgeführt wird. Manche Anleitungen empfehlen, ein Autostart-Skript zu erstellen, aber dies ist nicht der beste Weg. Es kann nämlich zu Komplikationen führen, z.B. wenn das Monitorkabel bereits bei der Anmeldung angeschlossen ist. Stattdessen erstellt man einfach im Heimatverzeichnis eine .xprofile Datei mit den beiden obigen xrandr Befehlen:

xrandr --newmode "1680x1050"  146.25  1680 1784 1960 2240  1050 1053 1059 1089 -hsync +vsync
xrandr --addmode VGA1 "1680x1050"

Das war's, wir sind fertig! Wir müssen .xprofile nicht einmal ausführbar machen, da es kein Shell-Skript im klassischen Sinne ist.

Zuletzt sei erwähnt, dass manche Anleitungen eine zusätzliche dritte Zeile beinhalten, durch die die gewünschte Bildschirmauflösung explizit eingestellt wird:

xrandr --output VGA1 --mode "1680x1050"

Es gibt jedoch keinen guten Grund, diese Zeile hinzuzufügen. Die gewünschte Auflösung muss nämlich nur einmal in den grafischen Bildschirmeinstellungen ausgewählt werden und wird danach von Ubuntu in der Konfigurationsdatei .config/monitors.xml gespeichert. Das Hinzufügen der obigen Zeile zu .xprofile kann sogar zu Problemen führen, wenn später einmal eine andere Auflösung gewünscht oder erforderlich ist. Sollte es zu irgendwelchen Komplikationen kommen, kann man durch Löschen der Dateien .xprofile und .config/monitors.xml stets alle Änderungen zurücksetzen.