Schritt für Schritt: Zwei Bildschirme mit dem nvidia-Treiber

Für Notebook-User, die Ubuntu, Debian oder ein anderes Linux verwenden, ist die problemloseste Wahl ein Gerät mit Intels Chipsatz-Grafik – sofern der von Intel selbst betreute Open-Source-Treiber nicht gerade kaputt ist. Nun ist die Intel-Grafik aber nicht gerade die potenteste. Mein Toshiba Tecra R10 kam mit einem dedizierten Grafikchip von Nvidia. Beim Recherchieren, ähh: Googeln, habe ich dann festgestellt, dass eine Menge Leute in einer Menge Foren Bastelanleitungen und aufgeblähte xorg.conf-Dateien darüber austauschen, wie man ein Dual-Monitor-Setup (bei nvidia Twinview genannt) mit dem proprietären nvidia-Treiber erstellt. Dabei ist es doch recht einfach. Und deshalb hier quick and dirty eine Schritt-für-Schritt-Anleitung.

Unter Ubuntu lässt sich der nvidia-Treiber recht einfach über System -> System-Verwaltung -> Hardware-Treiber nachinstallieren. Der Schlenker ist notwendig, da der Grafikkarten-Hersteller den Code nicht offenlegt. Debian, das von Haus aus nur auf freie Software setzt, bereitet mehr Umstände; ein Artikel im Debian-Wiki hilft weiter. Andere Distrubutionen sollten eigene Pakete bereithalten – wenn nicht, bietet nvidia einen eigenen Installer an. In der Folge gehe ich davon aus, dass der nvidia-Treiber erfolgreich installiert worden ist und das im Terminal abgesetzte Kommando

$ nvidia-settings

das grafische Konfigurationsmenü hervorzaubert. Unter X-Server Display Configuration und dem Registerblatt Display sollten sie jetzt ein Pulldown-Menü mit Ihren beiden Monitoren, dem Notebook-Display und dem angeschlossenen externen Monitor, sehen. Ja? Prima. Machen sie nvidia-settings gleich wieder zu. Statt sich mit dem grafischen Interface, Fehlermeldungen wie “The current settings cannot completely be applied due to …” und Reboot-Aufforderungen herumzuschlagen, gehen wir lieber den flinken Weg zu Fuß.

1. Schritt: Führen Sie auf der Konsole das Kommando

$ sudo nvidia-xconfig --twinview

aus. Dies schreibt eine neue xorg.conf-Datei. Selbst wenn Sie vorher schon an der xorg.conf herumgedoktert haben – egal: Fangen Sie von vorne an. Es ist das einfachste. Und falls alle Stricke reißen, hat nvidia-xconfig ja ein Backup angelegt.

2. Schritt: Reboot. Nach meiner Erfahrung kann es zu verwirrenden Effekten kommen, wenn man sich nur aus- und wieder einloggt. Also: kompletter Neustart, dann wird auch das Grafiksystem neu initialisiert.

Voila: Beide Bildschirme sind jetzt zu einem großen Bildschirm vereint; mit der Maus kann man quer rüberfahren.

Vielleicht ist das aber noch nicht alles. Vielleicht steht Ihr Laptop ja links vom Monitor, während nvidia die Position genau umgekehrt konfiguriert hat. Vielleicht wollen Sie auch mal umschalten und nur den Laptop oder nur den externen Monitor aktivieren. Das wären drei unterschiedliche Display-Setups. Bitte sehr:

3. Schritt: Metamodes in xorg.conf anpassen

Öffnen Sie die /etc/X11/xorg.conf mit Root-Rechten in ihrem bevorzugten Editor. Scrollen Sie herunter zu Section “Screen”. Dort existiert bereits eine Option “Metamodes”. Die nvidia-xconfig hat sie mit zwei Werten zur automatischen Konfiguration ausgefüllt. Ich habe diese Zeile wie folgt geändert:

Option "MetaModes" "DFP:1280X800_60 @1280x1050 +0+0, CRT:1680x1050_60 +1280+0; DFP:1280x800 @1280x800 +0+0, CRT:NULL; DFP:NULL, CRT:1680x1050_60 +0+0"

