Konfiguracja środowiska wielomonitorowego pod linuksem
Ostatnia zmiana: 2013-11-26 18:43

Coraz częściej karty graficzne dysponuja 2 wyjściami monitorowymi, umożliwiając jednoczesne wyświetlanie obrazu na kilku monitorach. Dotyczy to także notebooków, wyposażonych w karty Intel i855 lub i915, obsługiwane przez sterownik i810. Podobną konfigurację można uzyskać na kartach NVidii lub dwóch różnych kartach graficznych (np. jednej AGP i jednej PCI).
Konfiguracje przedstawione poniżej przetestowano na notebooku Aristo Smart 400 wyposażonym w kartę Intel 915 z zewnętrznym wyjściem CRT i TV-Out (svideo)
Prezentowane konfiguracje można uzyskać także na zewnetrznym telewizorze, zamieniając MonitorLayout "CRT,LFP" na "TV,LFP".

Z plików konfiguracynych usunięto wpisy nieistotne z punktu widzenia xineramy; należy pamiętać o ich uzupełnieniu stosowanie do posiadanej konfiguracji. Są to sekcje: Files, ServerFlags, Module, DRI oraz Extensions.

Jako zewnętrzmy monitor wykorzystano stary CRT o maksymalnej rozdzielczości 1024x768, ustawiony z lewej strony ekranu LCD. Sekcje wspólne dla wszystkich konfiguracji to:


Section "InputDevice"
                Identifier  "PS2 Keyboard"
                Driver      "kbd"
                Option      "CoreKeyboard"
                ...
EndSection

Section "InputDevice"
                Identifier  "PS2 Mouse"
                Driver      "mouse"
                ...
EndSection

Standardowa konfiguracja wykorzystująca wbudowany panel LCD (kopia ekranu)



Należy pamiętać o zmianie BusID na odpowiedni dla systemu (zrób X -scanbus żeby uzyskać odpowiednią wartość)!
Ta sama zawartość ekranu może być wyświetlane na zewnętrznym monitorze, używając sprzętowych klawiszy do przełączania ekranu. Jeżeli przełączanie ekranu nie będie możliwe, lub obraz będzie zamazany (wygląda tak, jakby stracił synchronizację) warto dodać opcje Option "CloneRefresh" "60" oraz Option "DevicePresence" "yes".


Section "Device"
                Driver      "i810"
                VendorName  "Intel Corp."
                BoardName   "Mobile Graphics Controller"
                Identifier  "i915I"
                BusID       "PCI:0:2:0"
                Screen      0
                Option	"MonitorLayout"	"CRT,LFP"
                Option	"Clone"	"True"
EndSection

Section "Monitor"
                Identifier  "LCD"
                HorizSync   31-90
                VertRefresh 59-75
EndSection

Section "Screen"
                Identifier  "Screen0"
                Device      "i915I"
                Monitor     "LCD"
                DefaultDepth 24
                SubSection   "Display"
                                Depth    24
                                Modes    "1024x768" "800x600" "640x480"
                EndSubSection
EndSection

Section "ServerLayout"
                Identifier  "single"
                Screen      0  "Screen0" 0 0
                InputDevice "PS2 Mouse" "AlwaysCore"
                InputDevice "PS2 Keyboard" "CoreKeyboard"
EndSection

Wyświetlanie na drugim ekranie pulpitu identycznego jak na pierwszym ekranie, niezależnym od niego z możliwością przesuwania myszy między nimi



Ponieważ w noteboku znajdują się tylko jedna karta graficzna, obie sekcje Device mają ten sam BusID. W przypadku posiadania dwóch róznych kart należy odpowiednio przypisać driver i BusID do odpowiednich kart.
MonitorLayout jest opcją specyficzną dla i810 i pozwala na określenie połączonych ekranów (LFP, DFP, CRT, TV) i ich priorytetu (pipeA, pipeB) oraz włączenia (NONE). Po szczegóły zapraszam do manuala drivera i810.


Section "Device"
                Driver      "i810"
                VendorName  "Intel Corp."
                BoardName   "Mobile Graphics Controller"
                Identifier  "i915I"
                BusID       "PCI:0:2:0"
                Screen      0
EndSection

Section "Device"
                Driver      "i810"
                VendorName  "Intel Corp."
                BoardName   "Mobile Graphics Controller"
                Identifier  "i915E"
                BusID       "PCI:0:2:0"
                Screen      1
EndSection

Section "Monitor"
                Identifier  "LCD"
                HorizSync   31-90
                VertRefresh 59-75
                Option      "MonitorLayout" "CRT,LFP"
EndSection

