XFree86 erlaubt seit Version 4, mehrere Grafikkarten gleichzeitig zu verwenden; so kann zur AGP-Karte noch eine ältere PCI-Karte in den Rechner eingebaut werden, um einen zweiten Monitor zu betreiben. Eine Alternative sind Dual-Head-Karten mit zwei Monitor-Anschlüssen.
In diesem Artikel beschreiben wir, wie Sie mit zwei Grafikkarten oder einer Dual-Head-Karte (mit zwei VGA-Ausgängen) zwei Monitore parallel betreiben können. Um dieses Feature nutzen zu können, müssen Sie bereits mit XFree86 4.x arbeiten – wir haben unsere Tests mit der aktuellen Version 4.1.0 durchgeführt. XFree86 3.x beherrscht den Dual-Head-Betrieb nicht.
Zwei Karten einrichten
Nach dem Einbau einer zusätzlichen (PCI-) Karte gilt es zunächst herauszufinden, in welcher Reihenfolge der Rechner mit diesen umgeht. Das ist einfach: Zwei Monitore anschließen und den Rechner starten; die Karte, die die BIOS-Meldungen anzeigt, ist die “erste”. Gefällt Ihnen die Reihenfolge nicht, haben Sie neben dem Tausch der Monitore noch eventuell die Möglichkeit, im BIOS die Bus-Reihenfolge einzustellen (AGP/PCI oder PCI/AGP).
Starten Sie nun Linux in einem Runlevel, in dem X nicht aktiviert wird; bei Red Hat und Mandrake eignet sich Runlevel 3, bei SuSE Runlevel 2. Einige Distributionen werden beim Systemstart die neue Grafikkarte erkennen und automatisch einbinden wollen (Mandrake Linux 8 schlug etwa gleich eine Konfiguration mit beiden Karten vor); wir machen das im Folgenden selbst.
Nach dem Anmelden als root prüfen Sie zunächst, ob beide Karten von Linux ordentlich erkannt wurden; dazu suchen Sie mit lspci nach Grafikkarten. In unserem Beispielrechner mit einer Matrox-G400-AGP- und einer ATI-Rage-PCI-Karte sieht dies wie folgt aus:
[esser@dual dual]$ lspci | grep VGA 00:0a.0 VGA compatible controller: ATI Technologies Inc 3D Rage IIC 215IIC [Mach64 GT IIC] (rev 3a) 01:00.0 VGA compatible controller: Matrox Graphics, Inc. MGA G400 AGP (rev 04)
Die Ausgabe verrät Zweierlei: Erstens wurden beide Grafikkarten vom Kernel erkannt, und zweitens erfahren wir für jede Karte in der Form “xx:yy.z”, wie sie angesprochen werden kann. xx ist dabei die Bus-ID (00 ist der PCI-Bus, 01 der AGP-Bus), yy ist die Geräte-ID (in hexadezimaler Schreibweise – 0a ist im Dezimalsystem 10), und z die “Funktion”, in der Regel 0. Diese Werte brauchen wir gleich, um in der XFree86-Konfiguration die Karten zu beschreiben. lspci fragt übrigens PCI- und AGP-Bus ab und schlägt die Geräte-IDs in der Datei /usr/share/pci.ids nach.
Erzeugen Sie nun eine Sicherheitskopie der XFree86-Konfigurationsdatei (häufig /etc/X11/XF86Config-4 genannt, um sie von der entsprechenden Datei für XFree 3.x zu unterscheiden), und öffnen Sie diese in einem Editor Ihrer Wahl. Suchen Sie dann nach dem “Device”-Abschnitt. Dort sollte bereits die AGP-Karte konfiguriert sein, wenn X vor dem Einbau der zweiten Karte korrekt eingerichtet war. Da wir im Folgenden ja zwei Karten verwenden wollen, wird zunächst ein Eintrag “BusID” ergänzt, der für die AGP-Karte den Wert “PCI:1:0:0” erhält. Diese Angabe entspricht der lspci-Ausgabe “01:00.0”.
# Graphics device section
Section "Device"
Identifier "Matrox Millennium G400"
VendorName "Matrox"
BoardName "Millennium G400"
Driver "mga"
Option "DPMS"BusID "PCI:1:0:0"
EndSection
Unter diesem Device-Abschnitt legen Sie einen zweiten an; in unserem Fall konfigurieren wir eine ATI-Karte. Die Device-Section sieht fast genauso aus, wie es der Fall wäre, wenn ausschließlich diese Karte vorhanden wäre – auch hier geben wir wieder die BusID an: Aus “00:0a.0” (lspci) wird nun “PCI:0:10:0”.
Section "Device"
Identifier "ATI Mach64 3D RAGE II"
VendorName "ATI"
BoardName "Rage II"
Driver "ati"
Option "DPMS"BusID "PCI:0:10:0"
EndSection
Als nächsten Schritt definieren wir die beiden Monitore, die an die Karten angeschlossen werden. Hier gibt es keine Überraschungen: Ungewöhnlich ist nur, dass es zwei “Monitor”-Abschitte gibt:
# Monitor section
Section "Monitor"
Identifier "monitor1"
VendorName "Unknown"
ModelName "Unknown"
HorizSync 30-96
VertRefresh 48-120
EndSection
Section "Monitor"
Identifier "monitor2"
VendorName "Unknown"
ModelName "Unknown"
HorizSync 30-96
VertRefresh 48-120
EndSection
Monitor 1 soll dabei der linke Monitor sein; Nummer 2 der rechte. Als nächstes folgt die Definition von zwei “Screen”-Abschnitten. Ein Screen fasst eine Kombination aus “Device” und “Monitor” und die Einstellungen zu Auflösung und Farbtiefe zusammen. Auch diese Abschnitte sehen wieder ganz gewöhnlich aus:
# Screen sections
Section "Screen"
Identifier "links"
Device "Matrox Millennium G400"
Monitor "monitor1"
DefaultColorDepth 16
Subsection "Display"
Depth 16
Modes "1280x1024" "1024x768" "800x600" "640x480"
ViewPort 0 0
EndSubsection
EndSection
Section "Screen"
Identifier "rechts"
Device "ATI Mach64 3D RAGE II"
Monitor "monitor2"
DefaultColorDepth 16
Subsection "Display"
Depth 16
Modes "1024x768" "800x600" "640x480"
ViewPort 0 0
EndSubsection
EndSection
Um mehr Übersicht zu bieten, haben wir die beiden “Screen”-Abschnitte mit den Identifiers “links” und “rechts” versehen. Die maximalen Auflösungen der beiden Screens sind hier unterschiedlich: Das linke Display wird in 1280×1024 starten, während das rechte Display nur 1024×768 Pixel bietet.
Zum Abschluss muss dem X-Server noch mitgeteilt werden, welche Screens in welcher Anordnung verwendet werden – dies geschieht über einen “ServerLayout”-Abschnitt:
# Server Layout
Section "ServerLayout"
Identifier "layout1"
Screen "links"
Screen "rechts" RightOf "links"
InputDevice "Mouse1" "CorePointer"
InputDevice "Keyboard1" "CoreKeyboard"
EndSection
Das Schlüsselwortes “RightOf” leistet genau das, was “right of” bedeutet: Der rechte Screen wird rechts vom linken angeordnet. Alle übrigen Abschnitte der X-Konfigurationsdatei haben wir hier nicht aufgeführt – natürlich müssen auch Maus und Tastatur, Fonts und Module konfiguriert werden, aber dies geschieht genau wie im Ein-Karten-Fall.
Xinerama?
Es gibt zwei Möglichkeiten, die beiden Monitore zu verwenden: Eine davon nennt sich “Xinerama” und erzeugt einen großen gemeinsamen Desktop, auf dem sich Fenster zwischen den beiden Monitoren hin und her schieben lassen; dabei kann ein Fenster auch “auf der Kante” liegen, also jeweils einen Teil auf einem der beiden Monitore darstellen.
Xinerama einzusetzen, ist jedoch nur dann eine gute Idee, wenn beide Monitore in der gleichen Auflösung betrieben werden. Da ein Desktop immer eine rechteckige Form hat, wird im Fall unterschiedlicher Auflösungen der “kleinere” Monitor (bei Links-Rechts-Anordnung) so behandelt, als ob er die gleiche Zeilenzahl wie der große hätte. Als Folge ist ein Teil des Desktops (ein halber Streifen, z. B. im rechten Bereich) nicht sichtbar. Dies trifft bei KDE und GNOME die Startleiste, die sich standardmäßig am unteren Desktop-Rand befindet, so dass diese auf dem kleineren Monitor nicht zu erkennen ist.
Werden aber beide Monitore mit der gleichen Auflösung benutzt, spricht nichts gegen Xinerama. Der “ServerLayout”-Abschnitt ist dann um eine Option zu ergänzen:
# Server Layout
Section "ServerLayout"
Identifier "layout1"
Screen "links"
Screen "rechts" RightOf "links"Option "Xinerama" "on"
InputDevice "Mouse1" "CorePointer"
InputDevice "Keyboard1" "CoreKeyboard"
EndSection
Wer auf die Xinerama-Option verzichtet, erhält stattdessen zwei getrennte Desktops auf den beiden Rechnern. KDE 2.2 erzeugt dann im Home-Verzeichnis zusätzlich zu Desktop ein weiteres KDE-Verzeichnis Desktop1, welches Icon-Plazierungen für diesen zweiten Desktop aufnimmt. Außerdem wird in .kde/share/config neben der Desktop-Konfigurationsdatei kdesktoprc ebenfalls eine zweite Datei namens kdesktop-screen-1rc erzeugt. So lassen sich beide Desktops völlig getrennt einrichten. Der zweite Desktop bietet auch eine separate Startleiste.
Ein kleiner Bug bei dieser Einstellung fiel beim Aktivieren des Screensavers auf: Zwar werden beide Desktops für Eingaben gesperrt, bis das Passwort eingegeben wird; der zweite Desktop bleibt aber sichtbar. Wer hier verhindern will, dass Neugierige einen Blick auf die Fenster des zweiten Monitors werfen, sollte diese vorher minimieren oder auf einen freien Desktop wechseln.
Displays :0.0 und :0.1
Die Variable $DISPLAY gibt unter X Auskunft darüber, auf welchem X-Server eine Anwendung angezeigt wird. Dies ist in der Regel “:0.0”. Dank zweier separater Desktops lassen sich nun auch zwei X-Displays ansteuern – diese heißen “:0.0” und “:0.1”. Um zu überprüfen, dass dies stimmt, öffnen Sie einfach auf beiden Desktops jeweils ein Terminalprogramm und geben dort den Befehl
echo $DISPLAY
ein. Wollen Sie nun ein Fenster explizit auf dem linken oder rechten Desktop öffnen, können Sie die Standard-X-Option “-display” verwenden: So wird ein
xterm -display :0.0
ein xterm auf dem linken Monitor erscheinen lassen, während mit “:0.1” statt “:0.0” der rechte Monitor angesteuert wird.
Dual-Head-Karten
Alternativ zum Einsatz von zwei Grafikkarten kann auch eine Dual-Head-Karte verwendet werden: Diese enthält zwei Grafikchips und entsprechend zwei Monitor-Anschlüsse. So kann ein Slot eingespart werden. Wir haben dies am Beispiel der Matrox Millennium G400 ausprobiert.
Die X-Konfiguration läuft hier ähnlich wie im Falle zweier Grafikkarten: Es sind auch hier je zwei “Device”-, “Monitor”- und “Screen”-Abschnitte notwendig. Einen Unterschied gibt es nur bei den “Device”-Einträgen, denn hier muss ja zwei mal die gleiche Grafikkarte angesprochen werden. Dazu gibt es das zusätzliche Schlüsselwort “Screen”, über das die beiden VGA-Ausgänge der Karte unterschieden werden. Passende “Device”-Abschnitte sehen wie folgt aus:
Section "Device"
Identifier "G400_1"
Driver "mga"
BusID "PCI:1:0:0"Screen 0
EndSection
Section "Device"
Identifier "G400_2"
Driver "mga"
BusID "PCI:1:0:0"Screen 1
EndSection
Für diese Karte gibt es auf dem Matrox-FTP-Server Module und Konfigurations-Tool, die installiert werden müssen; die beiden Archive heißen mga-133_143.tgz und mgapdesk-1_00-7beta_i386.rpm. Ersteres enthält Module mga_drv.o, mga_hal_drv.o und mga_dri.so (für XFree86 4.1.0 und 4.0.3). Diese ersetzen (und ergänzen) das Modul mga_drv.o, welches Bestandteil von XFree86 ist. Im Test funktionierte dies recht gut, allerdings mit einer problematischen Einschränkung: Wechselt man (z. B. über [Strg-Alt-F1]) auf eine Textkonsole und dann wieder zurück nach X, so hängt sich der Rechner vollständig auf und muss neu gestartet werden. Dies ist natürlich mit dem Risiko eines Datenverlustes behaftet, sollte also vermieden werden… Das Problem trat unter XFree86 4.0.2 und 4.1.0 (mit den jeweils dazu passenden Matrox-Treibern) auf.
Leicht und effektiv
Wer noch eine alte PCI-Grafikkarte und einen Monitor übrig hat, kann den Linux-Desktop schnell mit XFree86 4.x verdoppeln: Anders als die virtuellen Desktops, die KDE und GNOME bereitstellen, bietet eine doppelte Anzeige den Vorteil, den zweifachen Inhalt gleichzeitig anzeigen zu können. Ob bei der Software-Entwicklung, dem exzessiven Web-Konsum mit etlichen offenen Netscape-Fenstern oder einfach für das Fernsehbild auf dem zweiten Monitor: Mit zwei Desktops macht die Arbeit mehr Spaß. Viel Erfolg bei der Konfiguration.
Glossar
-
hexadezimal
-
Das hexadezimale Zahlensystem besitzt gegenüber unserem normalen Zehnersystem 16 Ziffern: 0-9 und die Buchstaben a bis f, die 10 bis 15 repräsentieren. Eine Hexadezimalzahl wie z. B. “01f3” wird als 0 * 16^3 + 1 * 16^2 + 15 * 16^1 + 3 * 16^0 = 499 in das Zehnersystem umgerechnet.






Hallo ansich sehr schön beschrieben, klappt auch in der regel, nun habe ich vor kurzem eine neue grafikkarte für den anschluss von 2 monitoren eingebaut bekommen. Unter windows schreit die mitgelieferte cd! das die Hardware nicht zu den treibern passe, nun steht mir unter slitatz kein bequemes minue wie in ubuntu zur verfügung um mein Dualview einzurichten, mit der Konsole bin ich sehr schwach, wie viele alte semester die spät mit dem Hobby Computer anfingen. In diesem scenario geht alles glatt in meinem endet schon die suche nach der Grafikkarte, eine ATI Radeon 7500, mit der ausgabe not found, fertig… Mehr »