= Dual-Head-Display =

'''Update:''' Seit neueren X-Versionen geschieht die Konfiguration von mehreren Monitoren mit der ~XRandR-Erweiterung. Diese erkennt selbstständig alle angeschlossenen Monitore, deren Auflösung usw. Hiermit ist es - gesteuert durch den Befehl '''xrandr''' - sehr einfach, mehrere Monitore einzustellen. Ein bisschen was zu diesem Thema (insbesondere interessante Links) finden sich auf der Seite zum [Radeon] Grafiktreiber. Wer dennoch mit älteren X-Server Versionen arbeitet und die klassische Xinerama-Lösung braucht, kann hier den älteren Artikel aus dem Jahr 2002 weiterlesen:

----

Immer mal wieder bei meiner Beschäftigung mit dem X-Window-System
habe ich gehört, das es möglich sein soll, zwei Monitore an einem
Rechner anzuschliessen. Natürlich denkt man immer zuerst "na ja -
da braucht man sicher einen Mega-Rechner und besondere
Grafik-Hardware" etc., deshalb habe ich mich bisher noch nicht
genauer damit beschäftigt. Nach einem entsprechenden Artikel in der
'''Linux User 12/2001''' habe ich mich dann doch mal bemüht. Und
siehe da - es ging alles ganz einfach!

== Was braucht man? ==

Erstmal braucht man zwei Monitore. In vielen Haushalten steht noch
ein altes, vermeintlich ausgedientes Gerät in der Ecke herum. Das
ist also kein zu grosses Problem. Jetzt tut sich allerdings ein
anderes Problem auf: Wo steckt man das Ding ein?!? Dazu brauchen
wir eine zweite Grafikkarte. Da in normalen Rechern der einzige
AGP-Slot aber bereits benutzt ist, braucht man eine
'''PCI-Grafikkarte'''. Diese wird einfach eingesteckt und fertig!
Auch hier habe ich zur Beschaffung auf die Reserven meines
Haushaltes zurückgegriffen, in dem noch ein alter Rechner in der
Ecke herumstand, der eine solche Karte enthielt (AGP war da noch
nicht erfunden). Ansonsten sind PCI-Grafikkarten neu ab ca. EUR
35,- zu haben, gebrauchte auf Trödelmärkten oder Online-Auktionen
allerdings auch viel günstiger.

Softwaremässig wird lediglich XFree86 in der Version 4.x
vorausgesetzt. Dieser sollte in allen aktuellen Distributionen
installiert sein, unter Debian z.B. im Paket ''xserver-xfree86''.

== Und warum das Ganze? ==

Erstmal die wichtigste Antwort: Weil es geht! :-)

Darüberhinaus hat man mit zwei Monitoren folgende Möglichkeiten:

* '''doppelte Oberfläche''' - z.B. KDE macht zwei getrennte
Desktops auf beiden Bildschirmen auf. Beide Desktops können ganz
getrennt konfiguriert werden. Dies gilt sowohl für X (Farbtiefe,
Auflösung) als auch für KDE (Menüs, Panel, Hintergrund, etc.). Man
wechselt den Desktop, in dem man mit der Maus aus dem einen Monitor
nach rechts heauszieht. Die Maus taucht dann Übergangslos von links
im anderen Monitor wieder auf. Diese Einstellung hat auch den
Vorteil, dass man den zweiten Monitor ausgeschaltet lassen kann.
Braucht man ihn dann doch, weil es auf dem ersten Desktop zu eng
mit Fenstern wird, schaltet man ihn ein und hat die zweite
Arbeitsfläche. (Display :0.0 und :0.1)

* '''Xinerama''' - Hierbei werden beide Monitore als ein
gemeinsamer grosser Desktop betrachtet. Beide Monitore müssen die
gleiche Farbtiefe haben und sollten die gleiche Auflösung haben
(sonst entstehen unsichtbare Bereiche, da der virtuelle Desktop
immer rechteckig ist). Damit Xinarama Sinn macht, empfiehlt sich
aber ein Windowmanager, der damit umgehen kann. z.B. KDE erzeugt
das Panel über die gesamte Breite, es ist also in der Mitte
"zerschnitten". Ein guter Windowmanager sollte beim Klick auf
"Vollbild" das Fenster Bildschirm-Gross machen und nicht
Desktop-Gross (welcher?). (Display :0.0)

* '''Zwei X-Server''' - Dies ist von mir noch nicht getestet
worden, aber im Prinzip sollte es möglich sein, auf dem zweiten
Monitor mit einer zweiten Maus (z.B. seriell) und ggf. einer
zweiten Tastatur (z.B. USB) einen kompletten zweiten Arbeitsplatz
aufzumachen. Hierfür müssen dann zwei X-Server mit jeweils
getrennten Konfigurations-Dateien gestartet werden. (Display :0.0
und :1.0)

== Konfiguration ==

