Два рабочих места из одного компьютера на Linux Gentoo

На сегодняшний день наличие двух и более компьютеров в семье уже считается нормой, иначе скандалов не избежать. И моя семья не исключение. У нас уже давно дома множество компьютеров различного назначения. Из основных рабочих станций: у жены свой компьютер, у меня свой. Жене компьютер нужен не очень часто и только когда появляется возможность немного отойти от ребенка. Ждать пока загрузится времени не много поэтому все время ее комп стоял включеный. Я решил сделать немного по другому раз уж мой компьютер и так всегда включен и выполняет огромное несколько задач вроде видеорегистрации, выкачивания файлов итп.

По другому - это значит что берем один мой компьютер и подключаем в него два монитора, две мыши, две клавиатуры. Вуаля! Один компьютер - два полноценных и равнозначных рабочих места. Звука и вебкамеры нам достаточно одного комплекта на двоих, хотя и эта проблема решается при желании.

Операционная система
Я давно не в курсе тенденций все еще мейнстримовой винды поэтому все, о чем пойдет дальше речь касается исключительно Linux, моей любимой системы Linux Gentoo. Такого двухголового змея из компьютера можно сделать и без KDM (K Desktop Manager), но с ним все становится просто как два пальца об асфальт. Кто не является продвинутым пользователем линукса может даже дальше не читать, интересно не будет потому что дальше я раскажу что понадобится для такой схемы и в подробностях как я это сделал. Хотя бы для того, чтоб самому иметь возможность повторить то же самое без перекапывания интернетов.

Вот что получилось в результате подключения двух мониторов, двух мышей и двух клав к одному компьютеру

Рабочая станция seat0

Рабочая станция seat1

Обе головы двуглавого змия

Оборудование
Из оборудования подойдут любые мыши и клавиатуры, но имейте в ввиду что больше чем одну PS/2 мышь и одну PS/2 клавиатуру не получится подключить. Поэтому как минимум один комплект мыши и клавиатуры понадобится USB.

У меня для того чтоб дотянуть провода до одной головы пришлось использовать удлинитель монитора и удлинитель USB. Поэтому перед походом в магазин хорошо подумайте сколько удлинителей USB и мониторов, USB хабов понадобится.

С видеокартами вышел небольшой конфуз. Я использовал одну интегрированную на материнскую плату, другую внешнюю. Интегрированная ATI Radeon HD3000, внешняя NVidia GeForce 8500GT. Так вот первая проблема, что с двумя столь разношерстными видеокартами использовать OpenGL не получится ибо через eselect надо выбрать используемую систему аппаратного ускорения. Что фактически делает eselect - просто переключает симлинки /usr/lib64/libGL на выбранную библиотеку. Например для nvidia:
/usr/lib64/libGL.so -> opengl/nvidia/lib/libGL.so.256.53

Для xorg-x11:
/usr/lib64/libGL.so -> opengl/xorg-x11/lib/libGL.so.1.2

Раз уж мы не можем указать один симлинк на две библиотеки одновременно, то использовать одновременно различные видеокарты не получится. Поэтому вам настойчиво советую брать видеокарты одного производителя. Причем не ATI :)

У меня имелась Radeon X300, которую я решил использовать в качестве внешней видеокарты. Через проприетарный ati-drivers (fglrx) два монитора у меня не завелись, хотя один заработавший монитор/видеокарта давали вполне нормальный фреймрейт в играх. С огромным трудом получилось заставить работать обе карты с поддержкой директ рендеринга через драйвер xf86-video-ati (radeon). Отличная документация как настроить аппаратное ускорение на видеокартах от ATI:
http://en.gentoo-wiki.com/wiki/Radeon

Я сделал точно как описано в этом руководстве, пересобрав ядро раз пять чтоб заставить работать сначала одну видеокарту (древний Radeon X300), а потом другую (встроенную на материнку Radeon HD3000). Производительность радеонов расстроила. Direct Renderind Manager завелся и в этом можно убедиться вот таким образом:
$ glxinfo | grep render
direct rendering: Yes
OpenGL renderer string: Mesa DRI R600 (RS780 9616) 20090101 TCL DRI2