Mein Setup ist zwar nicht exotisch, aber normalerweise können Sie diese Zeile nicht 1:1 übernehmen, sondern müssen sie an Ihre Verhältnisse, sprich: Ihre Displays, anpassen. Die MetaModes sind nichts anderes als paarweise Display-Setups; jedes Display-Setup bekommt einen MetaMode; die MetaModes werden per Semikolon voneinander getrennt. Ich habe also drei MetaModes definiert:

  1. Display-Paar: DFP:1280X800_60 @1280×1050 +0+0, CRT:1680x1050_60 @1280x800+1280+0
    CRT steht für mein externes Display; es hat eine Auflösung von 1680×1050 Pixeln. DFP steht für das interne Notebook-Display; es hat eine Auflösung von 1280×800 Pixeln. Beide Displays sind an und bilden einen großen Bildschirm der Breite 1280 plus 1680 Pixel. Falls Sie ein Hintergrundbild verwenden, wird es auf die volle Breite gestreckt. Da bei mir das Notebook links vom externen Display steht, muss das externe Display so konfiguriert werden, dass sein Anzeigebereich in der Horizontalen bei 1280 Pixeln beginnt; deshalb die Angabe “+1280”. In der Vertikalen soll der Anzeigebereich hingegen immer an der Oberkante beginnen; deshalb “+0”. Damit der Notebook-Bildschirm zumindest virtuell so hoch ist wie das externe Display, habe ich ihn mit der Angabe “@1280×1050” höher gemacht als er in Wirklichkeit ist – in der Praxis kann man das weglassen.
  2. Display-Paar: DFP:1280×800 @1280x800 +0+0, CRT:NULL
    Strenggenommen ist dies kein Display-Paar, denn hier soll nur das Notebook-Display an sein. Deshalb wird der externe Monitor deaktiviert (“NULL”). Das Hintergrundbild wird wieder auf die normalen Display-Maße gestaucht, und auch die “@”-Angabe für das virtuelle Maß ist jetzt entsprechend.
  3. Display-Paar: DFP:NULL, CRT:1680x1050_60 +0+0
    Nun ist nur der externe Monitor an und das Hintergrundbild wird auf dessen Größe skaliert. Der Notebook-Bildschirm ist aus.

Einige Angaben in den zuvor genannten MetaModes-Zeilen sind – wie sich herausstellt – nicht notwendig; ich habe sie nur zur Verdeutlichung dennoch angegeben. In der Praxis reicht folgende Zeile:

Option "MetaModes" "DFP:1280x800+0+0, CRT:1680x1050+1280+0; DFP:1280x800; CRT:1680x1050"

Bewirkt genau dasselbe und steht so in meiner xorg.conf.

4. Schritt: Reboot in das neue Display-Setup

Nach dem Neustart begrüßt uns das System wieder mit einem breiten Desktop über beide Displays. Diesmal steht das Notebook aber nicht nur links, sondern zeigt auch den linken Bildschirmrand.

Der proprietäre nvidia-Treiber arbeitet zwar bisher (Stand: Ubuntu 9.10) noch nicht nahtlos mit dem Standard-Konfigurationswerkzeug xrandr zusammen; dennoch sollte es uns jetzt auf der Konsole unsere drei Bildschirm-Setups ausgeben:

ego@TecraR10:~$ xrandr
Screen 0: minimum 1280 x 800, current 2960 x 1050, maximum 2960 x 1050
default connected 2960x1050+0+0 0mm x 0mm
2960x1050      50.0*
1280x800       51.0
1680x1050      52.0

Wie man sieht, weiß xrandr nichts vom Twinview, sondern behandelt unsere Doppel-Bildschirm-Konfiguration mit insgesamt 2960*1050 Pixeln wie einen einzelnen superbreiten Schirm. Das Sternchen dahinter zeigt, dass diese Konfiguration gerade aktiv ist.

Display-Setup mit xrandr ändern. Ab sofort genügt das Absetzen des Befehls

xrandr -s <Setup-Nummer>

zum Umschalten zwischen den einzelnen Display-Konfigurationen, wobei die Zählung nicht bei 1, sondern bei 0 beginnt. So schaltet etwa xrandr -s 2 nur den externen Monitor mit 1680×1050 ein, und xrandr -s 0 spreizt das Bild wieder auf zwei Schirme. Wenn Sie das Notebook unterwegs betreiben, stehen natürlich mangels externem Monitor die Konfigurationen 0 und 2 nicht mehr zur Verfügung.

Wenn Ihr Notebook eine Funktions-Taste zur Display-Umschaltung besitzt und Linux diese Tastenbelegung kennt – bei meinem Toshiba-Gerät ist es F5 -, dann sollte das Toggeln zwischen den einzelnen Display-Konfigurationen auch darüber funktionieren.

Open Source Treiber für Nvidia-Karten
Natürlich gibt es auch Open-Source-Treiber für Nvidia-Karten. Während Nvidia seinen alten, aber sehr limitierten Open-Source-Treiber nv nicht mehr weiterentwickeln will, drängt neuerdings nouveau in den Vordergrund. Letzterer hat per Reverse-Engeneering große Fortschritte gemacht. Bei Fedora ist er schon Standard, bei Ubuntu wird er es in der Ende April erscheinenden Version 10.04 sein. Leider kann aber nur der proprietäre nvidia-Treiber die modernen Grafikkarten des Herstellers samt 3D-Beschleunigung voll ausreizen.

1 comment on “Schritt für Schritt: Zwei Bildschirme mit dem nvidia-Treiber”

Schreibe einen Kommentar