Несколько рабочих станций на одном системнике (Linux)

  • user warning: Table './c6internetclub/sessions' is marked as crashed and should be repaired query: SELECT COUNT(sid) AS count FROM sessions WHERE timestamp >= 1542061224 AND uid = 0 in /mnt/www/internet-club.info/web/includes/session.inc on line 157.
  • user warning: Table './c6internetclub/sessions' is marked as crashed and should be repaired query: SELECT COUNT(DISTINCT s.uid) FROM sessions s WHERE s.timestamp >= 1542061224 AND s.uid > 0 in /mnt/www/internet-club.info/web/modules/user/user.module on line 808.

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

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

Операционная система
Я давно не в курсе тенденций все еще мейнстримовой винды поэтому все, о чем пойдет дальше речь касается исключительно 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 вполне можно комфортно одновременно играть, а за второй рабочей станцией пользоваться интернетом.

Отсюда: http://newmoldova.com/?q=node/463

Flatout тормозит

Flatout тормозит безбожно, а с ноутом ничего не ясн...

Это проблема с

Это проблема с радеоном. Я заменил железо на NVIdia и вполне комфортно можно играть в две игры.
На ноуте видно нагрузку процессора если переключить видео в HD