Но даже с аппаратным ускорением FPS на glxgears около 60. Как это выглядит в играх можно посмотреть на видео внизу. Возможно тюнинг придал бы джазу, но я и без тюнинга провел с этими двумя ATI видеокартами времени чуть больше чем дофига. Поэтому настойчиво рекомендую использовать Nvidia, которые заводятся с двух слов: emerge nvidia-drivers.

Сразу предупреждаю, что затестить две карточки Nvidia на одном компьютере пока еще не выдалось возможности. Заменю материнку на какой то GeForce и проверю.

Настройки для двух видеокарт на одном компьютере в общем то не отличаются за исключением того, что для каждой видеокарты настраиваются свои секции Device для Card0 и для Card1.

Память и процессор уже сами думайте какие нужны исходя из поставленых задач. Для интернета и скайпа хватит ресурсов обычного домашнего компьютера, а для игр сколько не бери - все равно будет мало.

Настройка
Следующие настройки потребуют либо понимания как устроен файл конфигурации X.Org /etc/X11/xorg.conf либо времени, чтоб с ним разобраться.
Файл xorg.conf разбит на секции, каждая из которых предназначена для своих определенных настроек. В нашей конфигурации мы должны изменить xorg.conf таким образом, чтоб следущих секций стало по две и каждая отвечала за привязанную к ней мышь, клавиатуру, видеокарту, и монитор для создания двух рабочих мест на одном системном блоке:
Monitor - секция, описывающая монитор
Device - секция, описывающая видеокарту
Screen - секция которая отвечает за видеовывод и ассоцииируется с привязанным к ней монитором Monitor и видеокартой Device.
ServerLayout - секция, которая определяет рабочее место и какие вышеописанные секции к нему относятся: Screen, Monitor, InputDevice с описанием мыши, InputDevice с описанием клавиатуры.

Итак, нам надо определить два рабочих места (при желании, можно и больше конечно). Для этого описываем две секции ServerLayout с названиями seat0 и seat1:

Section "ServerLayout"
Identifier "seat0"
Screen 0 "Screen0" 0 0
InputDevice "Mouse0" "CorePointer"
InputDevice "Keyboard0" "CoreKeyboard"
Option "AutoAddDevices" "off"
EndSection
Section "ServerLayout"
Identifier "seat1"
Screen 1 "Screen1" 0 0
InputDevice "Mouse1" "CorePointer"
InputDevice "Keyboard1" "CoreKeyboard"
Option "AutoAddDevices" "off"
EndSection

Далее дублируете из вашего родного конфига секции описывающие скрин, мышь, клавиатуру и называете Screen0, Mouse0, Keyboard0 и т.д. по возрастанию номера рабочего места

Настройка клавиатуры и мыши
Опция AutoAddDevices отключена для того, чтоб ваш двуглавый компьютер не пытался использовать без четких указаний клавиатуру и мышь. Если это не выключить, будут смешаны выводы всех клавиатур и мышей. Взамен отключенной опции нам придется повозиться чтоб выяснить какая клавиатура и мышь будут относиться к какому рабочему месту. Для этого открываем файл /proc/bus/input/devices
Так мы видим все определенные системой устройства и в строчке начинающейся на "S:" смотрим на каком input висит каждое устройство. Возможно прийдется немного погадать и в случае неудачи возможны блокировки как мыши, так и клавиатуры. Поэтому, гадать лучше подключившись к системе через ssh чтоб не перегружать всю систему, а только убивать иксы.

Ваши иксы должны работать через evdev драйвер. Чтоб проверить какая конкретно мышь или клавиатура подключены на какой input, можно запустить команду:
cat /dev/input/mouse0

Создаем две секции для клавиатур:

Section "InputDevice"
Identifier "keyboard0"
Driver "evdev"
Option "Device" "/dev/input/event1" # обязательно не забыть проверить через /proc/bus/input/devices
Option "XkbModel" "evdev"
Option "XkbLayout" "en"
EndSection

Создаем две секции для мышей:

Section "InputDevice"
Identifier "mouse0"
Driver "mouse"
Option "Protocol" "IMPS/2"
Option "Device" "/dev/input/mouse2" # тоже проверить и заменить
EndSection

В xorg.conf нужно добавить еще одну секцию

