LXF164: Многостаночничать
|
|
|
Многоместные системы Превратите Linux-ПК в многопользовательскую рабочую станцию
Содержание |
Многоместность: 2 головы лучше
Лео Максвелл показывает, как подключить к одному компьютеру несколько мониторов, мышей и клавиатур и осчастливить несколько пользователей.
Ваши дети передрались друг с другом из-за компьютера в гостиной? Счет за электричество заставляет потрясти головой и проверить баланс на банковском счете? Вам помогут многоместные системы. Существуют системы, в которых используется несколько мониторов, а в многоместных системах – несколько клавиатур, мышей, колонок и одновременно работающих пользователей.
Причины выбора таких систем – экономия пространства, денег или хотя бы электроэнергии. В некоторых странах, в том числе в ЮАР и Бразилии, в школах и общественных центрах установлены тысячи таких систем, чтобы доступ к компьютеру и Интернету получало максимальное количество учеников и обычных граждан. Такую систему можно развернуть даже на довольно слабом компьютере.
Для многих задач, таких как просмотр web-страниц, редактирование текста или чтение электронной почты, современный компьютер излишне производителен. Большинство настольных компьютеров, особенно многоядерных, большую часть времени простаивают. Если два человека пользуются одним компьютером, то его энергопотребление будет лишь немного превышать энергопотребление компьютера с одним пользователем и будет существенно ниже энергопотребления двух отдельных компьютеров.
Дома простая двухпользовательская система может быть полезной, если нужен еще один дополнительный компьютер для ребенка, делающего домашнее задание, или для зашедших на время гостей.
Для нашего урока мы использовали компьютер с Ubuntu 12.04 с процессором AMD64 × 2 4200+, 4 ГБ оперативной памяти, встроенной видеокартой Nvidia и внешней видеокартой Nvidia PCIe. Не слишком производительный по современным стандартам, этот компьютер вполне соответствовал поставленной задаче. Мы сознательно взяли более старое «железо», чтобы прояснить все вопросы с разделением задач. С целью основательной проверки мы попросили нескольких добровольцев поработать в обеих системах одновременно.
И мы были приятно удивлены: никаких проблем с производительностью! Два пользователя прекрасно бродили по Интернету, смотрели видео на YouTube, играли в простые игры и выполняли повседневные задачи, такие как обработка текста, без видимых задержек. В этой статье пользователей два, но их число ограничено только количеством видеокарт, которые можно установить в основном компьютере, так как количество доступных USB-портов всегда можно увеличить с помощью хабов.
На современной материнской плате обычно есть один слот PCIe и один или несколько слотов PCI, но есть и материнские платы, которые поддерживают до пяти видеокарт PCIe. Также существуют видеокарты USB.
В идеальном случае многоядерный процессор или процессор с гипертредингом предоставит каждому пользователю по одному ядру или процессу, а дополнительная память пригодится для трехмерных игр или обработки видео. Одного сетевого подключения в 100 Мбит более чем достаточно для нескольких интернет-пользователей.
Подготовка системы
Если что-то пойдет не так, система вполне может оказаться нерабочей. Если вы пользуетесь своим основным компьютером, обязательно создайте резервную копию данных.
Для начала вам понадобятся как минимум две учетных записи пользователя с отдельными домашними каталогами. Это важно, так как два «экземпляра» одного и того же пользователя будут обращаться к одному и тому же каталогу home, что может привести к нестабильности системы и потере данных.
Права администратора должны быть только у одного пользователя, главным образом для того, чтобы избежать некорректного выключения системы и бесконтрольных изменений файлов.
Тщательный выбор устройств поможет сделать работу системы более ровной. Настроить два монитора в Linux нетрудно. Если обоих подключить при установке, есть вероятность, что они будут обнаружены и настроены, но если нет, перед их использованием нужно убедиться, что они будут работать каждый в отдельном сеансе X.
Далее мы опишем этапы создания параллельного сеанса X в многопользовательской системе путем изменения файлов настройки вручную.
Несколько отдельных сеансов
По сути, мы параллельно запустим два отдельных X-сервера. Нужно изменить файл /etc/X11/xorg.conf, создав две отдельных схемы, с монитором, мышью и клавиатурой каждая. Сервер X11 поддерживает несколько сессий, но базовый X-сервер ограничен одной сессией на видеокарту.
На нашем уроке мы пользуемся видеокартами Nvidia и их проприетарными драйверами. Учитывая изобилие возможных конфигураций, мы можем лишь научить вас настройке системы для конкретного «железа». Однако использованные здесь методы можно применить к самым разнообразным ситуациям.
Неплохо будет создать резервную копию /etc/X11/xorg.conf, чтобы в случае сбоя войти в систему с командной строки, по SSH с другого компьютера или с Live CD, и восстановить его, чтобы восстановить систему. Настроив два сеанса, нужно параллельно запустить видеотерминалы с помощью менеджера дисплея.
Первоначально мы настроили только одну схему, закомментировав половину разделов, чтобы убедиться, что у нас два рабочих сеанса.
Проблема современных настольных дистрибутивов – степень их автоматизации. Вам нужно сделать так, чтобы HAL и Udev не добавляли устройства автоматически, иначе все устройства будут работать на всех мониторах, что, мягко говоря, раздражает.
Идентификация устройств
Видеокарты можно определить, набрав команду lspci | grep VGA. Проприетарные драйверы Nvidia позволяют настраивать мониторы с помощью утилиты nvidia-settings. Она также создаст базовую версию xorg.conf с информацией о видеокарте и мониторе. Затем эту версию можно изменить. Драйверы AMD также должны работать.
Для клавиатуры и мыши мы воспользуемся драйвером evdev, который использует такие события, как xxx-event-kbd и xxx-event-mouse. Они находятся в каталоге /dev/input – это файлы вроде mice, mouse0, mouse и т. д. Они привязаны к драйверу мыши и не подходят для нашей задачи, так как могут меняться или быть захвачены событиями клавиатуры или мыши.
В /dev/input также есть пронумерованные события, связанные с событиями в подкаталогах by-id и by-path. Так как это динамические ссылки, устройства, на которые они ссылаются, могут измениться, если они отключаются или если перед загрузкой добавляется другое устройство.
Чтобы еще больше запутать ситуацию, иногда возможны множественные события, у клавиатуры могут быть события мыши, а у мыши – события клавиатуры. Разумеется, у каждого устройства должен быть уникальный идентификатор.
Следующие команды:
ls -R /dev/input
ls -R /dev/input | grep mouse
ls -R /dev/input | grep kbd
выведут список всех событий. Записи в /dev/input/by-id/ удобны, если используются различные модели, так как они остаются постоянными.
Если мыши и клавиатуры одинаковые, то некоторые файлы в by-id могут использоваться совместно, и нужно использовать файлы в каталоге by-path (они изменятся, если подключить устройство к другому порту USB). Пример вывода приведен ниже, корректные значения в нем выделены жирным. Первое – из каталога /dev/input/by-id, а второе – из каталога /dev/input/by-path. Нам нужны записи, которые заканчиваются на -event-mouse или -event-kbd.
$ ls -R /dev/input | grep mouse
mouse1
usb-Logitech_USB_Receiver-event-mouse
usb-Logitech_USB_Receiver-if01-event-mouse
usb-Logitech_USB_Receiver-if01-mouse
usb-Logitech_USB_Receiver-mouse
pci-0000:00:10.0-usb-0:2:1.1-event-mouse
pci-0000:00:10.0-usb-0:2:1.1-mouse
Нужно подчеркнуть, что чем проще и стандартнее «железо», тем проще заставить систему работать. Приведенные ниже спецификации – конфигурация по абсолютному минимуму, но вы удивитесь, как хорошо будут работать дешевые системы.
» Процессор Как минимум P4 2,4 ГГц. В идеальном случае – многоядерный процессор, но это не обязательно.
» Оперативная память 512 МБ. 1 ГБ – для двух нетребовательных пользователей уже много, но чем больше, тем лучше. Рекомендуется добавлять не менее 256 МБ на пользователя.
» Дисковое пространство Минимум – 20 ГБ для двух пользователей, но чем больше, тем лучше.
» Видеокарты Не менее 16 – 32 МБ видеопамяти. По одной видеокарте на пользователя, желательно одинаковые карты одного производителя с одними и теми же драйверами. Вообще говоря, это не обязательно, но так гораздо проще устранять неисправности. Сгодятся даже карты PCI.
» Мониторы Желательно одинаковые или поддерживающие одно и то же разрешение.
» USB-хабы С целью получения лучших результатов для каждого сеанса нужно использовать отдельный хаб. Рекомендуются хабы с внешним питанием, так как некоторые устройства потребляют довольно много энергии.
» Клавиатуры и мыши Любые мыши или клавиатуры с интерфейсом USB, в том числе и беспроводные. Хотя последние помогают уменьшить количество проводов, будьте осторожны, так как беспроводные клавиатуры/мыши могут влиять друг на друга.
» Звук Подойдут звуковые карты или колонки с интерфейсом USB со встроенной звуковой картой. Если включить их в хаб с клавиатурой и мышью, все будет чисто. Единственное, о чем стоит беспокоиться – шум. Если эта конфигурация будет постоянной, вам понадобятся либо длинные кабели, либо наушники для одного или нескольких пользователей.
» USB-брелки, камеры и т. д. По умолчанию устройства USB и Bluetooth будут доступны только первому пользователю, вошедшему в систему. Если это нежелательно, измените конфигурацию policykit.
» Принтеры, сканеры и т. д. Должны подключаться в порты на материнской плате или по сети и быть доступны всем сеансам.
> Один компьютер, два сеанса. Здесь у нас два монитора, две беспроводные клавиатуры и мыши и два набора USB-колонок.
> LibreOffice Writer в стерео! Даже печать работает отлично.
Идентифицировав устройства, добавьте их в файл /etc/X11/xorg.conf. В следующем разделе мы разберем пример этого файла. Информацию об устройствах, разумеется, нужно изменить в соответствии с вашей.
Первый раздел – ServerFlags, в нем находятся настройки по умолчанию для всех серверов. Наиболее важны строки, где отключается автоматическое добавление устройств.
- X configuration file
Section “ServerFlags”
Option “Xinerama” “off”
Option “AutoAddDevices” “off”
Option “AllowEmptyInput” “on”
Option “AllowMouseOpenFail” “on”
Option “DisableModinDev” “on”
Option “DRI” “on”
EndSection
Для каждого сервера вам понадобится раздел ServerLayout с информацией о мониторе и устройствах ввода. Опция SingleCard ограничивает resets одним устройством:
Section “ServerLayout”
Identifier “Layout0”
Screen 0 “Screen0” 0 0
InputDevice “Keyboard0”
InputDevice “Mouse0”
Option “SingleCard” “on”
EndSection
Section “ServerLayout”
Identifier “Layout1”
Screen 0 “Screen1” 0 0
InputDevice “Keyboard1”
InputDevice “Mouse1”
Option “SingleCard” “on”
EndSection
Теперь создайте раздел для каждого устройства ввода. Обычно это мыши и клавиатуры, но возможны и другие устройства, скажем, графические планшеты или сенсорные экраны. Мы использовали два разных набора беспроводных клавиатур/мышей. Опция GrabDevice запрещает другим драйверам доступ к устройству. Раскладку клавиатуры лучше задать в системных настройках Ubuntu, так как они хранятся отдельно для каждого пользователя.
Section “InputDevice”
Identifier “Mouse0”
Driver “evdev”
Option “Device” “/dev/input/by-id/usb-Logitech_USB_Receiver-event-mouse”
Option “GrabDevice” “on”
EndSection
Section “InputDevice”
Identifier “Mouse1”
Driver “evdev”
Option “Device” “/dev/input/by-id/usb-MOSART_Semi._Wireless_Keyboard___Mouse-event-mouse”
Option “GrabDevice” “on”
EndSection
Section “InputDevice”
Identifier “Keyboard0”
Driver “evdev”
Option “Device” “/dev/input/by-id/usb-Logitech_USB_Receiver-event-kbd”
Option “Xkb_Rules” “evdev”
Option “Xkb_Model” “evdev”
Option “GrabDevice” “on”
EndSection
Section “InputDevice”
Identifier “Keyboard1”
Driver “evdev”
Option “Device” “/dev/input/by-id/usb-MOSART_Semi._Wireless_Keyboard___Mouse-event-kbd”
Option “Xkb_Rules” “evdev”
Option “Xkb_Model” “evdev”
Option “GrabDevice” “on”
EndSection
Наконец, укажите мониторы, устройства (видеокарты) и экраны, к которым они подключаются. Мы пользовались двумя 19-дюймовыми мониторами с разрешением 1440 × 900 пикселей – опция DPMS активирует режим пониженного энергопотребления Energy Star:
Section “Monitor”
Identifier “Monitor0”
VendorName “Unknown”
ModelName “Bit 3 Vw19B2”
HorizSync 31.0 - 83.0
VertRefresh 56.0 - 76.0
Option “DPMS”
EndSection
Section “Monitor”
Identifier “Monitor1”
VendorName “Unknown”
ModelName “Acer AL1916W”
HorizSync 31.0 - 84.0
VertRefresh 56.0 - 76.0
Option “DPMS”
EndSection
Оба наших устройства – видеокарты Nvidia, одна на материнской плате, а другая в слоте PCIe.
Файл xorg.conf (расположен в каталоге /etc/X11) запугал немало опытных линуксоидов. Он анализируется при запуске X-сервера, а его синтаксис темен.
Сегодня в большинстве дистрибутивов X-сервер настраивается автоматически, и файла xorg.conf может не быть. Хотя это может приводить к трудно решаемым проблемам, настройка вручную сегодня почти не употребляется. Обстоятельства вроде наших, когда надо сделать нечто необычное – это исключение.
Формат может показаться немного сложным, но лишь из-за его гибкости. Многие примеры из тех, которые можно найти в сети, имеют явные признаки сборки методом копирования и вставки. Люди часто копируют и вставляют фрагменты, забывая убрать ненужное. Скажем, в разделе ServerFlags задаются настройки по умолчанию, но их можно перегрузить в любом другом разделе. Параметры и значения не чувствительны к регистру, порядок разделов не важен, а булевские параметры можно задавать как 0 и 1, “on” и “off”, “true” и “false” или “yes” и “no”. Есть и почти бесконечный набор опций, и не все они хорошо задокументированы. Мелкая опечатка – и все может забастовать, но, по крайней мере, у нас есть хорошие логи.
В наших примерах я постарался быть последовательным и исключил максимально возможное количество «лишних» строк, но если что-то будет работать не так, первым делом загляните в каталог /var/log.
Section “Device”
Identifier “Device0”
Driver “nvidia”
VendorName “NVIDIA Corporation”
BoardName “GeForce 8100 / nForce 720a”
BusID “PCI:2:0:0”
EndSection
Section “Device”
Identifier “Device1”
Driver “nvidia”
VendorName “NVIDIA Corporation”
BoardName “GeForce 8400 GS”
BusID “PCI:3:0:0”
EndSection
Экран – это пара видеокарта–монитор.
Section “Screen”
Identifier “Screen0”
Device “Device0”
Monitor “Monitor0”
DefaultDepth 24
Option “metamodes” “nvidia-auto-select +0+0;1440x900_75 +0+0”
SubSection “Display”
Depth 24
EndSubSection
EndSection
Section “Screen”
Identifier “Screen1”
Device “Device1”
Monitor “Monitor1”
DefaultDepth 24
Option “metamodes” “nvidia-auto-select +0+0;1440x900_75 +0+0”
Как всегда в мире Linux, многоместную систему можно создать разными способами. Можно воспользоваться конфигурацией с двумя мониторами в диспетчере виртуальных машин, таком как VMware или VirtualBox, и запустить два сеанса в виртуальной машине. Видеокарты с двумя выходами можно запустить на вложенных X-серверах на Xephyr, а настроит такую систему скрипт на Python, версию которого для Ubuntu можно загрузить с http://code.google.com/p/multiseat-wizard-bicefalo. Он зависит от пакета xserver-xephyr и работает только с открытыми драйверами по умолчанию. Оба этих варианта более требовательны к ресурсам по сравнению с нашим. Существует коммерческая версия многопользовательской системы под Linux от канадской компании Userful. Она поддерживает до 10 пользователей на компьютер через параллельные сеансы X-сервера и широко используется в Бразилии и других странах. Домашнюю лицензию для двух пользователей можно получить бесплатно, зарегистрировавшись на www.userful.com. Доступны версии системы для нескольких дистрибутивов Linux, но они довольно старые. Последняя поддерживаемая версия Ubuntu на данный момент – 10.04 LTS.
Fedora 17, видимо, поддерживает Zero-clients через systemd. Существуют хабы со встроенными видеоадаптерами и звуковыми картами, подключаемые к компьютеру по Ethernet или USB. Производители модулей включают HP, Acer, Viewsonic и Plugable.
SubSection “Display”
Depth 24
EndSubSection
EndSection
Когда у вас будет рабочий файл xorg.conf (т. е. тот, с которым операционная система загружается без ошибок, при этом будут работать оба монитора, обе мыши и обе клавиатуры), настройте менеджер дисплея. Он позволит пользователям заходить в различные сеансы видеотерминала и распределять между ними доступные устройства.
Да будет LightDM
Для этой статьи мы выбрали менеджер дисплея Ubuntu по умолчанию, LightDM, потому что он поддерживает несколько сессий с различными мониторами и синтаксис его файла настройки довольно прост. Он также поддерживает как KDE, так и Gnome. KDM (менеджер дисплея KDE) тоже поддерживает несколько сессий, но GDM (менеджер дисплея Gnome) – нет. В файле /etc/lightdm/lightdm.conf по умолчанию текста немного, но скоро мы это изменим! Нам нужно создать записи для каждого пользовательского места, указав команды X-сервера и соответствующие схемы.
[LightDM]
seats=Seat:0 Seat:1
[SeatDefaults]
user-session=ubuntu
greeter-session=unity-greeter
[Seat:0]
xserver-layout=Layout0
xserver-command=/usr/bin/X :0 -layout Layout0 -auth /var/run/lightdm/root/:0 -nolisten tcp vt7 -novtswitch
[Seat:1]
xserver-layout=Layout1
xserver-command=/usr/bin/X :1 -layout Layout1 -auth /var/run/lightdm/root/:1 -nolisten tcp vt8 -novtswitch -sharevts
Если у вас есть проблемы с идентификацией устройств, отключайте и заново подключайте их по одному и наблюдайте за выводом команд lsusb и dmesg.
> Octopus против GuruTV. На обоих мониторах You Tube запущен в полноэкранном режиме, и никакого подтормаживания. Все конфликты между пользователями свелись к музыкальным вкусам.
Опция novtswitch запрещает переключение между сессиями, а sharevts позволяет держать открытыми несколько видеотерминалов. Для первого сеанса включать ее не стоит – можно повредить монитор. Если вам нужен автоматический вход в систему, добавьте следующие строки (подставив свое имя пользователя) в каждый раздел:
autologin-user=username
autologin-timeout=0
Это также решает проблему с не отображавшимся полем пароля у некоторых пользователей.
Звук
Звук проще всего настроить для каждого пользователя отдельно, с несколькими звуковыми картами. Для начала добавьте обоих пользователей в группу audio.
После этого каждый пользователь сможет войти в систему и задать настройки звука для своего устройства. При использовании PulseAudio настройки автоматически сохраняются в их файле по умолчанию в /home/username/.pulse. Конечно, если в следующий раз пользователи поменяются местами, звук придется перенастраивать.
Настольный Linux сейчас находится в состоянии активных перемен. Большая автоматизация снижает гибкость, а множественные сеансы могут также повлиять на безопасность. Этот подход может показаться несколько нудным, но зато работает в большинстве дистрибутивов. |