Diese Seite ist optimiert für eine Auflösung von min. 1280x1024.

facebook   google   twitter   digg   email  





Monitor Wall



Auf dieser Seite möchte ich euch ein Projekt vorstellen, das ich auf der Arbeit realisiert habe und das viel Arbeit und Nerven gekostet hat :-)
Bevor ich auf die Konfigurations-Details eingehe und wie was realisiert wurde, was mal so richtig garnicht geklappt hatte, das erläutere ich dann weiter unten. Hier also erstmal die Bilder:

moniwall_1.jpg

moniwall_2.jpg

moniwall_3.jpg

moniwall_4.jpg

moniwall_5.jpg

moniwall_6.jpg

moniwall_7.jpg

moniwall_8.jpg

moniwall_9.jpg

moniwall_10.jpg


Hardwareausstattung

Als Hardware kommt folgendes zum Einsatz:
- Ein Dell XPS 630i mit NVidia-Chipsatz. Ausstattung:
- Intel(R) Core(TM)2 Quad CPU Q8200 @ 2.33GHz
- 4 x 2 GB DDR2 RAM
- 2 x ATI Radeon HD 5800 Series (ohne Crossfire verbaut, da NVidia-Chipsatz!)
- 12 x LCD Displays NEC MultiSync LCD 4620
- 12 x Displayport-Kabel
- 12 x Adapter Mini-Displayport auf Displayport
- 12 x Netzwerkkabel
- 1 x 100MBit 16-Port-Switch
Zudem noch ein paar Audio-Kabel, Stromkabel und sonstigen Kleinkrams wie TV-Krte, eine 2. Netzwerkkarte etc.

Warum NVidia-Chipsatz bei ATI-Karten?
Die Antwort ist einfach: Der Rechner war vor der Moniwall da, wir hatten die alte Moniwall damit betrieben. Diese mit 2 XPS-Rechnern und jeweils 2 NVidia-Karten. Bei der neuen hatten wir aber anstatt 8 nun 12 Monitore und wir wollten Fenster komplett über alle Bildschirme schieben können.

Konfiguration und Erfahrungen mit der Workstation


Erste Versuche mit Windows 7 Ultimate...
...scheiterten zuerst. Windows kann von Haus aus nur 10 Bildschirme ansteuern und keinen mehr. Der Treiber von ATI konnte es dann aber. Es war allerdings ein mords hick-hack, da die Grafikkarten von sich aus jeweils nur 2 Bildschirme ansteuern. Erst nach langem rumfummeln gingen alle 12 an. Das sortieren der Bildschirme war extrem umständlich und nach nem Reboot konnte man dann auch nochmal von vorne anfangen. Also nix was man wirklich auf Dauer haben will. Da es zu der Zeit aber keinen gescheiten Linux-Treiber gab, mussten wir das Teil am Anfang mit Windows betreiben.

Debian kommt ins Spiel...
Und der neue Linuxtreiber tat gut, aber die Konfiguration war etwas tricky (im Gegensatz zu den guten alten NVidia-Karten). Wir haben es aber dennoch geschafft. Es gab lediglich Probleme beim restarten des X-Servers. Bei einem restart stürtzte die Kiste komplett ab.

Zum Schluss: Gentoo
Mit Gentoo tut nun alles. Keine Abstürze mehr, keine Zicken, es tut nun einfach.

Monitore


DVI vs. Displayport
Zuerst haben wir versucht, DVI-Kabel mit Minidisplayport-Adaptern anzuschliessen (die GraKas haben Minidisplayport). Darauf hin gingen an jeder GraKa immer nur 2 Monitore an. Ende. Wir glaubten es eigentlich nicht, aber mit Displayport-Kabeln und Adaptern von Displayport auf Minidisplayport tat es dann. Alle Monitore machten Bild. Darauf muss man aber erstmal kommen. Vor dem Tausch hatten wir alles an Treibereinstellungen ausprobiert und sind fast verzweifelt.

