X11/DualSeat: различия между версиями
Нет описания правки |
|||
Строка 6: | Строка 6: | ||
== Настройка мультистанции ([[X11/DualSeat|DualSeat]]) на паре видеокарт. == | == Настройка мультистанции ([[X11/DualSeat|DualSeat]]) на паре видеокарт. == | ||
=== Введение === | |||
В этой статье рассказывается как настроить [[X11/DualSeat|DualSeat]] на паре видеокарт NVIDIA | В этой статье рассказывается как настроить [[X11/DualSeat|DualSeat]] на паре видеокарт NVIDIA | ||
(встроенная+внешняя для платы со встроенным видео, либо 2 внешние для платы с 2-мя PCI-E/16) | (встроенная+внешняя для платы со встроенным видео, либо 2 внешние для платы с 2-мя PCI-E/16) | ||
Строка 18: | Строка 19: | ||
намертво вешал систему. Так что крайне не советую покупать оборудование исключительно в | намертво вешал систему. Так что крайне не советую покупать оборудование исключительно в | ||
расчете на этот Dual Seat, оно может просто не заработать :( | расчете на этот Dual Seat, оно может просто не заработать :( | ||
=== Бонусы === | |||
1) Два полностью независимых рабочих места со своим пользователем, монитором, звуком, мышью и клавиатурой. | |||
2) 3D ускорение на каждом рабочем месте. | |||
=== Пример рабочей конфигурации === | === Пример рабочей конфигурации === | ||
Строка 29: | Строка 36: | ||
:usb клавиатура A4tech-KIP800 | :usb клавиатура A4tech-KIP800 | ||
Софт: ALT Linux 4.1/branch (архитектура x86_64) | Софт: ALT Linux 4.1/branch (архитектура x86_64), nvidia 177.80 | ||
==== конфигурация 2 (старая) ==== | ==== конфигурация 2 (старая) ==== | ||
Строка 40: | Строка 47: | ||
:usb клавиатура A4tech-KIP800 | :usb клавиатура A4tech-KIP800 | ||
Софт: Бранч 4.0 (архитектура x86_64)+Сизиф 200801xx. | Софт: nvidia 100.14.19, Бранч 4.0 (архитектура x86_64)+Сизиф 200801xx. | ||
(xorg-x11-server-1.4.0.90-alt8, xorg-x11-drv-evdev-1.2.0-alt3) | (xorg-x11-server-1.4.0.90-alt8, xorg-x11-drv-evdev-1.2.0-alt3) | ||
пришлось еще дополнительно обновить ряд пакетов и обновить все пакеты шрифтов (важно). | пришлось еще дополнительно обновить ряд пакетов и обновить все пакеты шрифтов (важно). | ||
(в бранче 4.0 xorg-x11-drv-evdev сломан для клавиатур, да и xorg-x11-server лучше брать 1.4.0). | (в бранче 4.0 xorg-x11-drv-evdev сломан для клавиатур, да и xorg-x11-server лучше брать 1.4.0). | ||
=== Грабли === | === Грабли === | ||
Строка 56: | Строка 57: | ||
[[X11/IsolateDevice|IsolateDevice]] с PCIe не работает :( | [[X11/IsolateDevice|IsolateDevice]] с PCIe не работает :( | ||
После того, как | После того, как X сервер первый раз запустился (и выполнил какую-то инициализацию железа, -probeonly недостаточно), | ||
уже можно оба X сервера останавливать и запускать одновременно. | уже можно оба X сервера останавливать и запускать одновременно. | ||
При чем дополнительно пришлось (в новой конфигурации) указать | |||
: Option "ProbeAllGpus" "False" | |||
чтобы система не зависала, в старой конфигурации можно было не указывать. | |||
Возможные варианты: | Возможные варианты: | ||
Строка 64: | Строка 68: | ||
a1) запуск 1-го сервера через DM, второго с консоли. | a1) запуск 1-го сервера через DM, второго с консоли. | ||
Конфигурация WDM для запуска только seat0: | |||
<pre>cat /etc/X11/wdm/Xservers | |||
:0 local /usr/bin/Xorg :0 -layout seat0 | |||
</pre> | |||
Приходится при загрузке запускать 1 сервер, а потом с консоли запускать второй. | Приходится при загрузке запускать 1 сервер, а потом с консоли запускать второй. | ||
При этом либо нужно убрать | При этом либо нужно убрать | ||
Строка 80: | Строка 88: | ||
Без дополнительных телодвижений wdm c конфигурацией | Без дополнительных телодвижений wdm c конфигурацией | ||
<code>cat /etc/X11/wdm/Xservers</code> | <code>cat /etc/X11/wdm/Xservers</code> | ||
<pre>:0 local /usr/bin/X :0 -layout | <pre>:0 local /usr/bin/X :0 -layout seat0 | ||
:1 local /usr/bin/X :1 -novtswitch -sharevts -layout seat1</pre> | |||
пытается запустить 2 X-сервера одновременно, что намертво вешает систему. | пытается запустить 2 X-сервера одновременно, что намертво вешает систему. | ||
Строка 91: | Строка 99: | ||
X- серверов. | X- серверов. | ||
Идея следующая: Перед запуском сервиса dm запускается X - сервер, который делает | |||
первичную инициализацию (используя конфигурацию с доступом ко всем видеокартам. Например, "ServerLayout" "dualhead") | |||
Соответствующий скрипт оформлен в пакет X-multiseat-preinit. | |||
Конфигурация WDM в расчете на X-multiseat-preinit: | |||
<pre>cat /etc/X11/wdm/Xservers | |||
:0 local /usr/bin/X :0 -layout seat0 | |||
:1 local /usr/bin/X :1 -novtswitch -sharevts -layout seat1 | |||
</pre> | |||
3) Option "AutoAddDevices" "false" | |||
Обязательно, иначе hal попытается автоматически отдать все | |||
свободные мыши и клавиатуры серверу, который успел запуститься раньше. | |||
=== Разделение звука между рабочими местами. === | |||
=== xorg.conf === | === xorg.conf === | ||
<source lang="xorg_conf"> | <source lang="xorg_conf"> | ||
Section "ServerFlags" | Section "ServerFlags" | ||
# Option "AllowMouseOpenFail" "true" | |||
# Option "AllowEmptyInput" "true" | |||
Option "DefaultServerLayout" "seat0" | Option "DefaultServerLayout" "seat0" | ||
# Option "DefaultServerLayout" "dualhead" | # Option "DefaultServerLayout" "dualhead" | ||
Строка 321: | Строка 335: | ||
=== Полезные ссылки === | === Полезные ссылки === | ||
* [http://linux.org.ua/cgi-bin/yabb/YaBB.pl?num=1216232698 linux.org.ua «3D Multiseat» (укр.)] | * [http://linux.org.ua/cgi-bin/yabb/YaBB.pl?num=1216232698 linux.org.ua «3D Multiseat» (укр.)] | ||
* [http://lafox.net/support/index.php?showtopic=19511 multiseat на форуме lafox.net] | |||
* [http://www.automation.dn.ua/linux/3d-multiseat.html www.automation.dn.ua «Создание 3D Multiseat на основе debian»] | * [http://www.automation.dn.ua/linux/3d-multiseat.html www.automation.dn.ua «Создание 3D Multiseat на основе debian»] |
Версия от 01:15, 28 января 2009
Настройка мультистанции (DualSeat) на паре видеокарт.
Введение
В этой статье рассказывается как настроить DualSeat на паре видеокарт NVIDIA (встроенная+внешняя для платы со встроенным видео, либо 2 внешние для платы с 2-мя PCI-E/16) Такая конфигурация позволяет достаточно легко настроить независимые рабочие места с 3D ускроением, при этом нет необходимости в запуске вложенных X - серверов.
Если у вас встроенная видеокарта безальтернативно отключается при наличии внешней, или есть только внешняя двухголовая видеокарта, то вам сюда: /AltLinux/Dokumentacija/Multistation.
По сообщению Vitaly Ostanin <vyt@>, у него в свое время на достаточно похожей конфигурации второй X server намертво вешал систему. Так что крайне не советую покупать оборудование исключительно в расчете на этот Dual Seat, оно может просто не заработать :(
Бонусы
1) Два полностью независимых рабочих места со своим пользователем, монитором, звуком, мышью и клавиатурой.
2) 3D ускорение на каждом рабочем месте.
Пример рабочей конфигурации
конфигурация 1 (новая)
- материнка Asus со встроенной nvidia 8200
- внешняя nvidia 8400GS
- 2 монитора
- 2 мыши Logitech (usb+usb)
- ps/2 клавиатура
- usb клавиатура A4tech-KIP800
Софт: ALT Linux 4.1/branch (архитектура x86_64), nvidia 177.80
конфигурация 2 (старая)
В свое время также организовал Dual Seat на следующем железе:
- материнка Gigabyte GA-M55plus-S3G со встроенной nvidia 6150LE (Спасибо Саше (led@) за совет)
- внешняя nvidia 8400GS
- 2 монитора
- 2 мыши Logitech (ps/2+usb)
- ps/2 клавиатура
- usb клавиатура A4tech-KIP800
Софт: nvidia 100.14.19, Бранч 4.0 (архитектура x86_64)+Сизиф 200801xx. (xorg-x11-server-1.4.0.90-alt8, xorg-x11-drv-evdev-1.2.0-alt3) пришлось еще дополнительно обновить ряд пакетов и обновить все пакеты шрифтов (важно). (в бранче 4.0 xorg-x11-drv-evdev сломан для клавиатур, да и xorg-x11-server лучше брать 1.4.0).
Грабли
1) В указанной конфигурации нельзя инициализировать 2 X сервера одновременно (повиснет). IsolateDevice с PCIe не работает :(
После того, как X сервер первый раз запустился (и выполнил какую-то инициализацию железа, -probeonly недостаточно), уже можно оба X сервера останавливать и запускать одновременно. При чем дополнительно пришлось (в новой конфигурации) указать
- Option "ProbeAllGpus" "False"
чтобы система не зависала, в старой конфигурации можно было не указывать.
Возможные варианты:
а) последовательный запуск X - серверов.
a1) запуск 1-го сервера через DM, второго с консоли. Конфигурация WDM для запуска только seat0:
cat /etc/X11/wdm/Xservers :0 local /usr/bin/Xorg :0 -layout seat0
Приходится при загрузке запускать 1 сервер, а потом с консоли запускать второй. При этом либо нужно убрать
- Option "ProbeAllGpus" "False"
чтобы первый X - сервер выполнил инициализацию, либо использовать принудительную инициализацию (см. x-multiseat-preinit).
первый X сервер надо пускать без -sharevts. Иначе gpm получит доступ к видеопамяти и станет ее портить. (Артефакты на экране при движении мышью). Второй X сервер можно пускать командой
$ cat ~/bin/X2 startx -- :1 -layout seat1 -novtswitch -sharevts vt8 -nolisten tcp
a2) запуск серверов через DM последовательно.
Без дополнительных телодвижений wdm c конфигурацией
cat /etc/X11/wdm/Xservers
:0 local /usr/bin/X :0 -layout seat0 :1 local /usr/bin/X :1 -novtswitch -sharevts -layout seat1
пытается запустить 2 X-сервера одновременно, что намертво вешает систему.
В DM, которым я пользовался (wdm), опции для последовательного запуска X серверов не нашел. При желании можно было бы пропатчить wdm, чтобы он запускал X сервера последовательно. Я пошел путем b), а читатели могут попытаться разобраться со своим DM самостоятельно.
b) Принудительная предварительная инициализация видеокарт + последующий параллельный запуск X- серверов.
Идея следующая: Перед запуском сервиса dm запускается X - сервер, который делает первичную инициализацию (используя конфигурацию с доступом ко всем видеокартам. Например, "ServerLayout" "dualhead")
Соответствующий скрипт оформлен в пакет X-multiseat-preinit.
Конфигурация WDM в расчете на X-multiseat-preinit:
cat /etc/X11/wdm/Xservers :0 local /usr/bin/X :0 -layout seat0 :1 local /usr/bin/X :1 -novtswitch -sharevts -layout seat1
3) Option "AutoAddDevices" "false" Обязательно, иначе hal попытается автоматически отдать все свободные мыши и клавиатуры серверу, который успел запуститься раньше.
Разделение звука между рабочими местами.
xorg.conf
Section "ServerFlags"
# Option "AllowMouseOpenFail" "true"
# Option "AllowEmptyInput" "true"
Option "DefaultServerLayout" "seat0"
# Option "DefaultServerLayout" "dualhead"
# Option "DefaultServerLayout" "default"
Option "AutoAddDevices" "false"
EndSection
Section "ServerLayout"
Identifier "default"
Screen "Screen0" 0 0
InputDevice "Keyboards" "CoreKeyboard"
InputDevice "mice"
EndSection
Section "ServerLayout"
Identifier "dualhead"
InputDevice "Keyboards" "CoreKeyboard"
InputDevice "mice" "CorePointer"
Screen 0 "Screen0" 0 0
Screen 1 "Screen1" RightOf "Screen0"
EndSection
Section "ServerLayout"
Identifier "xinerama"
InputDevice "Keyboards" "CoreKeyboard"
InputDevice "mice" "CorePointer"
Screen 0 "Screen0" 0 0
Screen 1 "Screen1" RightOf "Screen0"
Option "Xinerama" "on"
EndSection
Section "ServerLayout"
Identifier "seat0"
InputDevice "Keyboard0e" "CoreKeyboard"
InputDevice "usbmouse0" "CorePointer"
Screen 0 "Screen0" 0 0
# the same as IsolateDevice, but use bus id from "device" section
# note: only make things worse
# Option "SingleCard" "true"
EndSection
Section "ServerLayout"
Identifier "seat1"
# this usb keyboard has separate core and multimedia parts
InputDevice "Keyboard1e.0" "CoreKeyboard"
InputDevice "Keyboard1e.1" "SendCoreEvents"
InputDevice "Keyboard1e.2" "SendCoreEvents"
InputDevice "usbmouse1" "CorePointer"
Screen 0 "Screen1" 0 0
# Option "SingleCard" "true"
EndSection
Section "Module"
Load "freetype"
Load "glx"
Load "dri"
Load "dbe"
SubSection "extmod"
Option "omit xfree86-dga"
EndSubSection
EndSection
Section "InputDevice"
Identifier "Keyboards"
Driver "kbd"
Option "AutoRepeat" "250 40"
#Option "XkbModel" "pc105"
Option "XkbModel" "a4techKBS8"
#Option "XkbLayout" "us,ru,ua"
#Option "XkbVariant" ",winkeys,winkeys"
#Option "XkbOptions" "grp:menu_toggle,grp_led:scroll"
EndSection
Section "InputDevice"
Identifier "Keyboard0e"
Driver "evdev"
Option "Device" "/dev/input/by-path/platform-i8042-serio-0-event-kbd"
Option "XkbModel" "evdev"
# Option "XkbLayout" "us,ru,ua"
# Option "XkbVariant" ",winkeys,winkeys"
# Option "XkbOptions" "grp:menu_toggle,grp_led:scroll"
EndSection
Section "InputDevice"
# keyboard 1 - the main part (useful keys)
Identifier "Keyboard1e.0"
Driver "evdev"
Option "Device" "/dev/input/by-path/pci-0000:00:02.1-usb-0:1.1:1.0-event-kbd"
Option "XkbModel" "evdev"
# Option "XkbLayout" "us,ru,ua"
# Option "XkbVariant" ",winkeys,winkeys"
# Option "XkbOptions" "grp:menu_toggle,grp_led:scroll"
EndSection
Section "InputDevice"
# keyboard 1 - the extra part (multimedia keys)
Identifier "Keyboard1e.1"
Driver "evdev"
Option "Device" "/dev/input/by-path/pci-0000:00:02.1-usb-0:1.1:1.1-event-"
EndSection
Section "InputDevice"
# keyboard 1 - the extra part (multimedia keys)
# seems to be exact clone of "Keyboard1e.1"
Identifier "Keyboard1e.2"
Driver "evdev"
Option "Device" "/dev/input/by-path/pci-0000:00:02.1-usb-0:1.2:1.3-event-"
EndSection
Section "InputDevice"
Identifier "mice"
Driver "mouse"
Option "Device" "/dev/input/mice"
Option "Protocol" "IMPS/2"
Option "ZAxisMapping" "4 5"
EndSection
Section "InputDevice"
Identifier "usbmouse0"
Driver "mouse"
Option "Device" "/dev/input/by-path/pci-0000:00:02.0-usb-0:3:1.0-mouse"
Option "Protocol" "IMPS/2"
Option "ZAxisMapping" "4 5"
EndSection
Section "InputDevice"
Identifier "usbmouse1"
Driver "mouse"
Option "Device" "/dev/input/by-path/pci-0000:00:04.0-usb-0:1:1.0-mouse"
Option "Protocol" "IMPS/2"
Option "ZAxisMapping" "4 5"
EndSection
Section "Monitor"
Identifier "Monitor0"
EndSection
Section "Monitor"
Identifier "Monitor1"
Option "DPMS" "true"
EndSection
Section "Device"
Identifier "CardInt"
Driver "nvidia"
BoardName "GeForce 8200"
BusID "PCI:2:0:0"
Option "NoLogo" "True"
Option "ProbeAllGpus" "False"
EndSection
Section "Device"
Identifier "CardExt"
Driver "nvidia"
BoardName "GeForce 8400 GS"
BusID "PCI:3:0:0"
Option "NoLogo" "True"
Option "ProbeAllGpus" "False"
EndSection
Section "Screen"
Identifier "Screen0"
Device "CardExt"
Monitor "Monitor0"
DefaultDepth 24
SubSection "Display"
Depth 8
Modes "1280x1024" "1152x864" "1024x768" "832x624" "800x600" "720x400" "640x480"
EndSubSection
SubSection "Display"
Depth 15
Modes "1280x1024" "1152x864" "1024x768" "832x624" "800x600" "720x400" "640x480"
EndSubSection
SubSection "Display"
Depth 16
Modes "1280x1024" "1152x864" "1024x768" "832x624" "800x600" "720x400" "640x480"
EndSubSection
SubSection "Display"
Depth 24
Modes "1280x1024" "1152x864" "1024x768" "832x624" "800x600" "720x400" "640x480"
EndSubSection
SubSection "Display"
Depth 32
Modes "1280x1024" "1152x864" "1024x768" "832x624" "800x600" "720x400" "640x480"
EndSubSection
EndSection
Section "Screen"
Identifier "Screen1"
Device "CardInt"
Monitor "Monitor1"
DefaultDepth 24
SubSection "Display"
Depth 8
Modes "1680x1050"
EndSubSection
SubSection "Display"
Depth 16
Modes "1680x1050"
EndSubSection
SubSection "Display"
Depth 24
Modes "1680x1050"
EndSubSection
EndSection
Section "DRI"
Group "xgrp"
Mode 0660
EndSection