International conference of developers
and users of free / open source software

Играем взводом или MultiSeat в Linux

Denis Pynkin, Minsk, EPAM Systems

LVEE 2013

Modern Linux-based distributions are extremely flexible and configurable, so a number of different approaches available on how to setup and use MultiSeat feature. The main idea is to share desktop computer among multiple family members without additional cost and to have a possibility to work or play for some people in the same time.

Linux – современная игровая платформа

За последний год произошло множество изменений и громких анонсов, которые позволяют утверждать, что ОС Linux всерьез рассматривается в качестве платформы для запуска современных игровых продуктов. В проекте Humble Bundle часто фигурируют игры с поддержкой Linux; новые проекты Kickstarter собирают необходимые суммы на разработку полноценных версий игр для Linux; Valve не только заявила об официальной поддержке, но и создает игровую консоль на базе ОС Linux. Не стоит забывать о проекте Wine и его интерфейсов управления, таких как PlayOnLinux – множество программ рассчитанных на работу в альтернативных коммерческих ОС зачастую работают не хуже при запуске с помощью Wine, особенно это касается «устаревших» программ. Ну и наконец, нельзя обойти стороной такое явление, как MMO - многопользовательские онлайн игры, в частности World of Tanks и War Thunder, благодаря которым появилась данная статья.

Домашний компьютер – поле боя за машинные ресурсы

По мере взросления дети начинают играть в те же игры, что и родители. Первые тревожные звоночки появляются со словами: "Папа, моя очередь играть в танчики", где вместо “танчиков” может быть любая другая требовательная к 3D игра. Наличие персональных ноутбуков не решает проблемы разделения игровых ресурсов – ведь многие мобильные устройства не обладают должной производительностью. Покупка отдельного игрового компьютера – сомнительное и сравнительно дорогое удовольствие, не говоря уж об увеличении количества проводов в квартире. Решением может быть использование Linux системы в режиме MultiSeat (часто встречается, как “Змей Горыныч” в русскоязычных источниках): система с одним системным блоком и несколькими комплектами устройств ввода-вывода - монитор-видеокарта-клавиатура-мышь. Кроме того такая конфигурация может использоваться и в более классическом режиме для организации одного рабочего места с несколькими мониторами. 5Image multiseat В качестве экпериментального стенда использовался далеко не новый компьютер на базе AMD Phenom 8450 с 4 GB оперативной памяти и 2-мя видеокартами на базе NVidia (GTX 650 и GT 440).

Технологии и конфигурации

В отличие от некоторых коммерческих операционных систем, графический сервер Xorg и его производные отлично приспособлены для работы в многоместном режиме. Поэтому главная задача – это запустить несколько экземпляров Xorg и не запутаться при этом, с каким из них необходимо ассоциировать устройства ввода. Как показали эксперименты, для игр на базе Wine удобно использовать PlayOnLinux, который запускается вместо Window Manager сразу после графического входа – это упрощает запуск для неопытных пользователей. Наиболее оптимально для этого завести специальный “игровой” логин в системе. Кроме того в этом случае зачастую можно использовать один и тот же экземпляр игры, но в разных окружениях-контейнерах, что сэкономит десятки гигабайт дискового пространства и увеличит эффективность работы дискового кэша. Еще одна проблема совершенно неожиданного свойства – зачастую программы запускаемые в wine неоптимально используют ресурсы процессора. На самом деле в ряде экспериментов две игры использовали одно ядро из трех доступных, совершенно игнорируя оставшиеся ядра процессора. Такое поведение напомнило, что при совместном использовании одной системы нужно делиться ресурсами, ну а раз самостоятельно программы не уживаются, то можно это сделать насильно, при помощи механизма Control Groups ядра Linux и cpuset в частности.

Xorg и Display Manager

