
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:
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
[...]
|