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.

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

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.


Tags:  X11, Hardware

Add new attachment

Only authorized users are allowed to upload new attachments.
« This page (revision-6) was last changed on 24-Oct-2009 19:00 by ThomasBayen