Die Konfigurationsdatei ist '''/etc/X11/XF86Config-4'''. Hiervon
sollte man sich erstmal eine Kopie machen. Im Prinzip ist die
X-Konfiguration in der 4.x-Version wesentlich einfacher geworden
als vorher in der 3.x. Die Kunst ist nur noch, den richtigen
Treiber für die Grafikkarte auszuwählen. Um diesen zu finden, gibt
es verschiedene Möglichkeiten:

* starten von '''X -configure''' und einen Blick in die erstellte
'''/root/XF86Config-4''' werden.
* Knoppix starten und schauen, was die autoconfig dort benutzt
* unter Debian: '''dpkg-reconfigure xserver-xfree86''' starten und
Treiber auswählen
* vesa-Treiber probieren
* vga-Treiber probieren (schlechteste Lösung)

Die Schwierigkeit ist natürlich, dass wir für zwei Grafikkarten
auch zwei Treiber herausfinden müssen. Die einfachste Lösung ist,
die jeweils andere Karte aus dem Rechner zu nehmen, den Treiber
herausfinden, und eine mit der Karte funktionierende XF86Config-4
an einen sicheren Ort kopieren.

Bei mir brauchte der Start von '''X -configure''' den besten
Erfolg. Der Rechner ist zwar dabei abgestürzt (bzw. beide Monitore
waren schwarz), aber trotzdem hatte ich eine laufende Datei in
/root/... liegen.

Als Basis der neuen Konfigurationsdatei habe ich die Datei in
/root/XF86Config-4 genommen. Die einzigen Änderungen, die noch
nötig waren, betrafen die Tastatureinstellungen. Diese habe ich aus
der Kopie von vor dem Umbau entnommen und eingefügt.

Wichtig ist noch, zu wissen, dass es eine primäre Grafikkarte des
Rechners gibt. Dies ist die, die vom BIOS von Anfang an benutzt
wird und die die Textkonsolen darstellt. In meinen Rechnern konnte
dies im BIOS-Setup eingestellt werden (AGP/PCI im PnP-Bereich).
Ausserdem gibt es im Multi-Display-Modus (doppelte Oberfläche)
einen Screen, auf dem KDE z.B. den Login-Screen etc. darstellt.
Dies ist jeweils der als Screen 0 in der XF86Config-4 angegebene
Bildschirm.

= XF86Config-4 =

Hier als Beispiel meine Datei. Interessant ist eigentlich nur
folgendes: Es gibt zwei Monitor-Sektionen, zwei Device-Sektionen
und zwei Screen-Sektionen. Diese entsprechen im Prinzip dem, was
auch in einem Ein-Monitor-System in der entsprechenden Sektion
stünde. (Wer eine Grafikkarte nicht einzeln konfiguriert bekommt,
sollte erstmal dies tun, bevor er sich an ein Dual-Head-System
macht.) Interessant ist jetzt die Sektion "ServerLayout" ganz oben.
Sie sollte selbsterklärend sein. Die Device-Sektion enthält einen
zusätzlichen Eintrag "BusID". Damit ist die PCI-Bus-ID der Karte
gemeint, die man z.B. mit ''lspci'' oder mit ''cat /proc/pci''
erfahren kann (oder X -configure findet das von alleine heraus).

Die Xinerama-Option ist hier auskommentiert, so daß ich zwei
KDE-Desktops bekomme. Wer einen grossen Desktop haben will, kann
das mal ausprobieren. Das Gefühl, wenn man das erste Mal ein
Fenster, das links stört, einfach nach rechts hinüber in den
anderen Bildschirm schiebt, ist unbeschreiblich. :-)

Ach übrigens: Die Datei XF86Config (ohne -4) sollte seit XFree 4.x
nicht mehr benutzt werden. Ebenso sind alle Tools, die diese
bearbeiten, obsolet, da sich das Format geändert hat.

<pre>
Section "ServerLayout"
        Identifier     "XFree86 Configured"
        Screen      0  "Screen1" 0 0
        Screen      1  "Screen0" RightOf "Screen1"
        InputDevice    "Mouse0" "CorePointer"
        InputDevice    "Keyboard0" "CoreKeyboard"
#       Option          "Xinerama" "on"
EndSection

Section "Files"
        RgbPath      "/usr/X11R6/lib/X11/rgb"
        ModulePath   "/usr/X11R6/lib/modules"
        FontPath     "/usr/X11R6/lib/X11/fonts/misc/"
        FontPath     "/usr/X11R6/lib/X11/fonts/Speedo/"
        FontPath     "/usr/X11R6/lib/X11/fonts/Type1/"
        FontPath     "/usr/X11R6/lib/X11/fonts/CID/"
        FontPath     "/usr/X11R6/lib/X11/fonts/75dpi/"
        FontPath     "/usr/X11R6/lib/X11/fonts/100dpi/"
EndSection

Section "Module"
        Load  "dbe"
        Load  "dri"
        Load  "extmod"
        Load  "glx"
        Load  "pex5"
        Load  "record"
        Load  "xie"
EndSection

Section "InputDevice"
        Identifier  "Keyboard0"
        Driver      "keyboard"
        Option          "XkbLayout"   "de"
        Option          "XkbVariant"  "nodeadkeys"