Section "Monitor"
                Identifier  "CRT"
                HorizSync   31-90
                VertRefresh 54-61
EndSection

Section "Screen"
                Identifier  "Screen0"
                Device      "i915I"
                Monitor     "LCD"
                DefaultDepth 24
                SubSection  "Display"
                                Depth   24
                                Modes   "1024x768" "800x600" "640x480"
                EndSubSection
EndSection

Section "Screen"
                Identifier  "Screen1"
                Device      "i915E"
                Monitor     "CRT"
                DefaultDepth 24
                SubSection 	"Display"
                                Depth   24
                                Modes   "1024x768" "800x600" "640x480"
                EndSubSection
EndSection

Section "ServerLayout"
                Identifier  "xinerama-multi"
                Screen      0  "Screen0" 0 0
                Screen      1  "Screen1" LeftOf "Screen0"
                InputDevice "PS2 Mouse" 	"AlwaysCore"
                InputDevice "PS2 Keyboard" "CoreKeyboard"
                Option      "Xinerama" "Off"
EndSection

Wyświetlanie "rozciągniętego" pulpitu na dwa ekrany



W tym przypadku dla obydwu monitorów należy zdefiniować tą samą głębię kolorów. Od poprzedniej konfiguracji różni się opcją "Xinerama" "On"


Section "Device"
                Driver      "i810"
                VendorName  "Intel Corp."
                BoardName   "Mobile Graphics Controller"
                Identifier  "i915I"
                BusID       "PCI:0:2:0"
                Screen      0
EndSection

Section "Device"
                Driver      "i810"
                VendorName  "Intel Corp."
                BoardName   "Mobile Graphics Controller"
                Identifier  "i915E"
                BusID       "PCI:0:2:0"
                Screen      1
EndSection

Section "Monitor"
                Identifier  "LCD"
                HorizSync   31-90
                VertRefresh 59-75
                Option      "MonitorLayout" "CRT,LFP"
EndSection

Section "Monitor"
                Identifier  "CRT"
                HorizSync   31-90
                VertRefresh 54-61
EndSection

Section "Screen"
                Identifier  "Screen0"
                Device      "i915I"
                Monitor     "LCD"
                DefaultDepth 24
                SubSection  "Display"
                                Depth   24
                                Modes   "1024x768" "800x600" "640x480"
                EndSubSection
EndSection

Section "Screen"
                Identifier  "Screen1"
                Device      "i915E"
                Monitor     "CRT"
                DefaultDepth 24
                SubSection 	"Display"
                                Depth   24
                                Modes   "1024x768" "800x600" "640x480"
                EndSubSection
EndSection

Section "ServerLayout"
                Identifier  "xinerama-multi"
                Screen      0  "Screen0" 0 0
                Screen      1  "Screen1" LeftOf "Screen0"
                InputDevice "PS2 Mouse"  "AlwaysCore"
                InputDevice "PS2 Keyboard" "CoreKeyboard"
                Option      "Xinerama" "On"
EndSection

Przełączanie między konfiguracjami

Oczywiście można w jednym pliku xorg.conf zdefiniować kilka konfiguracji. Przełączanie (na stałe) można umieścić w sekcji ServerFlags, np.


    Section "ServerFlags"
                ...
                Option	"DefaultServerLayout"	"single"
                #Option	"DefaultServerLayout"	"xinerama-multi"
                #Option	"DefaultServerLayout"	"xinerama-one"
                ..
    EndSection

lub uruchamiając Xy z odpowiednim parametrem


    $ startx -- -layout xinerama-one

Przykładowy plik konfiguracyjny xorg.conf

Poniżej został zaprezentowany kompletny plik konfiguracyjny xorg.conf dla Aristo Smart 400 (i915, touchpad) z połączonymi konfiguracjami:


Section "Files"
                FontPath	"/usr/share/fonts/X11/misc"
                FontPath	"/usr/share/fonts/X11/100dpi"
                FontPath	"/var/lib/defoma/x-ttcidfont-conf.d/dirs/TrueType"
EndSection

Section "ServerFlags"
                Option	"OffTime"	"5"
                Option	"AllowMouseOpenFail"	"true"
                Option	"DefaultServerLayout"	"single"
                #Option	"DefaultServerLayout"	"xinerama-multi"
                #Option	"DefaultServerLayout"	"xinerama-one"
EndSection

Section "Module"
                Load	"dri"
                Load	"drm"
                Load	"glx"
                Load	"dbe"
                Load	"extmod"
                Load	"freetype"
                Load	"type1"
                Load	"synaptics"
EndSection