Section "ServerFlags"
Option "AllowMouseOpenFail" "true"
Option "Xinerama" "0"
EndSection

AllowMouseOpenFail позволит загрузиться иксам даже если мышь отключилась или перепрыгнула на другой input.
Xinerama используется для создания одного виртуального десктопа из нескольких мониторов, а это совсем не то что нам надо сейчас.

Настройка видеокарты


Section "Device"
Identifier "nvidia0"
Driver "nvidia"
Option "NoLogo" "1" # Remove nvidia branding at startup
BusId "PCI:1:0:0"
EndSection

Чтоб узнать BusID используйте команду lspci | grep VGA:

# lspci | grep VGA
01:05.0 VGA compatible controller: ATI Technologies Inc 760G [Radeon 3000]
...

Эта строка говорит что видеокарта Radeon висит на BusID PCI:1:5:0

Таким же образом настраиваем под каждое рабочее место в двух экземплярах секции Monitor и Screen
Когда настройка xorg.conf закончена проверяем каждое рабочее место командой и убеждаемся, чтоб физические устройства относились к нужному нам рабочему месту:
startx -- -layout seat0
startx -- -layout seat1

В случае ошибок ковыряем логи /var/log/Xorg.0.log и /var/log/Xorg.1.log
Когда все будет настроено верно, движемся дальше. Надо объяснить KDM что теперь у нас два рабочих места и что теперь надо запускать две копии иксов.
Для каждого рабочего места создадим симлинки чтоб несложно было убивать по отдельности иксы
# cd /usr/bin
# ln -s X X0
# ln -s X X1

В /usr/share/config/kdm/kdmrc исправляем следующие ключи, чтоб получилось вот так:

[General]
ConsoleTTYs=tty1,tty2,tty3,tty4,tty5,tty6
ServerVTs=7,8
StaticServers=:0,:1
ReserveServers=:2,:3
...

[X-:0-Core]
ServerVT=8
ServerCmd=/usr/bin/X1
ServerArgsLocal=-nolisten tcp -sharevts -novtswitch -keeptty -layout Seat1 -isolateDevice PCI:1:0:0

[X-:1-Core]
ServerVT=7
ServerCmd=/usr/bin/X0
ServerArgsLocal=-nolisten tcp -novtswitch -keeptty -layout Seat0 -isolateDevice PCI:0:2:0
...

Не забываем в параметре isolateDevice вписать ваши BusID видеокарт и если меняете BusID в xorg.conf, то изменить нужно в этом файле тоже. Можно стартовать kdm

Теперь при старте службы /etc/init.d/xdm (в конфиге которого /etc/conf.d/xdm выбран DISPLAYMANAGER=kdm ) каждое рабочее место получит свой kdm с запросом логина. В процессах можно увидеть висящие X0 и X1, каждый из которых отвечает за свое рабочее место.

Ниже привожу свой конфиг, который в большинстве случаев можно просто подредактировать изменив драйвера видеокарты и input для клавы и мыши.

Section "Files"
	ModulePath   "/usr/lib64/xorg/modules"
	FontPath     "/usr/share/fonts/misc/"
	FontPath     "/usr/share/fonts/TTF/"
	FontPath     "/usr/share/fonts/OTF"
	FontPath     "/usr/share/fonts/Type1/"
	FontPath     "/usr/share/fonts/100dpi/"
	FontPath     "/usr/share/fonts/75dpi/"
EndSection

Section "Module"
	Load  "glx"
	Load  "extmod"
	Load  "record"
	Load  "dbe"
	Load  "dri"
EndSection

Section "ServerLayout"
        Identifier     "seat0"
        Screen         0  "Screen0" 0 0
        InputDevice    "Mouse0" "CorePointer"
        InputDevice    "Keyboard0" "CoreKeyboard"
        Option          "AutoAddDevices"        "off"
EndSection

Section "InputDevice"
        Identifier  "Keyboard0"
        Driver      "evdev"
        Option      "Device" "/dev/input/event5"    ### event device according to /proc/bus/input/devices
        Option      "XkbModel" "evdev"
        Option      "XkbLayout" "us"
EndSection

Section "InputDevice"
        Identifier  "Mouse0"
        Driver      "mouse"
        Option      "Protocol" "IMPS/2"
        Option      "Device" "/dev/input/mouse1"   ### mouse device according to /proc/bus/input/devices
        Option      "ZAxisMapping" "4 5" 
