Multiseat aka Горыныч

Многожопь — так можно перевести с английского слово multiseat, обозначающее компьютер, за которым одновременно могут работать несколько человек. Причем не по сети, а сидя за персональными клавиатурами, мышами и мониторами. Когда-то это называлось multihead, но со временем, когда выяснилось, что за компьютером не столько работают и думают, сколько просто сидят и протирают штаны… Впрочем, довольно лингвистических изысканий. Как же изготовить multiseat в среде Linux?



Прежде всего оговорюсь, что в Windows есть какие-то приблуды (как софтовые, так и «железячные»), позволяющие достичь такого эффекта. Но, во-первых, они платные, во-вторых противозаконные, т.к. по виндовой лицензии предполагается, что за компьютером одновременно может работать только один человек (например, при удаленном входе локальный сеанс закрывается). В Xorg-сервере же, используемом в Linux, концепция multiseat закладывалась изначально, равно как и многопользовательский доступ к графическому терминалу по сети. Вот и посчитайте что выгоднее: компьютер на каждого человека + стоимость лицензии, или компьютер, способный обслуживать несколько человек на бесплатном ПО.

О том, как построить multiseat, написано много. Есть даже LiveCD с готовым решением. Но меня всегда вдохновляла вот эта статья. Вдохновляла-то давно, но всё как-то до конца довести не удавалось это дело: то железо попадалось глючное, то видеокатры слишком старые и не стыкуемые с современными мониторами. И вот подвернулся случай: срочно понадобилось несколько дополнительных компьютеров, а денег как всегда в обрез. Убедил начальство попробовать multiseat и, оказывается, на современном железе собрать такого многоголового «горыныча» не так и сложно. Количество мест зависит от числа PCI-Express слотов. В моем случае их два, но кое-кто собирает и 6-головых монстров.

И все-таки тонкости есть. Приведу самые важные фрагменты своего xorg.conf, а потом прокомментирую.

Section "ServerLayout"
	Identifier     "X0"
	Screen      0  "Screen0" 0 0
	InputDevice    "Mouse0" "CorePointer0"
	InputDevice    "Keyboard0" "CoreKeyboard0"
EndSection

Section "ServerLayout"
	Identifier     "X1"
	Screen      0  "Screen1" 0 0
	InputDevice    "Mouse1" "CorePointer1"
	InputDevice    "Keyboard1" "CoreKeyboard1"
EndSection

... 

Section "InputDevice"
	Identifier  "Keyboard0"
	Driver      "evdev"
	Option	    "Device" "/dev/input/event1"
EndSection

Section "InputDevice"
	Identifier  "Keyboard1"
	Driver      "evdev"
	Option	    "Device" "/dev/input/event5"
EndSection

Section "InputDevice"
	Identifier  "Mouse0"
	Driver      "evdev"
	Option	    "Pevdevol" "auto"
	Option	    "Device" "/dev/input/event4"
	Option	    "ZAxisMapping" "4 5 6 7"
EndSection

Section "InputDevice"
	Identifier  "Mouse1"
	Driver      "evdev"
	Option	    "Pevdevol" "auto"
	Option	    "Device" "/dev/input/event7"
	Option	    "ZAxisMapping" "4 5 6 7"
EndSection

...

Section "Device"
	Identifier  "Card0"
	Driver      "nvidia"
	BusID       "PCI:1:0:0"
EndSection

Section "Device"
	Identifier  "Card1"
	Driver      "nvidia"
	BusID       "PCI:6:0:0"
EndSection

...


Вообще-то такой файл можно сгенерировать командой (от рута)

xorgsetup


Но кое что, всё-таки, нужно поправить. Драйвера клавиатур и мышей прописать строго как evdev, а не kbd и mouse. Иначе все мыши и клавиатуры будут работать на всех экранах. Во-вторых, автоматически сгенерированный конфиг будет содержать настройку, при которой один экран будет служить продолжением другого. Тоже прикольно, но нам нужно, чтобы каждый пользователь работал за своим персональным рабочим местом, поэтому лишние строчки в каждом ServerLayout'е нужно убрать. В-третьих, вам нужно выяснить какие устройства в каталоге /dev/input соответствуют клавиатурам и мышам и вписать их в соответствующие строчки секций InputDevice. То же самое с адресами видеокарт вида PCI: X: X: X. Их нужно выяснить с помощью утилиты lspci.

Еще одна вещь, до которой не так просто догадаться — нужно выключить демон hald, в моем дистрибутиве так:

sudo chmod -x /etc/rc.d/rc.hald


Последние версии Xorg-сервера работают уже без hald, и вообще это рудимент, рулит udev. А вот при включенном hald мыши и клавы будут воздействовать на все рабочие места одновременно.

Ну и в конфиг gdm (/etc/gdm/custom.conf) нужно дописать примерно такое:

[servers]
0=Seat0
1=Seat1

[server-Seat0]
name=Seat 0
command=/usr/bin/X -novtswitch -sharevts -nolisten tcp -layout X0 :0
flexible=true

[server-Seat1]
name=Seat 1
command=/usr/bin/X -novtswitch -sharevts -nolisten tcp -layout X1 :1
flexible=true


Вот, в общем-то, и всё.

Никто не мешает запускать в такой системе несколько копий Windows в виртуальных машинах . Тоже, конечно, противозаконно, но как-то более «беспалевно», как сейчас говорят. Но мне multiseat нравится не этим, а высоким КПД: когда за компьютером работает несколько человек, его ресурсы расходуются более рационально. Если для кого-то экологичность не аргумент, то могу привести другой: в помещении становится не так шумно и душно.

ЗЫ. Спасибо ребятам из магазина «Позитроника» за то, что помогли устранить мелкие неисправности, допущенные мной в процессе сборки.

Комментарии (6)

RSS свернуть / развернуть
+
0
Неплохо, неплохо. Только, наверное, зря такая экономия, не нужно баловать.
avatar

Sergei_T

  • 20 сентября 2011, 10:48
+
+1
Кто-то из крупных физиков, отвечая на вопрос, что такое наука, определил ее как возможность любознательного индивида удовлетво­рить свое частное любопытство за общественный счет.



А если серьезно, то обслуживать легче. Плюс мне, как преподавателю, выгодно, чтобы в этой не слишком просторной аудитории стало менее шумно и менее душно.
avatar

yababay

  • 20 сентября 2011, 11:23
+
0
Ну если только так. Но завтра тебе нужны будут отдельные нормальные компьютеры — тебе скажут — а давайте 10 мониторов подключим к одному системному блоку. Я сейчас становлюсь сторонником покупки лицензий и прочего. Труд не ценится, ценятся лицензии, материальные активы и прочее.
avatar

Sergei_T

  • 20 сентября 2011, 11:33
+
0
Ага, на работе меня встретили словами «Почему так дорого?!» (2 рабочих места за 10 тыс. руб.) .
avatar

yababay

  • 20 сентября 2011, 13:29
+
0
Один им скажет сколько это реально стоит, другой, может и дойдет, наконец.

У нас тут людей «не устраивает zimbra», типа нет кнопки «пыщ», которая все сделает и нужна «ЕДИНАЯ СИСТЕМА» (TM) для записи клиентов. В итоге посчитали сколько стоит заказная разработка, сразу всех все устраивать начало. Пиз%ец, все думают что можно пойти в магазин и купить такие вещи чиста тыщи за 2.
avatar

Sergei_T

  • 20 сентября 2011, 13:40
+
-1
avatar

Sergei_T

  • 20 сентября 2011, 13:42

Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.