Section "InputDevice"
                Identifier	"PS2 Keyboard"
                Driver	"kbd"
                Option	"CoreKeyboard"
                Option	"XkbRules"	"xorg"
                Option	"XkbModel"	"pc104"
                Option	"XkbLayout"	"pl"
EndSection

Section "InputDevice"
                Identifier	"PS2 Mouse"
                Driver	"mouse"
                Option	"Device"	"/dev/psaux"
                Option	"Protocol"	"ImPS/2"
                Option	"ZAxisMapping"	"4 5"
EndSection

Section "InputDevice"
                Identifier 	"Touchpad"
                Driver 	"synaptics"
                Option 	"Device" "/dev/input/event1"
                Option 	"Protocol" "auto-dev"

                Option 	"SHMConfig" "on"
                Option	"LeftEdge"		"120"
                Option	"RightEdge"		"830"
                Option	"TopEdge"		"120"
                Option	"BottomEdge"		"650"
                Option	"FingerLow"		"14"
                Option	"FingerHigh"		"15"
                Option	"MaxTapTime"		"180"
                Option	"MaxTapMove"		"110"
                Option	"EmulateMidButtonTime"	"75"
                Option	"VertScrollDelta"	"20"
                Option	"HorizScrollDelta"	"20"
                Option	"MinSpeed"		"0.3"
                Option	"MaxSpeed"		"0.75"
                Option	"AccelFactor"		"0.015"
                Option	"EdgeMotionMinSpeed"	"200"
                Option	"EdgeMotionMaxSpeed"	"200"
                Option	"UpDownScrolling"	"1"
                Option	"CircularScrolling"	"1"
                Option	"CircScrollDelta"	"0.1"
                Option	"CircScrollTrigger"	"2"
EndSection

Section "Device"
                Driver      "i810"
                VendorName  "Intel Corp."
                BoardName   "Mobile Graphics Controller"
                Identifier  "i915I"
                VideoRam    32768
                BusID       "PCI:0:2:0"
                Screen      0
EndSection

Section "Device"
                Driver      "i810"
                VendorName  "Intel Corp."
                BoardName   "Mobile Graphics Controller"
                Identifier  "i915E"
                BusID       "PCI:0:2:0"
                Screen      1
EndSection

Section "Monitor"
                Identifier	"LCD"
                HorizSync	31-90
                VertRefresh	59-75
                Option      "DPMS"
                Option      "MonitorLayout"	"CRT,LFP"
                Modeline    "1280x800" 71.00 1280 1312 1344 1456 800 801 804 820
EndSection

Section "Monitor"
                Identifier	"CRT"
                HorizSync	31-90
                VertRefresh	54-61
EndSection

Section "Screen"
                Identifier  "Screen0"
                Device      "i915I"
                Monitor     "LCD"
                DefaultDepth 24
                SubSection 	"Display"
                                Depth   16
                                Modes   "1280x800" "1024x768" "800x600" "640x480"
                EndSubSection
                SubSection 	"Display"
                                Depth   24
                                Modes   "1280x800" "1024x768" "800x600" "640x480"
                EndSubSection
EndSection

Section "Screen"
                Identifier  "Screen1"
                Device      "i915E"
                Monitor     "CRT"
                DefaultDepth 24
                SubSection 	"Display"
                                Depth   16
                                Modes   "800x600" "640x480"
                EndSubSection
                SubSection 	"Display"
                                Depth   24
                                Modes   "800x600" "640x480"
                EndSubSection
EndSection

Section "ServerLayout"
                Identifier     "single"
                Screen          0  "Screen0" 0 0
                InputDevice    "Touchpad" 	"CorePointer"
                InputDevice    "PS2 Mouse" 	"AlwaysCore"
                InputDevice    "PS2 Keyboard" "CoreKeyboard"
EndSection

Section "ServerLayout"
                Identifier     "xinerama-multi"
                Screen          0  "Screen0" 0 0
                Screen          1  "Screen1" LeftOf "Screen0"
                InputDevice    "Touchpad" 	"CorePointer"
                InputDevice    "PS2 Mouse" 	"AlwaysCore"
                InputDevice    "PS2 Keyboard" "CoreKeyboard"
                Option         "Xinerama" "Off"
EndSection

Section "ServerLayout"
                Identifier     "xinerama-one"
                Screen          0  "Screen0" 0 0
                Screen          1  "Screen1" LeftOf "Screen0"
                InputDevice    "Touchpad" 	"CorePointer"
                InputDevice    "PS2 Mouse" 	"AlwaysCore"
                InputDevice    "PS2 Keyboard" "CoreKeyboard"
                Option         "Xinerama" "On"
EndSection

Section "DRI"
                Mode         0666
EndSection

Section "Extensions"
                Option      "Composite" "False"
EndSection