EndSection

Section "InputDevice"
        Identifier  "Mouse0"
        Driver      "mouse"
        Option      "Protocol" "ps/2"
        Option      "Device" "/dev/psaux"
EndSection

Section "Monitor"
        Identifier   "Monitor0"
        VendorName   "Monitor Vendor"
        ModelName    "Monitor Model"
        HorizSync    30.0 - 86.0
        VertRefresh  47.0 - 120.0
EndSection

Section "Monitor"
        Identifier   "Monitor1"
        VendorName   "MED"
        ModelName    "MD1998JB"
        HorizSync    30.0 - 98.0
        VertRefresh  50.0 - 160.0
EndSection

Section "Device"
        ### Available Driver options are:-
        ### Values: <i>: integer, <f>: float,
<bool>: "True"/"False",
        ### <string>: "String", <freq>: "<f>
Hz/kHz/MHz"
        ### [arg]: arg optional
        #Option     "accel"                   # [<bool>]
        #Option     "crt_screen"              # [<bool>]
        #Option     "composite_sync"          # [<bool>]
        #Option     "hw_cursor"               # [<bool>]
        #Option     "linear"                  # [<bool>]
        #Option     "mmio_cache"              # [<bool>]
        #Option     "probe_clocks"            # [<bool>]
        #Option     "reference_clock"         # <freq>
        #Option     "shadow_fb"               # [<bool>]
        #Option     "sw_cursor"               # [<bool>]
        Identifier  "Card0"
        Driver      "ati"
        VendorName  "ATI"
        BoardName   "Mach64 CT"
        ChipSet     "ati"
        ChipId      0x4354
        ChipRev     0x9
        BusID       "PCI:0:15:0"
EndSection

Section "Device"
        ### Available Driver options are:-
        ### Values: <i>: integer, <f>: float,
<bool>: "True"/"False",
        ### <string>: "String", <freq>: "<f>
Hz/kHz/MHz"
        ### [arg]: arg optional
        #Option     "SWcursor"                # [<bool>]
        #Option     "HWcursor"                # [<bool>]
        #Option     "PciRetry"                # [<bool>]
        #Option     "rgbbits"                 # <i>
        #Option     "NoAccel"                 # [<bool>]
        #Option     "TurboQueue"              # [<bool>]
        #Option     "SetMClk"                 # <freq>
        #Option     "FastVram"                # [<bool>]
        #Option     "ForceCRT2Type"           # [<str>]
        #Option     "ShadowFB"                # [<bool>]
        #Option     "Rotate"                  # [<str>]
        #Option     "NoXvideo"                # [<bool>]
        Identifier  "Card1"
        Driver      "sis"
        VendorName  "SiS"
        BoardName   "300"
        BusID       "PCI:1:0:0"
EndSection

Section "Screen"
        Identifier "Screen0"
        Device     "Card0"
        Monitor    "Monitor0"
        DefaultDepth    8
        SubSection "Display"
                Depth     1
        EndSubSection
        SubSection "Display"
                Depth     4
        EndSubSection
        SubSection "Display"
                Depth     8
                Modes   "800x600"
        EndSubSection
        SubSection "Display"
                Depth     15
                Modes   "800x600"
        EndSubSection
        SubSection "Display"
                Depth     16
                Modes   "800x600"
        EndSubSection
        SubSection "Display"
                Depth     24
                Modes   "800x600"
        EndSubSection
EndSection

Section "Screen"
        Identifier "Screen1"
        Device     "Card1"
        Monitor    "Monitor1"
        DefaultDepth    16
        SubSection "Display"
                Depth     1
        EndSubSection
        SubSection "Display"
                Depth     4
        EndSubSection
        SubSection "Display"
                Depth     8
                Modes   "800x600"
        EndSubSection
        SubSection "Display"
                Depth     15
                Modes   "800x600"
        EndSubSection
        SubSection "Display"
                Depth     16
                Modes   "1024x768" "800x600"
        EndSubSection
        SubSection "Display"
                Depth     24
                Modes   "800x600"
        EndSubSection
EndSection

</pre>

= Und dazu zwei Tastaturen? =

Man kann auch komplett zwei Arbeitsplätze, d.h. Bildschirm,
Tastatur und Maus bekommen. Dazu steht was unter
http://cambuca.ldhs.cetuc.puc-rio.br/multiuser.

-- ThomasBayen



= Alternative mit zwei Rechnern: [Xdmx] =

Es gibt auch eine Möglichkeit, statt einen Rechner mit zwei Grafikkarten zu nutzen mehrere Rechner "zusammenzuschalten". Auf den ersten Blick macht das vielleicht keinen Sinn, ist aber eine tolle Sache, wenn man zum Desktop-System, das man zu Hause hat, noch einen Laptop besitzt oder mehr Bildschirme anschliessen will, als die Grafikkarte hergibt (Videowände!). Dieses ist auf der Seite [Xdmx] beschrieben.

----
[{Tag X11 Hardware}]