EndSection

Section "Screen"
        Identifier "Screen0"
        Device     "Videocard0"
        Monitor    "Monitor0"
        DefaultDepth     24
	SubSection "Display"
		Viewport   0 0
		Depth     1
	EndSubSection
	SubSection "Display"
		Viewport   0 0
		Depth     4
	EndSubSection
	SubSection "Display"
		Viewport   0 0
		Depth     8
	EndSubSection
	SubSection "Display"
		Viewport   0 0
		Depth     15
	EndSubSection
	SubSection "Display"
		Viewport   0 0
		Depth     16
	EndSubSection
	SubSection "Display"
		Viewport   0 0
		Depth     24
	EndSubSection
EndSection

Section "Device"
	Identifier  "Videocard0"
	Driver      "nvidia"
	VendorName  "nVidia Corporation"
	BoardName   "G86 [GeForce 8500 GT]"
	BusID       "PCI:2:0:0"
EndSection

Section "Monitor"
        Identifier   "Monitor0"
        Option      "dpms"
EndSection



Section "ServerLayout"
        Identifier     "seat1"
        Screen         1  "Screen1" 0 0
        InputDevice    "Mouse1" "CorePointer"
        InputDevice    "Keyboard1" "CoreKeyboard"
        Option          "AutoAddDevices"        "off"
EndSection

Section "InputDevice"
        Identifier  "Keyboard1"
        Driver      "evdev"
        Option      "Device" "/dev/input/event2"    ### event device according to /proc/bus/input/devices
        Option      "XkbModel" "evdev"
        Option      "XkbLayout" "us"
EndSection

Section "InputDevice"
        Identifier  "Mouse1"
        Driver      "mouse"
        Option      "Protocol" "IMPS/2"
        Option      "Device" "/dev/input/mouse0"   ### mouse device according to /proc/bus/input/devices
        Option      "ZAxisMapping" "4 5"  
EndSection


Section "Screen"
        Identifier "Screen1"
        Device     "Videocard1"
        Monitor    "Monitor1"
        DefaultDepth     24

	SubSection "Display"
		Viewport   0 0
		Depth     24
	EndSubSection

EndSection

Section "Device"
	Identifier  "Videocard1"
	Driver      "radeon"
	BoardName   "ATI Radeon"
	BusID      "PCI:1:5:0"
        Option "UseInternalAGPGART" "no"
        Option "VideoOverlay"       "on"

EndSection

Section "Monitor"
        Identifier   "Monitor1"
        Option      "dpms"
EndSection



Section "ServerFlags"
        # Xorg will otherwise not start if it can't find a mouse to use.
        Option  "AllowMouseOpenFail"    "true"
        # Disable xinerama
        Option  "Xinerama"      "0"
EndSection


 Section "DRI"
    Mode 0666
 EndSection

На следующем видео я хотел показать top на ноутбуке, подключившись через SSH, но даже на HD-качестве очень плохо видно сколько потребляют процессы hl.exe и flatout.exe. Процессор не грузится на 100%. Фреймрейт расстраивает. Даже для таких слабых видеокарт это не нормально.

Видеокарты NVidia дают с проприетарными дровами гораздо большую производительность. Запустив Flatout на NVidia в конфигурации одна видеокарта встроенная Radeon HD3000, вторая Nvidia GeForce 8500GT вполне можно комфортно одновременно играть, а за второй рабочей станцией пользоваться интернетом.

Комментарии

Два рабочих места из одного компьютера на Linux Gentoo

на самом деле позновательно.

но сейчас проще купить pico itx - есть на атоме.

учитывая, что порт линукса на arm в достаточно неплохом состоянии проще купить платку на тегре 2 GHz и не жужжать.

http://www.rtsoft.ru/catalog/int/odnoplat/picoitx/

Причем тут атом, если

Причем тут атом, если описывается совсем другая задача.

Одна видюха

Что то тяжело здесь добавить комментарий, но помогает открытие в новой вкладке. А можно сделать подобное с одной видюхой используя несколько ее выходов?

У меня не получилось.

У меня не получилось. Графический ускоритель то один, значит и игра только одна может запуститься.

