Ключевые слова:video, multiseat, linux, debian, x11, xorg, gdm, (найти похожие документы)
From: darion76 <darion76@gmail.com.>
Date: Mon, 24 Jul 2008 14:31:37 +0000 (UTC)
Subject: Создание 3D Multiseat на основе debian
Оригинал: http://www.automation.dn.ua/linux/3d-multiseat.html
Операционная система Линукс нашла достойное применение не только на
мощных и производительных серверах, не только во встраиваемых системах,
не только в телефонах и комуникаторах и т.д., но и на домашних
компьютерах многих пользователей.
Настройка Линукса традиционно считается непростой задачей для
пользователя. Однако следует учесть те дополнительные возможности,
которые можно получить используя преимущества этой операционной
системы.
Достоинства Линукс известны большинству пользователей, даже тех кто
никогда не сталкивался с opensource. Наиболее важные из них:
- стабильность;
- надежность;
- открытость;
- масштабируемость.
Поскольку современный персональный компьютер способен обеспечить
одновременную работу нескольких пользователей, необходимо использовать
свойство системы Линукс чтобы усадить несколько членов семьи за один
компьютер. Это и есть идея которая называется multiseat. Сама по себе
она не нова. Уже достаточно давно люди используют Линукс для
организации нескольких рабочих мест с одним системным блоком. Отличие
описываемой системы состоит в максимальном использовании современных
компьютерных аппаратных средств и системы Линукс.
Теперь немного поподробнее. Когда появились материнские платы с
поддержкой многоядерных процессоров и 4 разъемами PCI Ex 16x, вполне
естественной моей мыслью было использовать это оборудование для
получения нескольких рабочих мест без ограничения функциональных
возможностей.
Четыре PCI Ex 16x вполне обеспечат работу четырех пользователей,
которые не будут обделены в смысле 3D игр и мощности системы при
условии использования 4-ех ядерного процессора.
В моем примере используется следующее аппаратное обеспечение :
Материнская плата MSI K9A2 Platinum V2; Socket АМ2/AM2+; AMD
790FX+SB600; 4DDRII; PCI Express 2.0; HyperTransport 3.0; 4xP-Ex16 ;
1xP-Ex1; 2xP; Sound 8-ch; 1x1394a; Gigabit Lan; 4хSATAII; 1xATA133;
SATAII RAID(0,1, 0+1); ATX
Процессор Athlon 64 x2 4800+ Socket AM2; BOX; AMD; Dual-Core; 2500Mhz;
2x512KB; Brisbane; 0.065m; 65W; Revision G2; Dual-Channel DDRII
Память 1024Mb DDR-II; PC-6400; Kingston
Видеокарта1 8600GT Asus Silent
Видеокарта2 6200TC Asus Silent
Программное обеспечение: Debian 4.0 Etch, wine 1.0
Цель: обеспечить независимую работу 2 пользователей на указанном
оборудовании без ограничения в использовании 3D ускорения.
Далее следует пошаговая инструкция для тех кто захочет повторить 3D Multiseat.
Я попытаюсь сделать её максимально доступной и понятной, но как всегда
в подобных случаях вы должны понимать что действуете на свой страх и
риск. Никакой ответственности за то что кто-то неправильно что-то
сделал или не так понял мои рекомендации, если что-то вышло из строя
или были потеряны важные данные я не несу.
Особо лишь отмечу что в инструкции не отражены элементарные с точки
зрения компьютерной техники вещи. Например, если указано что нужно
установить видеокарту в системный блок, значит нужно сначала завершить
работу компьютера и только после выключения устанавливать видеокарту.
Также не рассматривается установка системы debian, если эта задача вам
не под силу попробуйте обратиться к соответствующим сведениям, которые
можно найти на установочном диске, либо в интернете.
1. Настройка классической конфигурации системы
Сначала необходимо установить и настроить обычную конфигурацию с одной
видеокартой.
Установите в компьютер сначала только одну видеокарту, одну мышку и
одну клавиатуру.
Поместите в DVD установочный диск с debian. Установите и настройте
систему со opensource драйвером nv.
ВНИМАНИЕ ! Текущая версия nv драйвера не поддерживает видеокарты
GeForce 8600. Поэтому при установе используйте драйвер vesa (в файле
xorg.conf в секции описания видеоадаптера вместо Driver "nv" укажите
Driver "vesa") и избегайте разрешений больше 1024x768 при
первоначальной настройке системы.
Скачайте проприетарный драйвер от NVidia (с официального сайта
nvidia.com). Я использовал NVIDIA-Linux-x86-173.14.05-pkg1.run, но
возможно к моменту когда вы будете читать эту статью уже появятся
версии новее. Для установки перезагрузите систему в режиме одиночного
пользователя. Установите драйвер (потребуются привелегии root) следуя
инструкциям указанным на сайте:
sh ./NVIDIA-Linux-x86-173.14.05-pkg1.run.
Не забудьте включить пользователей которые будут пользоваться ускорителем и
настройками звуковой карты добавить в соответствующие группы audio и video.
Перезагрузите компьютер в многопользовательском режиме. Проверьте что
всё прошло успешно :
darion@darion-debian:~$ lsmod | grep nvidia
nvidia 7096260 70
agpgart 30216 2 nvidia
i2c_core 20096 5 nvidia,it87,i2c_isa,i2c_nforce2,i2c_piix4
Убедитесь что ускоритель работает:
darion@darion-debian:~$ glxinfo | grep direct
direct rendering: Yes
Проверьте что действительно используется проприетарный драйвер от
NVidia:
darion@darion-debian:~$ glxinfo | grep vendor
server glx vendor string: NVIDIA Corporation
client glx vendor string: NVIDIA Corporation
OpenGL vendor string: NVIDIA Corporation
2. Определение оборудования
После этого установите вторую видеокарту, подключите второй монитор,
вторую клавиатуру, вторую мышь.
Включите компьютер, загрузите систему.
Запустите терминал. На данном этапе следует создать список оборудования
в том виде как его определила система.
1. Определение видеокарт:
darion@darion-debian:~$ lspci | grep VGA
01:00.0 VGA compatible controller: nVidia Corporation Unknown device 0402 (rev a 1)
03:00.0 VGA compatible controller: nVidia Corporation NV44 [GeForce 6200 TurboCa che(TM)] (rev a1)
Из полученного списка видно что установлены 2 видеокарты. Первая
GeForce 8600, вторая - GeForce 6200.
2. Определяем мышки и клавиатуры:
darion@darion-debian:~$ cat /proc/bus/input/devices
I: Bus=0011 Vendor=0001 Product=0001 Version=ab41
N: Name="AT Translated Set 2 keyboard"
P: Phys=isa0060/serio0/input0
S: Sysfs=/class/input/input0
H: Handlers=kbd event0
B: EV=120013
B: KEY=4 2000000 3802078 f840d001 feffffdf ffefffff ffffffff fffffffe
B: MSC=10
B: LED=7
I: Bus=0003 Vendor=09da Product=000a Version=0002
N: Name="A4Tech PS/2+USB Mouse"
P: Phys=usb-0000:00:13.1-2/input0
S: Sysfs=/class/input/input3
H: Handlers=mouse0 event2 ts0
B: EV=7
B: KEY=ff0000 0 0 0 0 0 0 0 0
B: REL=303
I: Bus=0010 Vendor=001f Product=0001 Version=0100
N: Name="PC Speaker"
P: Phys=isa0061/input0
S: Sysfs=/class/input/input4
H: Handlers=kbd event3
B: EV=40001
B: SND=6
I: Bus=0011 Vendor=0002 Product=0006 Version=0000
N: Name="ImExPS/2 Generic Explorer Mouse"
P: Phys=isa0060/serio1/input0
S: Sysfs=/class/input/input5
H: Handlers=mouse1 event4 ts1
B: EV=7
B: KEY=1f0000 0 0 0 0 0 0 0 0
B: REL=143
I: Bus=0003 Vendor=046d Product=c312 Version=0100
N: Name="LITEON Technology USB Multimedia Keyboard"
P: Phys=usb-0000:00:13.4-1/input0
S: Sysfs=/class/input/input6
H: Handlers=kbd event1
B: EV=120003
B: KEY=10000 7 ff87207a c14057ff febeffdf ffefffff ffffffff fffffffe
B: LED=7
3. Настройка X сервера
Используя сведения из предыдущего раздела настраиваем сервер (важные
значения выделены красным цветом). Обратите внимание что клавиатуры
нужно настраивать с использованием evdev. Для мышек это необязательно,
хотя привязка к подключению имеет значение когда в системе появиться 4
или 10 мышек. Пока их 2, а к тому же одна PS/2, можно оставить как
есть. В моем случае настройки приняли следующий вид (реальная рабочая
конфигурация):
/etc/X11/xorg.conf
Section "ServerLayout"
Identifier "Seat0"
Screen "Screen0" 0 0
InputDevice "Keyboard0" "CoreKeyboard"
InputDevice "Mouse0" "CorePointer"
EndSection
Section "ServerLayout"
Identifier "Seat1"
Screen "Screen1"
Screen "TV" RightOf "Screen1"
InputDevice "Keyboard1" "CoreKeyboard"
InputDevice "Mouse1" "CorePointer"
EndSection
Section "Files"
# path to defoma fonts
FontPath "/usr/share/fonts/X11/misc"
FontPath "/usr/X11R6/lib/X11/fonts/misc"
FontPath "/usr/share/fonts/X11/cyrillic"
FontPath "/usr/X11R6/lib/X11/fonts/cyrillic"
FontPath "/usr/share/fonts/X11/100dpi/:unscaled"
FontPath "/usr/X11R6/lib/X11/fonts/100dpi/:unscaled"
FontPath "/usr/share/fonts/X11/75dpi/:unscaled"
FontPath "/usr/X11R6/lib/X11/fonts/75dpi/:unscaled"
FontPath "/usr/share/fonts/X11/Type1"
FontPath "/usr/X11R6/lib/X11/fonts/Type1"
FontPath "/usr/share/fonts/X11/100dpi"
FontPath "/usr/X11R6/lib/X11/fonts/100dpi"
FontPath "/usr/share/fonts/X11/75dpi"
FontPath "/usr/X11R6/lib/X11/fonts/75dpi"
FontPath "/var/lib/defoma/x-ttcidfont-conf.d/dirs/TrueType"
EndSection
Section "Module"
Load "i2c"
Load "bitmap"
Load "ddc"
Load "extmod"
Load "freetype"
Load "glx"
# Load "int10"
Load "vbe"
EndSection
Section "InputDevice"
Driver "evdev"
Option "Phys" "isa0060/serio0/input0"
Identifier "Keyboard1"
Option "XkbModel" "evdev"
Option "XkbLayout" "us,ru(winkeys)"
Option "CoreKeyboard"
EndSection
Section "InputDevice"
Identifier "Mouse0"
Driver "mouse"
Option "Device" "/dev/input/mouse1"
Option "Protocol" "ExplorerPS/2"
EndSection
Section "InputDevice"
Driver "evdev"
Option "Phys" "usb-0000:00:13.4-1/input0"
Identifier "Keyboard0"
Option "XkbModel" "evdev"
Option "XkbLayout" "us,ru(winkeys)"
Option "CoreKeyboard"
EndSection
Section "InputDevice"
Identifier "Mouse1"
Driver "mouse"
Option "Device" "/dev/input/mouse0"
Option "Protocol" "ExplorerPS/2"
EndSection
Section "Monitor"
Identifier "S/T 77/76DFX"
# 800x600 @ 75.00 Hz (GTF) hsync: 47.02 kHz; pclk: 48.91 MHz
Modeline "800x600_75.00" 48.91 800 840 920 1040 600 601 604 627 -HSync +Vsync
Option "DPMS"
EndSection
Section "Monitor"
Identifier "LG L1953S"
Option "DPMS"
EndSection
Section "Monitor"
Identifier "TV-Out"
VendorName "Samsung"
ModelName "Plano"
HorizSync 30.0 - 50.0
VertRefresh 50.0 - 50.0
EndSection
Section "Device"
Identifier "nVidia 8600GT"
Driver "nvidia"
BusID "PCI:1:0:0"
Screen 0
EndSection
Section "Device"
Identifier "nVidia 6200TC"
Driver "nvidia"
BusID "PCI:3:0:0"
Screen 0
EndSection
Section "Device"
Identifier "nvidia-TVOut0"
Driver "nvidia"
VendorName "nVidia Corp."
BoardName "NVIDIA GeForce 6200"
Option "DPMS"
BusID "PCI:3:0:0"
Screen 1
EndSection
Section "Screen"
Identifier "Screen0"
Device "nVidia 8600GT"
Monitor "S/T 77/76DFX"
DefaultDepth 24
SubSection "Display"
Depth 1
Modes "1280x1024" "1024x768" "832x624" "800x600" "720x400" "640x480"
EndSubSection
SubSection "Display"
Depth 4
Modes "1280x1024" "1024x768" "832x624" "800x600" "720x400" "640x480"
EndSubSection
SubSection "Display"
Depth 8
Modes "1280x1024" "1024x768" "832x624" "800x600" "720x400" "640x480"
EndSubSection
SubSection "Display"
Depth 15
Modes "1280x1024" "1024x768" "832x624" "800x600" "720x400" "640x480"
EndSubSection
SubSection "Display"
Depth 16
Modes "1280x1024" "1024x768" "832x624" "800x600" "720x400" "640x480"
EndSubSection
SubSection "Display"
Depth 24
Modes "1280x1024" "1024x768" "832x624" "800x600" "720x400" "640x480"
EndSubSection
EndSection
Section "Screen"
Identifier "Screen1"
Device "nVidia 6200TC"
Monitor "LG L1953S"
DefaultDepth 24
SubSection "Display"
Depth 1
Modes "1280x1024" "1024x768" "832x624" "800x600" "720x400" "640x480"
EndSubSection
SubSection "Display"
Depth 4
Modes "1280x1024" "1024x768" "832x624" "800x600" "720x400" "640x480"
EndSubSection
SubSection "Display"
Depth 8
Modes "1280x1024" "1024x768" "832x624" "800x600" "720x400" "640x480"
EndSubSection
SubSection "Display"
Depth 15
Modes "1280x1024" "1024x768" "832x624" "800x600" "720x400" "640x480"
EndSubSection
SubSection "Display"
Depth 16
Modes "1280x1024" "1024x768" "832x624" "800x600" "720x400" "640x480"
EndSubSection
SubSection "Display"
Depth 24
Modes "1280x1024" "1024x768" "832x624" "800x600" "720x400" "640x480"
EndSubSection
EndSection
Section "Screen"
Identifier "TV"
Device "nvidia-TVOut0"
Monitor "TV-Out"
DefaultDepth 24
Option "TVStandard" "HD576i"
Option "TVOutFormat" "COMPOSITE"
Option "ConnectedMonitor" "TV,CRT"
SubSection "Display"
Modes "800x600" "640x480"
Depth 16
EndSubSection
SubSection "Display"
Depth 24
Modes "800x600" "640x480"
EndSubSection
SubSection "Display"
Depth 32
Modes "800x600" "640x480"
EndSubSection
EndSection
4. Настройка gdm
Для входа в систему я использовал gdm. Его необходимо перенастроить на
несколько рабочих мест. Инициализация нескольких карт требует некоторых
ухищрений, поскольку драйвер от NVidia закрыт и
декомпилировать/изменять его не позволяет лицензионное соглашение. Но
мне удалось с помощью экспериментов обойти проблему инициализации.
Перемещаем файл /usr/share/gdm/defaults.conf в
/usr/share/gdm/defaults.conf.orig:
darion-debian:~# cd /usr/share/gdm
darion-debian:/usr/share/gdm# mv defaults.conf defaults.conf.orig
создаем символьную ссылку на этот файл:
darion-debian:/usr/share/gdm# ln -s defaults.conf.orig defaults.conf
Внимание ! defaults.conf.orig не просто бекап файла, он необходим для
работы скрипта инициализации и поэтому должен присутствовать именно в
/usr/share/gdm.
Создаем файл конфигурации gdm для мультисита. Для этого копируем
оригинальный файл:
darion-debian:/usr/share/gdm# cp defaults.conf.orig defaults.conf.multiseat
Теперь необходимо отредактировать defaults.conf.multiseat для запуска
нескольких X сессий:
В файле defaults.conf.multiseat в секции [servers] нужно добавить еще
один сервер :
[servers]
# These are the standard servers. You can add as many you want here and they
# will always be started. Each line must start with a unique number and that
# will be the display number of that server. Usually just the 0 server is
# used.
0=Standard0
1=Standard1
[server-Standard0]
name=Standard server
command=/usr/bin/X -sharevts -isolateDevice PCI:3:0:0 -layout seat1 :0
flexible=false
[server-Standard1]
name=Standard server
command=/usr/bin/X -sharevts -isolateDevice PCI:1:0:0 -layout seat0 :1
flexible=false
Остальные секции оставляем без изменения.
5. Скрипт инициализации и запуска gdm
Для инициализации я написал следующий скрипт. Его необходимо поместить
под именем gdm-multiseat в каталог /etc/init.d.
gdm-multiseat
#! /bin/sh
### BEGIN INIT INFO
# Provides: fake Xorg initialization
# Should-Start: console-screen acpid
# Required-Start: $local_fs $remote_fs
# Required-Stop: $local_fs $remote_fs
# Default-Start: 2 3 4 5
# Default-Stop: S 0 1 6
# Short-Description: fake Xorg preinit script for multiseat system
# Description: Debian preinit script for the multiseat system
### END INIT INFO
#
# Author: Andrey Zhornyak
#
set -e
PATH=/sbin:/bin:/usr/sbin:/usr/bin
GDM_SCRIPT=/etc/init.d/gdm
MULTISEAT_FILE=/usr/share/gdm/defaults.conf.multiseat
ORIG_FILE=/usr/share/gdm/defaults.conf.orig
SYMLINK_FILE=/usr/share/gdm/defaults.conf
test -x $GDM_SCRIPT || exit 0
case "$1" in
start)
rm -f $SYMLINK_FILE
ln -s $ORIG_FILE $SYMLINK_FILE
echo "Starting temporary single X server"
/usr/bin/X -dpi 96 -audit 0 &
sleep 5
/usr/bin/killall Xorg
rm -f $SYMLINK_FILE
ln -s $MULTISEAT_FILE $SYMLINK_FILE
exec /etc/init.d/gdm start
;;
stop)
exec /etc/init.d/gdm stop
;;
reload)
;;
restart|force-reload)
$0 stop
$0 start
;;
*)
echo "Usage: /etc/init.d/fakex
{start|stop|restart|reload|force-reload}" exit 1
;;
esac
exit 0
Затем необходимо удалить символьную ссылку на скрипт gdm из уровня 2
(на остальных уровнях можно оставить gdm):
darion-debian:~# cd /etc/rc2.d
darion-debian:/etc/rc2.d# rm /etc/rc2.d/*gdm
darion-debian:/etc/rc2.d# ln -s ../init.d/gdm-multiseat S21gdm-multiseat
После перезагрузки если, все прошло успешно, вы получите 3D Multiseat
систему. Если необходимо добавить еще пару рабочих мест, необходимо
повторить шаги со 2-го по 5-й. Возможно скрипт инициализации придется
подредактировать. И не забывайте простое правило - по 1-ому ядру на
пользователя.
При использовании материалов статьи прямая гиперссылка на 3D Multiseat обязательна
darion@darion-debian:~$ lspci | grep VGA
01:00.0 VGA compatible controller: nVidia Corporation Unknown device 0402 (rev a 1)
Из полученного списка видно что установлены 2 видеокарты. Первая GeForce 8600,