Fernbedienungen und Extras der Monitore
Die Monitore haben Ventilatoren, damit sie im 24/7-Betrieb nicht überhitzen können. Zudem kann man mit einer Fernbedienung alle Monitore seperat bedienen. Dazu vergibt man jedem Monitor eine eigene ID. Nun muss man mit der Fernbedienung nur noch die ID auswählen und schon kann man die Geräte unabhängig voneinander bedienen.
Monitorsteuerung und Tile-Matrix
Die Monitore an sich sind sogenannte "Public-Viewing"-Displays. Das heisst, sie sind im Gegensatz zu normalen LCD-Displays für einen 24/7-Betrieb (24 Stunden, 7 Tage die Woche) ausgelegt und erleiden keine Einbrenneffekte. Sie besitzen nichtmal einen Tuner um ein TV-Programm zu empfangen, haben dafür aber einen LAN-, HDMI, Displayport-, Serial-, etc. Anschluss. Über den LAN- bzw. Serial-Anschluss kann man den Monitor ansteuern. Wir haben sie per LAN angeschlossen und per IP angesprochen. Was stellt man nun bei so einem Monitor ein? Ganz einfach. Die sogenannte Tile-Matrix. Wenn man z.B. 4 Bildschirme miteinander verbindet und ein Video laufen lässt, dann hat man in der Mitte des Bildes den Rahmen der Bildschirme. Zugegeben sind diese zwar sehr dünn, aber wenn man nun mal annimmt Fussball zu schauen, dann sieht der Ball - wenn er über die Mitte rollt - aus wie ein Ei. Tile-Matrix rechnet diesen Rahmen weg. Das kann natürlich dazu führen, dass der Ball - sofern er genau in der Mitte unter dem Rahmenkreuz ist - nicht sichtbar ist. Noch der Hinweis, wie ein einziges Bild auf 4 Monitore aufgesplittet werden kann. Dazu bekommt jeder Monitor das gleiche Bild. Allerdings zeigt jeder der Monitore nur einen Ausschnitt an. Dadurch wird die qualität es Bildes natürlich schlechter, aber es wird eben auch gross. Den Monitor nun zwischen "normal" und Tile-Matrix umzustellen, dafür will man ein LAN-Kabel benutzen. Mit der Fernbedienung dauert das nälich ewig, wenn man das bei 12 Monitoren machen muss, aber wenn man nur einen Befehl ausführen muss, geht es ratz-fatz.

Inhalte Fernsteuern


Webserver
Die Inhalte haben wir in 12 seperaten Browserfenstern dargestellt und angezeigt. Damit wir nun nicht immer an dem Rechner mit der Maus klicken und mit der Tastatur tippen müssen, haben wir das ganze auf der Workstation einmal mit devilspie eingerichtet (um die Fenster auf die richtigen Monitore zu verteilen) und danach einen Webserver aufgesetzt. Auf diesen greift die Workstation zu und bekommt mittels AJAX und PHP die Seiten zugewiesen, die angezeigt werden sollen.

Konfiguration X-Server

NVidia
Hier ein Beispiel mit 2 Grafikkarten (3 verschiedene Ausgaben auf Monitoren):
Section "ServerLayout"
    Identifier     "Layout0"
    Screen      0  "Screen0" 0 0
    Screen      1  "Screen1" RightOf "Screen2"
    Screen      2  "Screen2" RightOf "Screen0"
    InputDevice    "Keyboard0" "CoreKeyboard"
    InputDevice    "Mouse0" "CorePointer"
    Option         "Xinerama" "1"
EndSection

Section "Files"
EndSection

Section "InputDevice"
    # generated from default
    Identifier     "Mouse0"
    Driver         "mouse"
    Option         "Protocol" "auto"
    Option         "Device" "/dev/psaux"
    Option         "Emulate3Buttons" "no"
    Option         "ZAxisMapping" "4 5"
EndSection

Section "InputDevice"
    # generated from default
    Identifier     "Keyboard0"
    Driver         "kbd"
EndSection

Section "Monitor"
    # HorizSync source: edid, VertRefresh source: edid
    Identifier     "Monitor0"
    VendorName     "Unknown"
    ModelName      "DELL 2007FP"
    HorizSync       30.0 - 83.0
    VertRefresh     56.0 - 76.0
    Option         "DPMS"
EndSection

Section "Monitor"
    # HorizSync source: edid, VertRefresh source: edid
    Identifier     "Monitor1"
    VendorName     "Unknown"
    ModelName      "DELL 2007FP"
    HorizSync       30.0 - 83.0
    VertRefresh     56.0 - 76.0
    Option         "DPMS"
