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