Ключевые слова:multihead, monitor, linux, video, x11, xfree86, xorg, (найти похожие документы)
From: Vadim Likhota <vadim-lvv[at]yandex.ru>
Date: Wed, 14 Apr 2006 18:21:07 +0000 (UTC)
Subject: Настройка мультимониторной конфигурации
Оригинал: http://www.klv.lg.ua/~vadim/multihead.html
Введение
Это описание посвящено еще одному способу использования избыточной
мощности, а именно - рассмотрению возможности посадить за один
компьютер нескольких пользователей.
Следует заметить, что этот способ использования компьютеров не нов
(в МГИУ был проект Змей Горыныч), но раньше для его воплощения
требовалось много лишних телодвижений. Сегодня в связи с
распространением USB и использованием udev это не нужно.
Посадить сразу всю семью или часть отдела за одну машину хотелось
давно, но толчком к осуществлению желаемого послужила новость от
Hewllet Packard "HP Multi-user 441 desktop solution" о начале
продаж компьютеров для школ и библиотек с четырьмя рабочими местами
под ОС Linux Mandrike (Windows же, скорее всего, в ближайшие несколько
лет такой режим работы поддерживать не будет, для Microsoft это
несколько невыгодно). Углубление в эту проблему позволило предложить
следующий чрезвычайно простой способ увеличения рабочих мест для
пользователей при наличии одного компьютера.
Общие принципы работы
На каждого нового пользователя в системный блок вставляется
дополнительная видеокарта, к которой подключается монитор, а также
клавиатура и мышь. При включении компьютера для каждого рабочего места
автоматически загружается отдельная копия Х-сервера. В настройках
каждого Х-сервера указано, с какой клавиатурой и мышкой он работает и
посредством какой видеокарты выводится изображение. Все остальные
аппаратные части компьютера находятся в общем использовании. За
распределением ресурсов между пользователями следит ядро системы.
Описываемый способ организации <<многоголового>> компьютера (от англ.
Multihead) обладает рядом достоинств. Прежде всего - это может сделать
каждый, мало-мальски знакомый с Linux'ом. Наиболее существенное и
приятное - затраты всего лишь на один системный блок для нескольких
пользователей. Кроме того, в отличие от терминалов, данная система не
зависит от пропускной способности сети, а значит позволяет всем
пользователям работать быстрее и комфортнее. Более притязательных
обрадует возможность использования на нем достаточно ресурсоемких
графических оболочек (Gnome, KDE) и программ (хотя одна чрезвычайно
ресурсоемкая программа, например Unreal, заметно отразится на
остальных).
К небольшим неудобствам следует отнести следующие особенности
производства современных компьютеров: количество рабочих мест
ограничивается количеством разъемов для видеокарт, клавиатур и мышей,
а также совершенно невозможно рассадить пользователей на большое
расстояние.
Перечислим то необходимое, что нужно для реализации <<многоголового>>
у себя дома или на рабочем месте.
Аппаратная часть
Видеосистема
Современные наиболее распространенные видеокарточки использовать везде
невозможно, так как на материнских платах нет второго AGP-разъема.
Приходится использовать PCI видеокарты. Опыт показывает, что наиболее
оптимальны из них S3 Virge и ATI Rage, так как не создают трудностей
при использовании и являются наиболее доступными. Некоторые PCI
видеокарты отказываются работать в качестве ведомой с какой-либо еще.
Проблем не встретилось практически ни с одной видеокарточкой от S3,
кроме S3TrioV+ и более старых, которые несовместимы с современными
материнскими платами, что неоднократно было проверено нами на чипсетах
Intel, nVidia и SiS. Думаю, использование современных видеокарт станет
скоро возможным, благодаря распространению материнских плат с PCI-E,
которые уже имеют несколько разъемов для поддержки SLI, или же выпуску
видеокарт PCI-E 1x (сегодня производимые Matrox'ом).
Клавиатура
Последние клавиатуры можно разделить на два вида по типу разъема -
PS/2 и USB. Для увеличения рабочих мест для пользователей при наличии
одного компьютера клавиатура USB не имеет ограничений на количество
подключений. Клавиатуру PS/2 можно использовать и в качестве второй,
подключается вместо мыши в PS/2 порт, при загрузке она будет
распознана Linux'ом корректно. Очевидно, что третья и более клавиатуры
могут быть только USB.
Мышь
Для работы подходит любая USB-мышь. Если создается два рабочих места с
клавиатурами PS/2, то неизбежна замена мыши PS/2 на мышь USB (обычно
usb-мышь дешевле, чем usb-клавиатура).
Настройка системы
Настройка старых систем (на ядре 2.4 + Xfree86 и более старых) хорошо
описана здесь, но т.к. этот сервер работает через раз, то копия
есть здесь. Я остановлюсь на одном из современных и достаточно
распространеных - на дистрибутиве Fedora Core 3 и совместимых с ним
(например ASPLinux 10). В нем используется ядро 2.6 с поддержкой udev,
что значительно упрощает настройку, а также для него есть X-сервер
с необходимыми изменениями, который достаточно выкачать и установить
на компьютер (на
ftp://ftp.linux.cz/pub/linux/people/jan_kasprzak/xorg-dualhead/
лежат xorg*.src.rpm, xorg*.athlon.rpm; здесь же есть патч для xorg
и приведен пример конфигурационных файлов). После того, как будут в
системный блок вставлена видеокарта и подключены дополнительные
клавиатура и мышь, надо загрузиться в консольном режиме (run level 3).
Однако некоторые BIOS'ы не понимают, что в мышиный порт подключена
клавиатура и останавливаются на этапе загрузки, следует нажать any key
на этой клавиатуре - и загрузка системы будет продолжена, то же
требуется и для asploader (так же не желательно при таком варианте
подключения клавиатур запускать Windows, если она у Вас такая стоит
параллельно, т.к. если нажать на второй клавиатуре эту самую any key,
то и первая станет недоступна до ближайшей перезагрузки).
Рассмотрим пример настройки двух рабочих мест (2 PS/2 клавиатуры и 2
USB мыши - это дешевле обходится, плюс я пару раз встречал глюки с
инициализацией <<only usb>>-клавиатур). Настройка большего количества
мест делается аналогично, только все остальные клавиатуры будут USB.
Итак, начинать настройку следует с указания о загрузке двух X-серверов
(здесь для gnome display manager): в файле /etc/X11/gdm/gdm.conf
заменить:
[server]
0=Standart
[server-Standart]
name=Standart server
command=/usr/X11R6/bin/X -audit 0
flexible=true
на
[server]
0=Standart0
1=Standart1
[server-Standart0]
name=Standart server
command=/usr/X11R6/bin/X -audit 0 vt7 -layout Layout0 -nopciaccessdisable
flexible=true
[server-Standart1]
name=Standart server
command=/usr/X11R6/bin/X -audit 0 vt7 -layout Layout1 -nopciaccessdisable -novt
switches
flexible=true
После этого настраиваются клавиатуры и мыши.
При загрузке Linux'а со всеми устройствами ввода в каталоге /dev/input
сопоставляются файлы event0, event1 и т. д., в дополнение к этому для
мышей mouse0, mouse1, а всем мышам одновременно - mice, но при каждой
загрузке это сопоставление происходит заново без оглядки на прошлую
нумерацию, и чтобы это упорядочить, надо каждому конкретному
устройству назначить постоянную символическую ссылку. Посмотреть
подключенные устройства ввода можно в файле /proc/bus/input/devices.
Для PS/2 устройств (в нашем случае 2 клавиатуры) надо в файл
/etc/udev/rules.d/10-input.rules добавить (если файла нет, то создать
его):
#PS/2 keyboard
SYSFS{dev}="13:64", KERNEL="event*", SYMLINK="keyboard_one"
SYSFS{dev}="13:65", KERNEL="event*", SYMLINK="keyboard_two"
USB-устройства лучше всего различать по кодам Bus, Vendor (например у
меня 046d - Logitech), Product и другим из файла
/proc/bus/input/devices (если устройства одинаковые, то можно
воспользоваться udevinfo -q path -n /dev/device и полученный путь
передать udevinfo -a -p путь, подробнее -
http://www.linuxforum.ru/index.php?showtopic=9712&hl=udev):
#USB mouse
BUS="usb", KERNEL="mouse*", SYSFS{idVendor}="046d", SYSFS{idProduct}="c50b", SY
NLINK="mouse_one"
BUS="usb", KERNEL="mouse*", SYSFS{idVendor}="046d", SYSFS{idProduct}="025c", SY
NLINK="mouse_two"
После перезагрузки (или перезапуска udev - killall udevd &
/sbin/start_udev) в каталоге /dev/input появятся нужные символические
ссылки. (детальное более подробное описание всех параметров - man
udev, udevinfo, udevd или http://linux-hotplug.sourceforge.net).
Теперь нужно указать X серверу, что со всем этим делать в файле
/etc/X11/xorg.conf. В нем прописана конфигурация для текущего
состояния:
Section "ServerLayout"
Identifier "Xfree86 Configurited"
Screen 0 "Screen0" 0 0
InputDevice "Mouse0" "CorePointer"
InputDevice "Keyboard0" "CoreKeyboard"
EndSection
Ее нужно заменить на:
Section "ServerLayout"
Identifier "Layout0"
Screen 0 "Screen0" 0 0
InputDevice "Mouse0" "CorePointer"
InputDevice "Keyboard0" "CoreKeyboard"
EndSection
Section "ServerLayout"
Identifier "Layout1"
Screen 0 "Screen1" 0 0
InputDevice "Mouse1" "CorePointer"
InputDevice "Keyboard1" "CoreKeyboard"
EndSection
Ниже следует найти секцию "InputDevice" с Identifier "Keyboard0",
заменить в ней протокол "Standart" на "usbev" (чтобы работа с
клавиатурой шла не напрямую, а через заданные нами файлы), добавить
строки, с указанием какой файл использовать и как обходится с
переключениями:
Option "Device" "/dev/input/keyboard_one"
Option "XkbRules" "xorg"
и создать такую же секцию с Identifier "Keyboard1" и
"/dev/input/keyboard_two".
Подобным же образом отредактировать секцию "Mouse0":
Section "InputDevice"
Identifier "Mouse0"
Driver "mouse"
Option "Protocol" "IMPS/2"
Option "Device" "/dev/input/mouse_one"
Option "ZaxisMapping" "4 5"
EndSection
Если Вам не понравится кому достались какие клавиатуры и мыши,
поменяйте ..._one на ..._two
Далее, в секции для "Screen0" заменить "Monitor" на "Monitor0" и
сделать его копию с параметрами "Screen1", "Monitor1" и в Device
заменить на "videocard1". Если второй монитор отличается, то текущие
разрешения заменить на требуемые. Пример:
Section "Screen"
Identifier "Screen1"
Device "videocard1"
Monitor "Monitor1"
DefaultColorDepth 16
SubSection "Display"
Depth 4
Modes "1024x768"
EndSubSection
SubSection "Display"
Depth 8
Modes "1024x768"
EndSubSection
SubSection "Display"
Depth 16
Modes "1024x768"
EndSubSection
EndSection
В секции "Monitor" заменить значение Identifier "Monitor" на
"Monitor0", создать его копию с Identifier "Monitor1". Вот пример для
монитора 17'' LCD с разрешением 1280х1024 и частотой 60 - 75 Гц:
Section "Monitor"
Identifier "Monitor0"
VendorName "SAM"
ModelName "Samsung SyncMaster"
HorizSync 61.5-81.0
VertRefresh 59.0-76.0
EndSection
и 17'' ЭЛТ монитора
Section "Monitor"
Identifier "Monitor1"
VendorName "SAM"
ModelName "Samsung SyncMaster"
HorizSync 30.0-96.0
VertRefresh 50.0-160.0
EndSection
В секции для видеокарты обязательно нужно правильно указать номер
устройства на PCI шине (просмотреть устройства можно по команде lspci)
и драйвер (список находится в /usr/X11R6/lib/modules/drivers, для
S3TrioV2 нужен vesa, а остальные явствуют из названия).
Section "Device"
BusID "PCI:2:0:0"
Driver "radeon"
Identifier "videocard0"
BoardName "ATI Radeon 9000"
EndSection
Вместо вышеобозначенных настроек все параметры для второй видеокарты и
монитора можно получить при помощи программы system-config-display, но
перед этим желательно сделать копию xorg.conf и вынуть видеокарту из
AGP-разъема. Потом оригинальный xorg.conf вернуть на место, а из
полученного, при помощи system-config-display, перенести настройки для
видеокарты и монитора.
Теперь после внесения всех изменений нужно проверить
работоспособность. Для этого в консоли (можно под любым юзером)
следует дать команду:
$X -layout Layout0
Экран переключится в графический режим с курсором в виде X на экране.
Для возвращения назад следует нажать Ctrl+Alt+Backspace. То же
проделать для Layout1.
Если все вышеописанное заработало, можно перегружать компьютер - и на
обоих экранах после загрузки появятся приглашения для ввода
имени/пароля.
Не относящееся к делу завершение
Итак, как видно, все просто и легко применимо. Если вы установите
<<многопользовательский>> компьютер на работе, то, сэкономив средства
своего предприятия, значительно увеличите окупаемость закупленной
техники. Если же вы обзаведетесь <<многоголовой>> машиной дома, то
это, по наиточнейшим данным, снизит удельный вес ссор из-за доступа к
<<телу>> и, разрядив семейную атмосферу, сделает вашу жизнь намного
счастливее, а главное - устранит многие препятствия для одновременного
вдохновенного творчества.
Ссылки
Форум по статье на LOR'еMultiple local XFree users under Linux, так же там много других ссылок
Sharing your computer with Matrox G450 dualhead HOWTO
вопросы и предложения направлять по адресу vadim-lvv[at]yandex.ru
(c) Vadim Likhota
здесь внизу не приведены все ссылки:
для xorg-6.9/7.0 можно использовать http://blog.chris.tylers.info/index.php?/archives/14-Multiseat-X-Under-X11R6. НО!
в релизе выпущенном зимой для драйвера evdev есть ошибка работы несколькими языками (в т.ч. не работает переключение на русский) Решается это парой патчей, ссылки на которые есть на этой же странице. Правда поле патча все равно не работает win-key. Когда обкатаю 6.9, выложу в общий доступ. Желающие повозится сейчас могут взять xorg c http://www.klv.lg.ua/~vadim/xorg-6.9/