EndSection

Section "Monitor"
    # HorizSync source: edid, VertRefresh source: edid
    Identifier     "Monitor2"
    VendorName     "Unknown"
    ModelName      "DELL 2007FP"
    HorizSync       30.0 - 83.0
    VertRefresh     56.0 - 76.0
    Option         "DPMS"
EndSection

Section "Device"
    Identifier     "Device0"
    Driver         "nvidia"
    VendorName     "NVIDIA Corporation"
    BoardName      "GeForce 6200"
    BusID          "PCI:3:0:0"
    Screen          0
EndSection

Section "Device"
    Identifier     "Device1"
    Driver         "nvidia"
    VendorName     "NVIDIA Corporation"
    BoardName      "GeForce 8600 GT"
    BusID          "PCI:1:0:0"
    Screen          0
EndSection

Section "Device"
    Identifier     "Device2"
    Driver         "nvidia"
    VendorName     "NVIDIA Corporation"
    BoardName      "GeForce 8600 GT"
    BusID          "PCI:1:0:0"
    Screen          1
EndSection

Section "Screen"
    Identifier     "Screen0"
    Device         "Device0"
    Monitor        "Monitor0"
    DefaultDepth    24
    Option         "TwinView" "0"
    Option         "metamodes" "1600x1200 +0+0"
    SubSection     "Display"
        Depth       24
    EndSubSection
EndSection

Section "Screen"
    Identifier     "Screen1"
    Device         "Device1"
    Monitor        "Monitor1"
    DefaultDepth    24
    Option         "TwinView" "0"
    Option         "metamodes" "DFP-1: nvidia-auto-select +0+0"
    SubSection     "Display"
        Depth       24
    EndSubSection
EndSection

Section "Screen"
    Identifier     "Screen2"
    Device         "Device2"
    Monitor        "Monitor2"
    DefaultDepth    24
    Option         "TwinView" "0"
    Option         "metamodes" "DFP-0: nvidia-auto-select +0+0"
    SubSection     "Display"
        Depth       24
    EndSubSection
EndSection
Clone-Beispiele etc. bekommt man vom NVidia-Config-Tool. Das ist recht einfach zu benutzen und die Auskabe kann man mit ein klein wenig Nachdenken beliebig erweitern, so dass ich da keine weiteren Beispiele poste.
ATI
Hier ein Beispiel für 2 ATI-Karten mit 12 separaten Ausgaben.
Section "ServerLayout"
	Identifier     "aticonfig Layout"
	Screen       0 "aticonfig-Screen[0]-0"
	Screen         "aticonfig-Screen[1]-0" RightOf "aticonfig-Screen[0]-0"
EndSection

Section "Files"
        ModulePath   "/usr/lib64/xorg/modules"
        ModulePath   "/usr/lib64/opengl/xorg-x11/extensions/"
	ModulePath   "/usr/lib64/dri"
	FontPath     "/usr/share/fonts/dejavu/"
	FontPath     "/usr/share/fonts/cyrillic/"
	FontPath     "/usr/share/fonts/default/"
	FontPath     "/usr/share/fonts/100dpi/"
	FontPath     "/usr/share/fonts/75dpi/"
	FontPath     "/usr/share/fonts/util/"
	FontPath     "/usr/share/fonts/misc/"
EndSection

Section "Module"
#        Load  "dri"
#        Load  "dri2"
	Load  "drm"
	Load  "freetype"
	Load  "dbe"
	Load  "extmod"
EndSection

Section "ServerFlags"
        Option      "Xinerama" "on"
#        Option      "RandR" "on"
        Option      "AIGLX" "on"
EndSection

Section "Monitor"
	Identifier   "0-DFP1"
	Option	    "VendorName" "ATI Proprietary Driver"
	Option	    "ModelName" "Generic Autodetecting Monitor"
	Option	    "DPMS" "true"
	Option	    "PreferredMode" "1920x1080"
	Option	    "TargetRefresh" "60"
	Option	    "Position" "0 0"
	Option	    "Rotate" "normal"
	Option	    "Disable" "false"
EndSection