Задача этой пары – правильный запуск графического сервера. В первую очередь необходимо создать конфигурации рабочих мест, для чего используется различные конфигурации “ServerLayout”, для каждого из которых назначается в эксклюзивном режиме одна видеокарта, а в секции “Device” указывается конкретное устройство с помощью “BusID”, а опцией “ProbeAllGpus” отключается автоматический поиск других GPU. Со стороны DM необходимо указать какому рабочему месту соответствует текущий графический сервер, например в KDM для этого в секции [X-:0-Core] (для :0) достаточно добавить имя конфигурации с использованием опции -layout в командной строке вызова графического сервера. Еще однин вариант работы X сервера – мультидисплейный в режиме xinerama, когда к каждому выходу видеокарты подключен монитор, а X сервер формирует общую картинку.

Устройства ввода

По умолчанию все устройства ввода, такие как мышь и клавиатура, назначаются всем графическим серверам одновременно. Поэтому в первую очередь необходимо правильно назначить соответствующую пару. Сделать это можно с помощью механизма фильтрации устройств ввода в секции “InputClass”, опять-таки различными способами:

* добавления тэга в правилах udev для устройства и подключения только к соответствующему графическому серверу;
* добавить устройства не относящиеся к данному серверу в список игнориуемых.

Так как устройства ввода ассоциированы с соответствующим X сервером, а точнее “ServerLayout”, то в режиме xinerama нет возможности организовать отдельное рабочее место для каждого монитора.

Xephyr

Xephyr [65] – это специальный X сервер, работающий в окне уже существующего X сервера. Соответственно, если на одной видеокарте запустить X сервер в режиме xinerama, а затем поверх запустить Xephyr по числу сконфигурированных выходов, то можно получить многопользовательскую систему даже с помощью одной видеокарты. С ограничениями и без 3D поддержки, что на первый взгляд делает его бесполезным для данной статьи.

VirtualGL

Проект VirtualGL [74] выступает в роли своеобразного прокси для потоков команд OpenGL. Работает как по сети, так и в локальном режиме, позволяя программам совместно использовать ресурсы одного GPU. В свою очередь запуск программ в Xephyr с использованием VirtualGL позволяет организовать столько рабочих мест с аппаратной поддержкой 3D, сколько существует аппаратных видеовыходов в компьютере! Так с использованием компьютерной системы, описанной выше, теоретически можно организовать 6 рабочих мест, но на практике проверялись только 4 – в доме просто не оказалось достаточного количества мониторов, клавиатур и мышей для проверки.

Звуковая подсистема

В случае игр зачастую достаточно использования звукового сервера в режиме смешивания и вывода звука через одно устройство. Однако при наличии дополнительных звуковых карт, а современные видеокарты с поддержкой HDMI рассматриваются как пара GPU + звук, с помощью PulseAudio можно назначать отдельным программам вывод на различные звуковые карты [82].

logind

Сервер logind (часть systemd) изначально разрабатывался с учетом потребностей MultiSeat конфигураций [93]. Так в нем присутствует специальная сущность seat, которая объединяет сессию пользователя и программно-аппаратные ресурсы ассоциированные с этой сессией. Для корректной работы с logind, необходима поддержка со стороны графического и оконного менеджеров, которая, к сожалению, на момент подготовки тезисов была еще очень сырая, а местами и просто нерабачая.

Области применения

С учетом комбинирования различных технологий создавать многопользовательские системы можно (и нужно!) под свои задачи – кому-то хочется совместно поиграть, а кому-то достаточно минимальной аппаратной поддержки, но существенна стоимость каждого рабочего места. Наиболее очевидные области применения:

* Семейные игровые и рабочие системы
* Учреждения образования
* Игровые клубы
* Интернет-клубы

Отдельно стоит заметить, что такое использование мощностей видеокарты отлично подходит для работы нескольких пользователей с коммерческими 3D-редакторами и CAD-системами, которые ограничены лицензиями и привязкой к аппаратной конфигурации. Ну а автор наслаждается MMO играя в одной команде вместе с подрастающим поколением, так что теперь вместо фразы: "Папа, моя очередь играть в танчики", теперь можно услышать: "Папа, а давай поиграем в танчики вместе".

Abstract licensed under Creative Commons Attribution-ShareAlike 3.0 license

Back