Dual-Monitor-Betrieb in Ubuntu Linux


Hallo,

nachdem ich meinen Arbeitsplatz ein wenig umgekrempelt hatte, war Platz genug für meinen externen Monitor, der bisher seit Monaten unterm Tisch verstaubte…. Aber wie kann man unter Linux günstig 2 Monitore an einem Gerät betreiben?

Leider sind hier die Möglichkeiten sehr unterschiedlich und auch stark von Treibern abhängig. Einen guten Überblick bietet der Wiki-Artikel von ubuntuusers.de.

Die grundlegende Frage ist, ob man den Bildschirminhalt klonen will, einen erweiterten Desktop möchte, oder zwei völlig eigenständige Arbeitsoberflächen.

Den Bildschirminhalt zu klonen ist die einfachste Methode. Dank des nvidia-settings-managers ist die Einrichtung ein Kinderspiel und ohne Root-Rechte möglich. (siehe Bild)

nvidia-settings-manager

Mit diesem proprietären Tool kann man auch den erweiterten Desktop ohne Rootrechte einrichten. Es ist dieselbe Auswahl (Configuration: TwinView), und dann bei Position „Clone“ auswählen. (Achtung: Bei dieser Konfiguration wird ein großes Rechteck ausgehend vom größten Bildschirm generiert. Beim kleineren Bildschirm fällt daher ein Teil weg). Leider ist bei dieser Konfiguration der Einsatz von 3D-Desktop-Effekten nicht sehr komfortabel, weil die Breite des Desktops über beide Monitore geht.

Dieser Artikel widmet sich daher der Einrichtung von zwei eigenständigen, unabhängigen XServern, bei denen die 3D-Unterstützung erhalten bleibt.

Ausgehend von diesem Wiki-Artikel, habe ich die Konfigurationen vorgenommen. Aber Achtung, die vorgeschlagene xorg.conf funktioniert nicht.

Die Lösung sieht folgendermaßen aus:

Im nvidia-settings-manager wählt man bei Configuration: Seperate X Screen

nvidia-settings-seperate-x

und anschließend geht man auf „Save to X Configuration file“, hier wählt man ein Verzeichnis aus, auf das man Schreibrecht hat (zB: Desktop)

nvidia-settings-save-xorg

Nun können wir die Datei ins Verzeichnis /etc/X11 kopieren, und benennen die existierende xorg.conf um nach xorg-single.conf (mehr dazu später).

$ sudo mv /home/$USER/Desktop/xorg-dual.conf /etc/X11/xorg-dual.conf
$ sudo mv /etc/X11/xorg.conf /etc/X11/xorg-single.conf

Sollten wir den WindowManager mit der Dual-Konfiguration starten, so können wir mit dem nvidia-settings-manager nicht mehr in einen anderen Betrieb wechseln. Der nvidia-settings-manager stellt nur jene Parameter um, die ohne Root-Rechte umgestellt werden können.

Es empfiehlt sich daher in GRUB eine Auswahlmöglichkeit zu verankern zwischen Dual-Modus und Single-Modus wählen zu können.

Gemäß diesen Artikels aus dem ubuntuusers.de-Wiki habe ich Grub angepasst. Im Wiki-Artikel geht es um die Treiberauswahl, mein Script jedoch bietet die Wahl zwischen Dual- und Single-Modus. Man legt also zuerst eine Datei /etc/init.d/XModeSelect.sh an und gibt folgenden Code ein:

$ sudo nano /etc/init.d/XModeSelect.sh

Folgenden Code einfügen:

#!/bin/sh
if grep -q singleX /proc/cmdline; then
cp -lf /etc/X11/xorg-single.conf /etc/X11/xorg.conf
else
cp -lf /etc/X11/xorg-dual.conf /etc/X11/xorg.conf
fi

Nun noch folgende zwei Befehl ausführen:

$ sudo chmod a+x /etc/init.d/XModeSelect.sh
$ sudo update-rc.d XModeSelect.sh defaults 10

Als letzten Schritt müssen wir die Auswahlmöglichkeit noch in Grub verankern. Wir öffnen die menu.lst

$ sudo nano /boot/grub/menu.lst

und suchen die Zeile mit dem Inhalt # altoptions=(recovery mode) single.

Wir fügen VOR dieser Zeile folgende Zeile ein: (Achtung, die Auskommentierung ist Absicht!!)

# altoptions=(single xserver) singleX quiet splash

Nach einem

$ sudo update-grub

steht dann beim Booten die Auswahl zur Verfügung.

Was passiert nun ?

Je nach Auswahl in Grub wird der Parameter singleX übergeben (oder eben nicht), und das zuvor angelegte Script wird beim Start aufgerufen und kopiert je nach Bedarf die xorg-single.conf oder xorg-dual.conf an Stelle der xorg.conf.

Als Standard ist hier eben der Dual-Modus vorgesehen und sieht schlußendlich folgendermaßen aus:

dual-monitor-betrieb

R.S.