Section "Monitor"
	Identifier   "0-DFP2"
	Option	    "VendorName" "ATI Proprietary Driver"
	Option	    "ModelName" "Generic Autodetecting Monitor"
	Option	    "DPMS" "true"
	Option	    "PreferredMode" "1920x1080"
	Option	    "TargetRefresh" "60"
	Option	    "Position" "1921 0"
	Option	    "Rotate" "normal"
	Option	    "Disable" "false"
EndSection

Section "Monitor"
	Identifier   "0-DFP3"
	Option	    "VendorName" "ATI Proprietary Driver"
	Option	    "ModelName" "Generic Autodetecting Monitor"
	Option	    "DPMS" "true"
	Option	    "PreferredMode" "1920x1080"
	Option	    "TargetRefresh" "60"
	Option	    "Position" "0 1081"
	Option	    "Rotate" "normal"
	Option	    "Disable" "false"
EndSection

Section "Monitor"
	Identifier   "0-DFP4"
	Option	    "VendorName" "ATI Proprietary Driver"
	Option	    "ModelName" "Generic Autodetecting Monitor"
	Option	    "DPMS" "true"
	Option	    "PreferredMode" "1920x1080"
	Option	    "TargetRefresh" "60"
	Option	    "Position" "1921 1081"
	Option	    "Rotate" "normal"
	Option	    "Disable" "false"
EndSection

Section "Monitor"
	Identifier   "0-DFP5"
	Option	    "VendorName" "ATI Proprietary Driver"
	Option	    "ModelName" "Generic Autodetecting Monitor"
	Option	    "DPMS" "true"
	Option	    "PreferredMode" "1920x1080"
	Option	    "TargetRefresh" "60"
	Option	    "Position" "0 2161"
	Option	    "Rotate" "normal"
	Option	    "Disable" "false"
EndSection

Section "Monitor"
	Identifier   "0-DFP6"
	Option	    "VendorName" "ATI Proprietary Driver"
	Option	    "ModelName" "Generic Autodetecting Monitor"
	Option	    "DPMS" "true"
	Option	    "PreferredMode" "1920x1080"
	Option	    "TargetRefresh" "60"
	Option	    "Position" "1921 2161"
	Option	    "Rotate" "normal"
	Option	    "Disable" "false"
EndSection

Section "Monitor"
	Identifier   "1-DFP1"
	Option	    "VendorName" "ATI Proprietary Driver"
	Option	    "ModelName" "Generic Autodetecting Monitor"
	Option	    "DPMS" "true"
	Option	    "PreferredMode" "1920x1080"
	Option	    "TargetRefresh" "60"
	Option	    "Position" "0 0"
	Option	    "Rotate" "normal"
	Option	    "Disable" "false"
EndSection

Section "Monitor"
	Identifier   "1-DFP2"
	Option	    "VendorName" "ATI Proprietary Driver"
	Option	    "ModelName" "Generic Autodetecting Monitor"
	Option	    "DPMS" "true"
	Option	    "PreferredMode" "1920x1080"
	Option	    "TargetRefresh" "60"
	Option	    "Position" "1921 0"
	Option	    "Rotate" "normal"
	Option	    "Disable" "false"
EndSection

Section "Monitor"
	Identifier   "1-DFP3"
	Option	    "VendorName" "ATI Proprietary Driver"
	Option	    "ModelName" "Generic Autodetecting Monitor"
	Option	    "DPMS" "true"
	Option	    "PreferredMode" "1920x1080"
	Option	    "TargetRefresh" "60"
	Option	    "Position" "0 1081"
	Option	    "Rotate" "normal"
	Option	    "Disable" "false"
EndSection

Section "Monitor"
	Identifier   "1-DFP4"
	Option	    "VendorName" "ATI Proprietary Driver"
	Option	    "ModelName" "Generic Autodetecting Monitor"
	Option	    "DPMS" "true"
	Option	    "PreferredMode" "1920x1080"
	Option	    "TargetRefresh" "60"
	Option	    "Position" "1921 1081"
	Option	    "Rotate" "normal"
	Option	    "Disable" "false"
EndSection