Да меня больше интересует

Да меня больше интересует тупо вывод изображения. И еще есть возможность распределить оперативную память и ядра процессора? Мне эта тема покоя не дает, хочу довершить начатое :). Еще копаю насчет терминального сервера. Какой самый нормальный под линукс? Мозги болят уже искать, как-то все неоднозначно.

Если столько требований, тут

xorg server дает серьезные возможности для того, чтоб подключить несколько мониторов. Если столько требований, тут лучше виртуальные машины уже использовать.

Блин, поздно я

Блин, поздно я прочел... а так уже взял второй системник. Хотя.. может на работе применить - можно нехило приэкономить на закупке системников)

>FPS на glxgears

>FPS на glxgears около 60
С недавнего времени FPS на glxgears равен частоте обновления монитора.

:))))

:))))

Группа video

$ id | grep video
?

sudo usermod -a -G video <юзер>
На всякий случай, вдруг кто не знает)

да, решение,

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

А подскажите,

А подскажите, как можно перебросить открытое окно с одного монитора на другой?

Никак. Для того

Никак. Для того чтоб перетягивать окна таким образом надо настроить совсем по другой схеме через xinerama. Это сделать намного проще и делается даже с одной видеокартой имеющей два видеовыхода.

другой вариант организации

А мы с женой решили немного по-другому решили организовать два рабочих места.
У нас еще была необходимость в наличии винды. А на основной машине у нас debian.
В основном компе видюха с выходами под два моника. Один моник старый 19' d-sub, а второй недавно купили 24'. И в нём есть два разъёма (dvi и d-sub). Причем в него можно сразу два провода тыкнуть и переключать сигналы кнопкой на самом монике.
Мы взяли второй комп, куда поставили серверную винду (выбор стоял за серверной дабы иметь возможность устанавливать несколько подключений к удалённому рабочему столу). Именно винда нам нужна была для учебы и для photoshop для жены.
Провод от компа с виндой тыкнули тоже в моник, который с двумя входами. И в этот комп с виндой тыкнута всегда клавиатура с мышкой и лежат в сторонке.

Таким образом имеем следующие варианты применения:
1. один смотрит фильм fullscreen на одном монике, а второй на втором монике работает.
2. нужна винда - открываешь rdesktop в fullscreen mode и можешь рабоать сразу в двух системах
3. обоим нужен комп - на монике нажимаешь кнопочку и переключаешь его на винду.

А вобще как правило мы всё же пользуемся по-очереди (на крайняк если второму надо посёрфить или почитать что-то, то еще есть ноут и читалка). И мне очень нравится работать на двух мониках. Всё-таки два моника у компа рулят =)

top

Для наглядности попробуйте использовать не top, а htop.

Multiseat с двумя катрочками Radeon

Довольно давно пользуюсь такой конфигурацией. Очень стабильно, работает 2d/3d ускорение. Из нюансов -- такая настройка возможно только через KMS и открытый драйвер radeon. Соответственно я на данный момент ограничен использованием OpenGL версии 2.1.

Если интересно могу скинуть конфиги и рассказать подробности настройки

Ну было бы

Ну было бы неплохо иметь допольнительную информацию. например, единственное что меня расстраивает в моей конфигурации - это слабая производительность опенсурсных дров для радеона по сравнению с тем что я получал от проприетарщины.

NVidia и AMD

Если Ваша мать/BIOS позволяют одновременно работать встроенной и видяхам, то проблема с libGL элементарно решается установкой разных переменных окружения LD_PATH для разных пользователей.

Можно, кстати, и симлинки сделать разные для разных пользователей.

Хм... тересная

Хм... тересная затея, но уже не буду заниматься эитм. Поставил два радеона которые жутко тормозякают на xorg-x11 дровах. Не знаю в чем причина тормозов - в отличие от проприетарных драйверов от ATI на опенсурсных намного медленее работает.

Боцманы, все на

Боцманы, все на палубу !!!

сам боцман

сам боцман

Боцман

Боцман

Гонки ощутимо

Гонки ощутимо тормозят, а контра вроде ничего так работает.

Поделитесь этой страницей



0
0
0
0
0
0
0
0

0

Комментарии ВКонтакте