Hinweis: Jeder XServer für sich hat 3D-Beschleunigung und eigene virtuelle Arbeitsflächen. Das Verschieben von Fenstern ist in diesem Modus NICHT möglich. Dazu müßte man Xinerama aktivieren, was ich noch nicht getestet habe. Die Desktop-Oberflächen greifen auf den gleichen Desktop-Ordner zu, die Symbole werden aber nur auf jeweils einem Desktop dargestellt. Die Symbole kann man per Drag&Drop aber zwischen den Desktops hin- und herverschieben.

13 Gedanken zu “Dual-Monitor-Betrieb in Ubuntu Linux

  1. Moin moin,

    da du eine Nvidia Karte hast kannst du deinen Monitor im TwinView Modus betreiben, was IMHO angenehmer ist, da man Fenster einfach hin und her schieben kann.

    Dazu habe ich meine xorg.conf wie folgt konfiguriert. Das habe ich mir aus versch. Tutorials zusammen gebastelt und kann deswegen nicht genau sagen, was welche option im einzelnen macht. Aber das wichtigste sind diese optionen: Die TwinVieOrientation gibt an wo der Primäte Monitor steht. Hier also rechts vom anderen. SecondMonitorHorizSync und SecondMonitorVertRefresh sollte man nur verändern, wenn man sich sicher ist, dass man die Frequenzraten des Monitor kennt, jetzt stehen sie auf automatischer erkennung. MetaModes ist klar dass gibt die Auflösungen an. Defaultdepth ist nicht wie bei windows mit alpha kanal sonden wird ohne diesen angegeben, dh. 24 bit unter Linux entspricht 32 bit unter windows.

    Section „Device“
    Identifier „Nvidia Coprporation Geforce TI 4200“
    Driver „nvidia“
    Option „NoLogo“ „True“
    BusID „PCI:1:0:0“
    Option „TwinView“
    Option „MetaModes“ „1280×1024,1680×1050“
    Option „TwinViewOrientation“ „RightOf“
    Option „SecondMonitorHorizSync“ „UseEdidFreqs“
    Option „SecondMonitorVertRefresh“ „UseEdidFreqs“
    Option „TwinViewXineramaInfoOrder“ „DFP“
    Option „RenderAccel“ „true“
    EndSection

    Section „Monitor“
    Identifier „Configured Monitor“
    EndSection

    Section „Screen“
    Identifier „Default Screen“
    Monitor „Configured Monitor“
    Device „Configured Video Device“
    Defaultdepth 24
    Option „AddARGBGLXVisuals“ „True“
    EndSection

    Gruß,
    Gerrit

  2. Hallo,

    ja, ich kenne den TwinView-Modus. Den kann man über den NVDIA-Settings-Manager auch ohne manuelles Editieren der xorg.conf einstellen. Aber der hat meinen Bedürfnissen nicht genügt, weil

    1.) die 3D-Desktop-Effekte auf die ganze Breite gehen (würfel, Scale etc.)

    2.) Maximierte Fenster über die ganze Breite gehen.

    Deshalb waren mir 2 separate XServer, von denen jeder für sich 3D-Beschleunigung hat, lieber.

    Lg, Robert

  3. Das mit den 3D Effekten weiß ich nicht, die hab ich bei mir aus.

    zu 2. Das Problem hatte ich auch als ich das Nvidia tool benutzt habe, aber als ich die xorg.conf manuell eingestellt habe ist das Problem nicht auf getreten. Jetzt ist wenn ich ein Fenster maximiere nur auf einem Monitor maximiert.

    Wie bekommst du denn bei dem Dual Modus ein Fenster auf den anderen Monitor? Kann man mit der Maus von einem Monitor zum anderen und da wo man es startet ist es dann auch? Oder wie muss man sich das Vorstellen?

    Gruß,
    Gerrit

  4. Naja, du hast eben 2 eigenständige X-Server. Die Maus kannst du hin- und herbewegen. Das ist kein Problem. Wenn ich ein Programm auf einem der beiden XServer haben will, muss ich es eben dort starten.

    Alternativ kannst du auch mit DISPLAY=:0.0 bzw. DISPLAY=:0.1 den Screen bestimmen.

    Also zB will ich den Firefox immer am Screen 1 haben, dann würde ich einen Starter mit folgender Befehlszeile eingeben:

    DISPLAY=:0.1 firefox

    Was auch geht, ist das Drag&Drop bei Dateien etc. Einzig und allein das Verschieben von Fenstern geht nicht. Aber das brauch ich nicht, weil ich ja im Vorhinein entscheide auf welchem Screen welche Programme laufen sollen.

  5. Aber dann ist es nicht Möglich ein Programm mit verschiedenen Fenster auf beiden Monitoren zu verteilen?! Also dass ich zum Beispiel die Arbeitsfläche von GIMP auf dem primären Monitor habe und den Rest (Ebenen, Werkzeugleiste etc. ) auf dem anderen Monitor habe. Selbest gilt auch für Eclipse oder dass ich Pidgin Fenster hin und her schieben kann wo ich sie grad brauche, sondern die starten alle da wo das Elternprogramm gestartet wurde.

    Die 3D Effekte hab ich mal bei mir jetzt getestet und da muss ich dir recht geben, die funktionieren nicht, da meine Grafikkarte das nicht mitmacht, die ist zu alt dafür um die Effekte für zwei Monitor flüssig zu rendern.

  6. ja, das stimmt. Du kannst Eltern- und Kindprozesse nicht trennen, da ja jedes Programm als Unterprozess vom XServer läuft. Hier benutze ich aber den Würfeleffekt.

    Ich habe ja mit jedem XServer 4 Arbeitsflächen und nutze vorwiegend den Scale-Effekt. Linke obere Ecke = Alle Fenster der jeweiligen Arbeitsfläche, Linke untere Ecke = Alle Fenster aller Arbeitsflächen.

    So kann ich sehr rasch zwischen den Fenstern umschalten.

    Es gibt aber noch die Möglichkeit Xinerama einzuschalten. Xinerama macht auch einen erweiterten Desktop, das hab ich aber noch nicht mit der NVIDIA-Konfiguration ausprobiert. Werde ich mal machen…

  7. Also der Xinerama-Modus ist ein Sch…..

    Einfach nur erweiterter Desktop, allerdings funktionieren dann die 3D-Effekte nicht mehr.

    Es ist definitiv besser bei der NVIDIA-Karte den „TwinView“ einzustellen. Der funktioniert nur, wenn man den nvidia-Treiber (nicht nv-Treiber) nutzt (siehe http://wiki.ubuntuusers.de/Dualview#head-19f101568b582edb9dc154983c72696166268ccd) und außerdem kann man ihn direkt als User mit dem nvidia-settings-manager aktivieren.

    Unter diesem Modus funktioniert die 3D-Beschleunigung (bei mir auch ausreichend schnell) und man kann zumindest ein paar Desktop-Effekte nutzen (Scale geht halt nicht gscheit und das war bei mir das K.O.-Kriterium…)

  8. Hallo,

    ich habe das einstellen eines externen Monitors an meinen Laptop auch so gemacht mit nvidia-setting unter Ubuntui 9.04 wie beschrieben. War auch ganz einfach – wie beschrieben . Ich habe auch „Configure Display Device“ mit „Separate X Screen“ durchgeführt.

    Wenn ich dann aber die neue xorg.conf mit einem Neustart „aktiviere“, dann habe ich plötzlich durch aufruf von nvidia-settings den TwinView-Modus eingeschaltet. Kann mir das mal jemand erklären?

    Ich finde die Einstellung zu diesem Thema immer noch eine reine Katastrophe.

    Danke für eine Rückmeldung!

    Klemi

  9. Hallo,

    ja, die Einstellungen sind leider nicht sehr angenehm… Fände auch besser, wenn nvidia einfach auf standard-tools unter linux setzen würde. Aber so ist das halt mit closed-source…..

    Was ich bei deinem Problem mal vermuten würde ist, dass du die xorg.conf unter /etc/X11/xorg.conf nicht geändert hast.

    Wenn du mit dem Nvidia-Tool im laufenden Betrieb den Modus wechselst, dann geht das zwar, aber du hast als Benutzer ja kein Recht in /etc/X11 eine Datei zu ändern. Dazu mußt du entweder die nvidia-settings mit sudo ausführen, oder in den nvidia-settings die xorg.conf exportieren (zB auf den Desktop), und dann mit sudo-rechten nach /etc/X11 kopieren.

    Also die einfachere Variante wäre, wenn du die Programmverknüpfung auf nvidia-settings änderst auf „gksudo nvidia-settings“. Damit rennt das Programm mit Root-Rechten und die xorg.conf kann exportiert werden.

    Lg, R.S.

  10. Hallo rschrenk,

    danke für deine Antwort. Aber die xorg.conf habe ich vom Desktop mit sudo-Rechten nach /etc/X11 kopiert.
    Ich habe das Script disper installiert, welches wohl „on the fly zwischen 2 Monitoren hin und herschalten kann.
    Dies scheint aber mit bestimmten Befehlen den „Twin View Modus einzuschalten:
    siehe http://forum.ubuntuusers.de/topic/2-bildschirm-am-laptop-disper-installiert/

    Würde die Diskussion gerne fortführen, da mein Ergebnis immer noch nicht befriedigend ist.

    Gruß

    Klemi

  11. Hallo,

    das disper-Tool kenne ich nicht und weiß daher auch nicht wie es funktioniert. An deiner Stelle würde ich erstmal dieses Tool weglassen und sehen, ob die nvidia-settings ohne zusätzlichem Tool funktionieren, damit du wenigstens die Fehlerquelle lokalisieren kannst.

    Wenn es am Tool liegt, dann ist die xorg.conf ja vermutlich in Ordnung…

    Lg, R.S.

Hinterlasse eine Antwort zu gerrit Antwort abbrechen