Section "Monitor"
	Identifier   "1-DFP5"
	Option	    "VendorName" "ATI Proprietary Driver"
	Option	    "ModelName" "Generic Autodetecting Monitor"
	Option	    "DPMS" "true"
	Option	    "PreferredMode" "1920x1080"
	Option	    "TargetRefresh" "60"
	Option	    "Position" "0 2161"
	Option	    "Rotate" "normal"
	Option	    "Disable" "false"
EndSection

Section "Monitor"
	Identifier   "1-DFP6"
	Option	    "VendorName" "ATI Proprietary Driver"
	Option	    "ModelName" "Generic Autodetecting Monitor"
	Option	    "DPMS" "true"
	Option	    "PreferredMode" "1920x1080"
	Option	    "TargetRefresh" "60"
	Option	    "Position" "1921 2161"
	Option	    "Rotate" "normal"
	Option	    "Disable" "false"
EndSection

Section "Device"
	Identifier  "aticonfig-Device[0]-0"
	Driver      "fglrx"
	Option	    "Monitor-DFP1" "0-DFP1"
	Option      "Monitor-DFP2" "0-DFP2"
	Option      "Monitor-DFP3" "0-DFP3"
	Option      "Monitor-DFP4" "0-DFP4"
	Option      "Monitor-DFP5" "0-DFP5"
	Option      "Monitor-DFP6" "0-DFP6"
	Option	    "AllowGLXWithComposite" "true"
	Option      "OpenGLOverlay" "on"
	Option      "TexturedXRender" "on"
	Option	    "VideoOverlay" "on"
	Option      "TexturedVideo" "on"
	Option      "HWCursor" "false"
	BusID       "PCI:1:0:0"
EndSection

Section "Device"
	Identifier  "aticonfig-Device[1]-0"
	Driver      "fglrx"
	Option	    "Monitor-DFP1" "1-DFP1"
	Option      "Monitor-DFP2" "1-DFP2"
	Option      "Monitor-DFP3" "1-DFP3"
	Option      "Monitor-DFP4" "1-DFP4"
	Option      "Monitor-DFP5" "1-DFP5"
	Option      "Monitor-DFP6" "1-DFP6"
	Option      "AllowGLXWithComposite" "true"
	Option	    "OpenGLOverlay" "on"
	Option	    "TexturedXRender" "on"
	Option      "VideoOverlay" "on"
	Option 	    "TexturedVideo" "on"
	Option      "HWCursor" "false"
	BusID       "PCI:2:0:0"
EndSection

Section "Screen"
	Identifier "aticonfig-Screen[0]-0"
	Device     "aticonfig-Device[0]-0"
	DefaultDepth     24
	SubSection "Display"
		Viewport   0 0
		Virtual	  3841 3241 
		Depth     24
	EndSubSection
EndSection

Section "Screen"
	Identifier "aticonfig-Screen[1]-0"
	Device     "aticonfig-Device[1]-0"
	DefaultDepth     24
	SubSection "Display"
		Viewport   0 0
		Virtual   3841 3241
		Depth     24
	EndSubSection
EndSection

Section "dri"
	Group "video"
	Mode 0666
EndSection

Section "Extensions"
        Option	"Composite" "Enable"
EndSection
Bei 12 geclonten Screens muss man nur die Positionen aller Monitore auf "0" "0" drehen und das Serverlayout ändern:
Section "ServerLayout"
        Identifier     "aticonfig Layout"
        Screen         "aticonfig-Screen[0]-0"
        Screen         "aticonfig-Screen[1]-0"
EndSection

[...]
Section "Monitor"
        Identifier   "1-DFP2"
        Option      "VendorName" "ATI Proprietary Driver"
        Option      "ModelName" "Generic Autodetecting Monitor"
        Option      "DPMS" "true"
        Option      "PreferredMode" "1920x1080"
        Option      "TargetRefresh" "60"
        Option      "Position" "0 0"
        Option      "Rotate" "normal"
        Option      "Disable" "false"
EndSection

Section "Monitor"
        Identifier   "1-DFP3"
        Option      "VendorName" "ATI Proprietary Driver"
        Option      "ModelName" "Generic Autodetecting Monitor"
	Option      "DPMS" "true"
	Option      "PreferredMode" "1920x1080"
	Option      "TargetRefresh" "60"
        Option      "Position" "0 0"
        Option      "Rotate" "normal"
        Option      "Disable" "false"
EndSection
[...]




  logo