Описанное ниже было проведено на компьютере с ОС Debian 8.6 x64, с другими системами работоспособность данного решения не гарантируется, дисплейный менеджер LightDM, окружение рабочего стола XFCE.
Материнская плата Gigabyte GA-P41T-D3P rev 1.5, две видеокарты GeForce GT 430 и GeForce 8500 GT, материнская плата может быть абсолютно любой, главное чтобы была возможность одновременной установки двух видеокарт, видеокарты могут быть также любыми, главное условие, чтобы они могли работать с одной версией драйвера, при использовании двух мощных видеокарт не забываем про мощность блока питания.
Обратите внимание, на то, что в компьютере должно быть установлено 2 видеокарты, на одной двухголовой видеокарте multiseat сделать не получиться, интегрированную в материнскую плату видеокарту в большинстве случаев использовать так же не получится, так как она отключается при подключении к компьютеру другой видеокарты.
И так, начнём:
Для начала Вам нужно установить в компьютер две видеокарты, и к каждой видеокарте подключить по монитору, если у вас в материнской плате несколько разъёмов PCI-E x16 то тут проблем не будет, если у вас в материнской плате только один разъём PCI-E x16 но есть разъёмы PCI-E x1 то подключить её к материнской плате можно через устройство называемое рейзер pci-e 1x-16x, которое можно найти например на алиэкспрессе.
В качестве первой клавиатуры и мыши можно использовать как устройства с портами USB так и с портами PS/2, в качестве второй клавитуры и мыши необходимо использовать устройства с портами USB, не пытайтесь использовать переходники USB > 2 PS/2, с ними желаемый эффект получить не выйдет.
В качестве дисплейного менеджера должен использоваться LightDM, в Debian он используется по-умолчанию.
Если используются видеокарты nvidia то нужно установить проприетарный драйвер, как это делать описывать в этой статье, я думаю, будет лишним.
Далее нужно настроить X на одновременную работу двух мониторов, сделать это можно любым способом, или создав его вручную, или воспользовавшись любой утилитой, если используются видеокарты nvidia то сделать это можно запустив от рута nvidia-settings, для включения второго монитора входим X Server Display Configuration, выбираем второй монитор, в поле Configuration выбираем New X screen, разрешение и частоту лучше выставить в соответствующих полях вручную, в конце настройки не забываем нажать save to X configuration file.
Перезагружаемся, должны работать оба монитора, если так и есть-продолжаем. Делаем резервную копию файла /etc/X11/xorg.conf, после этого открываем его. У меня он был в таком виде:
Section "ServerLayout"
Identifier "Layout0"
Screen 0 "Screen0" 0 0
Screen 1 "Screen1" RightOf "Screen0"
InputDevice "Keyboard0" "CoreKeyboard"
InputDevice "Mouse0" "CorePointer"
Option "Xinerama" "0"
EndSection
Section "Files"
EndSection
Section "InputDevice"
Identifier "Mouse0"
Driver "mouse"
Option "Protocol" "auto"
Option "Device" "/dev/psaux"
Option "Emulate3Buttons" "no"
Option "ZAxisMapping" "4 5"
EndSection
Section "InputDevice"
Identifier "Keyboard0"
Driver "kbd"
EndSection
Section "Monitor"
Identifier "Monitor0"
VendorName "Unknown"
ModelName "LG Electronics W2253"
HorizSync 30.0 - 83.0
VertRefresh 56.0 - 75.0
Option "DPMS"
EndSection
Section "Monitor"
Identifier "Monitor1"
VendorName "Unknown"
ModelName "LG Electronics LG IPS FULLHD"
HorizSync 30.0 - 83.0
VertRefresh 56.0 - 75.0
EndSection
Section "Device"
Identifier "Device0"
Driver "nvidia"
VendorName "NVIDIA Corporation"
BoardName "GeForce GT 430"
BusID "PCI:1:0:0"
EndSection
Section "Device"
Identifier "Device1"
Driver "nvidia"
VendorName "NVIDIA Corporation"
BoardName "GeForce 8500 GT"
BusID "PCI:4:0:0"
EndSection
Section "Screen"
Identifier "Screen0"
Device "Device0"
Monitor "Monitor0"
DefaultDepth 24
Option "Stereo" "0"
Option "metamodes" "DVI-I-1: 1920x1080_60 +0+0"
Option "SLI" "Off"
Option "MultiGPU" "Off"
Option "BaseMosaic" "off"
SubSection "Display"
Depth 24
EndSubSection
EndSection
Section "Screen"
Identifier "Screen1"
Device "Device1"
Monitor "Monitor1"
DefaultDepth 24
Option "Stereo" "0"
Option "metamodes" "DVI-I-1: 1920x1080_60 +0+0"
Option "SLI" "Off"
Option "MultiGPU" "Off"
Option "BaseMosaic" "off"
SubSection "Display"
Depth 24
EndSubSection
EndSection
Убедитесь что у вас по две секции Monitor, Device и Screen, если так то их мы больше не трогаем. Секцию ServerLayout мы удаляем и вместо неё добавляем:
Section "ServerLayout"
Identifier "Layout0"
Screen 0 "Screen0" 0 0
InputDevice "Keyboard0" "CoreKeyboard"
InputDevice "Mouse0" "CorePointer"
Option "Xinerama" "0"
EndSection
Section "ServerLayout"
Identifier "Layout1"
Screen 1 "Screen1" 0 0
InputDevice "Keyboard1" "CoreKeyboard"
InputDevice "Mouse1" "CorePointer"
Option "Xinerama" "0"
EndSection
Удаляем секции InputDevice (их было две), вместо них добавляем 4 секции:
Section "InputDevice"
Identifier "Mouse0"
Driver "mouse"
Option "Protocol" "ImPS/2"
Option "Device" "/dev/input/mouse0"
Option "Protocol" "ExplorerPS/2"
EndSection
Section "InputDevice"
Identifier "Mouse1"
Driver "mouse"
Option "Protocol" "ImPS/2"
Option "Device" "/dev/input/mouse1"
EndSection
Section "InputDevice"
Identifier "Keyboard0"
Driver "evdev"
Option "Device" "/dev/input/by-path/platform-i8042-serio-0-event-kbd"
Option "XkbRules" "xorg"
Option "XkbModel" "evdev"
Option "XkbLayout" "us"
Option "GrabDevice" "yes"
EndSection
Section "InputDevice"
Identifier "Keyboard1"
Driver "evdev"
Option "Device" "/dev/input/by-id/usb-SIGMACH1P_USB_Keykoard-event-kbd"
Option "XkbRules" "xorg"
Option "XkbModel" "evdev"
Option "XkbLayout" "us"
Option "GrabDevice" "yes"
EndSection
В строке Option «Device» каждой секции InputDevice указываем свои устройства, для этого ищем в
/dev/input
/dev/input/by-id
/dev/input/by-path
свои мыши и клавиатуры, мыши вероятнее всего будут /dev/input/mouse0 и /dev/input/mouse1, клавиатуры у всех индивидуально.
После этого в начало файла добавляем секцию
Section "ServerFlags"
Option "DefaultServerLayout" "Layout0"
Option "AllowMouseOpenFail" "true"
Option "AutoAddDevices" "false"
Option "AutoEnableDevices" "false"
Option "AllowEmptyInput" "true"
Option "DontZap" "false"
Option "AutoAddGPU" "false"
Option "DontVTSwitch" "false"
EndSection
Делаем резервную копию файла /etc/lightdm/lightdm.conf, открываем его, после строки:
[LightDM]
Добавляем:
minimum-display-number=0
[SeatDefaults]
xserver-command=/usr/bin/X
user-session=xfce
greeter-session=lightdm-gtk-greeter
exit-on-failure=true
[Seat:0]
xserver-command=/usr/bin/X :0 -sharevts
autologin-guest=false
xserver-layout=Layout0
[Seat:1]
xserver-command=/usr/bin/X :1 -sharevts
autologin-guest=false
xserver-layout=Layout1
Перезагружаемся, пробуем войти в систему, не забывайте что входить необходимо под разными пользователями.
Теперь разберёмся со звуком. Для того чтобы с обоих рабочих мест можно было слушать звук делаем следующее:
Открываем файл /etc/pulse/default.pa, в начало файла добавляем строку:
load-module module-native-protocol-unix auth-anonymous=1 socket=/tmp/my-pulse-socket-name
Открываем файл /etc/pulse/client.conf, в начало файла вставляем строку
default-server = unix:/tmp/my-pulse-socket-name
Создаём файл /root/pulse.sh с следующими строками:
pulseaudio -k
sleep 1
pulseaudio -D
sleep 1
pulseaudio -D —system
Ставим на него права 700. В конец файла /etc/crontab добавляем строку:
@reboot root cd /root && ./pulse.sh
После этой строки обязательно сделайте одну пустую строку. Для управления звуком используем pavucontrol, если его нет то устанавливаем.
Если у Вас две звуковых карты то через pavucontrol можно для каждого приложения выбрать через какое устройство воспроизводить звук, для этого в вкладке «Проигрывание» напротив соответствующего приложения в выпадающем списке выбираем нужную звуковую карту, можно использовать на оба рабочих места одну звуковую карту, в таком случае звук с обоих рабочих мест будет выводиться через одну акустическую систему.
» На всякий случай прикладываю архив с файлами из работающей системы multiseat.zip
Комментарии (27)
mihmig
17.10.2016 16:03+1>>не пытайтесь использовать переходники USB > 2 PS/2, с ними желаемый эффект получить не выйдет.
Почему? Ведь в данном случае такой переходник представляется системе двумя USB-HID устройствами?
alexesDev
17.10.2016 16:08На H81I-PLUS+i3 и самой дешевой Nvidia собирал двухголового. Вроде как можно собрать двухголового и на чистой материнке, но 2 дня мучился, не вышло…
Camel
17.10.2016 16:17Эх, делить ресурсы центрального процессора мы научились, ОЗУ, НЖМД, сеть, тоже всё это делить умеем. А вот видеокарты никак не хотят делиться, только если это не специальные жутко дорогие карты с поддержкой виртуализации. Имея мощный процессор я могу раздать его двум пользователям, а мощную видеокарту не могу. Если я вставил две видеокарты для двух пользователей, один работает, а второй ушёл, то работающий пользователь заберёт все ресурсы процессора, но не второй видеокарты.
Grox
17.10.2016 20:56+1Под Windows разделение работает. Есть Aster, который открывает эти возможности.
p00h
17.10.2016 23:05-1К сожалению, Вы ошибаетесь. никаких возможностей Астер не открывает. Потому что их нет физически. Под линукс давно был патч ядра от Alex Deucher (в написании имени могу ошибаться) ныне разработчика открытых дров ATI, позволяющий превратить одну видеокарту в три устройства, и каждое использовать как отдельную карту. Однако работало это только на одной серии карт, потом же дело забросили.
Grox
18.10.2016 02:12У меня, как на Windows XP, так и на Windows 7 работало разделение видеокарты на двух пользователей. Можно было спокойно играть в 3Д игры друг с другом на одном компе используя одну видеокарту. Или вам какое-то ещё разделение нужно? Астер открывает особые теминальные возможности Windows.
p00h
18.10.2016 11:10К сожалению, это далеко не то, о чем мы говорили выше. Здесь используется возможность драйвера выводить на два разных устройства. И не больше. А мы же говорим о делении мощностей, полной виртуализации. Производительности современных видеокарт (например GT1080 или 290X) хватит, чтобы обеспечить работу десятка пользователей, которые даже смогут играть в 3D. Астер же и все прочие решения, как и указанное мной в предыдущем комментарии, завязаны на аппаратные особенности видео, а также на реализацию драйвера.
Grox
18.10.2016 12:04Здесь используется возможность драйвера выводить на два разных устройства.
Возможно, драйвер выводит на «2» устройства, хотя фактически оно одно.
Но это решает задачу и, как я понимаю, без какого-то оверхеда. Те же виртуалки научились пробрасывать 3Д.
Так а что мешает вам взять Астер, GT1080, посадить 10 пользователей и дать им играть в 3Д? Обычно на 10 пользователей конфиг сложно подобрать, но это максимальное кол-во, которое было реализовано ещё годы назад.
Можете объяснить разницу? Есть решение, оно делает то, что вы хотите. Достигается это фактически средствами ОС у которой подтюнили терминальный режим (о чём есть соответствующие объяснения от автора Астер). Что именно вас не устраивает?p00h
19.10.2016 16:02Десять пользователей не смогут работать на одной видеокарте. Об этом даже русским по белому сказано в мануале. В этом и разница.
Гипервизоры не пробрасывают «3Д», они пробрасывают целое устройство внутрь отдельно взятой виртуальной машины. Устройство. Одно. Вставили Вы в гипервизор ОДНУ видеокарту, сможете запустить ОДНУ виртуальную машину. А хочется, чтобы видеокарта могла дать возможность использовать виртуальные устройство, также, как это делается с ядрами процессора.Grox
19.10.2016 16:17Об этом даже русским по белому сказано в мануале.
Укажите, где это написано, пожалуйста. Беглый поиск не показал ограничений для 10.
Но тут вы столкнётесь просто со сложностью найти такую одну видеокарту, которая позволит подключить 10-12 мониторов. А вот с теми, которые умеют 6 мониторов проблем скорее всего не будет.
Документация для версии до 12 пользователей:
При наличии только одной графической карты и двух или более мониторов, подключенных к ней, эти мониторы можно использовать по-отдельности для запуска дополнительных рабочих мест. Таким образом, несколько рабочих мест могут быть запущены на мониторах, подключенных к одной графической карте.
Из моего личного опыта — для 2х пользователей работает.
Camel
18.10.2016 15:21Grox прав. Если 2 человека одновременно запускают 3D с одной видеокарты, то это вполне multiseat и разделение о котором говорю я. Мне не важно делается это силами драйвера или волшебными муравьями. Мне, правда, важно, чтобы это было в GNU/Linux, но запишем это линуксовым операционкам в минус, что в этом аспекте они отстали от Windows с Астером.
p00h
18.10.2016 11:11-1Поэтому, никаких «особых терминальных возможностей» ни Астер, ни любое другое решение не открывают. Их попросту нет.
pro100_mixa
17.10.2016 16:30Да, делал такое, хотел с одной карты выводить на несколько дисплеев, но не взлетело
Обратите внимание на:
При отключении и включении мыши не в тот порт оно само не запустится
завершение работы остальных юзеров не спросит
elve
17.10.2016 19:33+2Мы в Р-Терминале (сейчас я там уже не работаю) делали себе такие рабочие места еще в далеком 2008-м =). Основной косяк в том, что современный браузер + современные жирные сайты и люди начинают друг другу мешать. Без активного использования интернета вполне пригодная для работы конструкция.
И работало, кстати, на одной видеокарте, а не на двух.
lost55
18.10.2016 04:16Если в секцию Section «Device» вместо BusID прописать Option «ConnectedMonitor» «DFP-1» подсмотрев на каком выходе какой монитор в логах.
то по идее должно работать на одной видеокарте.
А что о пульса — так он где то в настройках включается, кажется в /etc/default/pulseaudio, в прочем это было пару релизов назад в убунте.
Qthulu
18.10.2016 13:29А зачем оно нужно? При копеечной цене тонких терминалов.
alexesDev
18.10.2016 14:46+1Блок на 2 места собирается за 24к (это i3 на двоих). Нормальных тонких клиентов за 12к не купить с такой производительностью.
Grox
19.10.2016 07:09За один системник можно посадить несколько человек. С каждым дополнительным эффективность использования ресурсов будет расти, хотя и некоторые неудобные моменты тоже.
Но сегодня, с относительно доступными SSD и очень доступной оперативной памятью, неудобным будет только соблюдение описанных правил — комп не выключать, мышки/клавиатуры по разъёмам не переставлять, помнить, что ты не один за компом. Ну и с сетевухами в некотором случае, потому что 1 адрес на всех, если с виртуальностью не мутить.
delvin-fil
19.10.2016 14:29Два с половиной года назад я это решил на бубунте. Но я не стал загаживать xorg.conf большим обьемом настроек и для каждого терминала написал свой. Да, в качестве менеджера был LightDM — там свои, специфические настройки.
Если кому надо — могу дать архив.umho
19.10.2016 14:33Для большинства людей будет наиболее полезно, если Вы это решение оформите в виде статьи и выложите в открытый доступ.
daggert
19.10.2016 23:49Плюсую предыдущего комментатора. Оформите пожалуйста в виде статьи, буду очень рад.
delvin-fil
20.10.2016 09:01А оформлять по сути, после этой публикации, уже и нечего. Все изложено в доступной форме. Я опоздал со статьей.
Хотя… В форуме Lubuntu я давал кофиги наверное год назад. Но тогда я не мог писать сюда.
RussianNeuroMancer
19.10.2016 22:29https://wiki.archlinux.org/index.php/xorg_multiseat#Attaching_devices_to_a_seat
Так вроде попроще.
izzholtik
Спасибо, давно хотел нечто подобное попробовать.
А есть какая-то софтина, умеющая быстро создавать и убирать рабочие места без перезагрузки?
elve
ОС перезагружать не надо. Только сервисы. А вот софтины редактирующей конфиги под это дело не видел.