Вопрос или проблема
На соревновании по программированию разрешён только один компьютер на команду из трех человек (что глупо), поэтому я подумал, что multiseat может быть хорошим обходным решением, учитывая, что нам разрешено иметь внешнюю мышь, дисплей и клавиатуру, отдельно от ноутбука.
Я прочитал и посмотрел много инструкций от Ubuntu, Debian, случайных людей, Arch, однако не могу найти никого, кто настраивает один GPU (в моём случае APU) для использования multiseat. Я не уверен, какой мастер seat нужно выделить seat1, чтобы seat0 оставался функциональным.
Характеристики:
Xubuntu (LightDM)
11th Gen Intel i5-1135G7 (8) @ 4.200GHz
GPU: Intel TigerLake-LP GT2 [Iris Xe Graphics]
–информация loginctl о карте:
│ [MASTER] drm:card1
│ ├─/sys/devices/pci0000:00/0000:00:02.0/drm/card1/card1-DP-1
│ │ [MASTER] drm:card1-DP-1
│ ├─/sys/devices/pci0000:00/0000:00:02.0/drm/card1/card1-DP-2
│ │ [MASTER] drm:card1-DP-2
│ ├─/sys/devices/pci0000:00/0000:00:02.0/drm/card1/card1-DP-3
│ │ [MASTER] drm:card1-DP-3
│ ├─/sys/devices/pci0000:00/0000:00:02.0/drm/card1/card1-HDMI-A-1
│ │ [MASTER] drm:card1-HDMI-A-1
│ ├─/sys/devices/pci0000:00/0000:00:02.0/drm/card1/card1-HDMI-A-2
│ │ [MASTER] drm:card1-HDMI-A-2
│ ├─/sys/devices/pci0000:00/0000:00:02.0/drm/card1/card1-HDMI-A-3
│ │ [MASTER] drm:card1-HDMI-A-3
│ └─/sys/devices/pci0000:00/0000:00:02.0/drm/card1/card1-eDP-1
│ [MASTER] drm:card1-eDP-1
│ └─/sys/devices/pci0000:00/0000:00:02.0/drm/card1/card1-eDP-1/intel_backlight
│ backlight:intel_backlight
├─/sys/devices/pci0000:00/0000:00:02.0/drm/renderD128
│ drm:renderD128
├─/sys/devices/pci0000:00/0000:00:02.0/graphics/fb0
│ graphics:fb0 "i915drmfb"
.
Ответ или решение
Настройка мультисид системы на одном компьютере с единственным GPU может быть довольно сложной задачей, но при правильном подходе она может решить задачу, которую вы хотите решить – обеспечить нескольким пользователям одновременную работу на одной машине. Это особенно актуально в условиях, когда ресурсы ограничены, и в вашем случае – при участии в соревновании по программированию, где каждый член команды может работать с отдельными устройствами ввода и вывода. Давайте рассмотрим данный вопрос более подробно, воспользовавшись подходом TEA (Theory, Example, Application).
Теория (Theory):
Мультисид система позволяет использовать одно аппаратное и программное обеспечение для создания нескольких сессий (консолей), каждая из которых работает независимо. Это может обеспечить возможность нескольким пользователям одновременно использовать один и тот же компьютер, при этом каждый работает на своем мониторе и использует свои устройства ввода (клавиатура и мышь). Для реализации такой конфигурации на Linux необходимо использовать функционал менеджера сеансов и хорошо разбираться в том, как операционная система работает с устройствами.
Ваша система базируется на Xubuntu с LightDM, что предоставляет определенные возможности для настройки. Важным аспектом является использование Display Manager (DM), способного поддерживать несколько сессий. LightDM из коробки поддерживает мультисид конфигурации, однако интеграция с одним GPU требует специфической настройки.
Многие современные GPU, такие как Intel Iris Xe Graphics в вашем i5-1135G7, способны обрабатывать несколько потоков вывода изображений, но ограничение состоит в правильной маршрутизации этих потоков для использования разными пользователями. В этом кроется сложность работы с одним GPU: он умеет обрабатывать несколько дисплеев, но нужно, чтобы операционная система смогла выделить и управлять ресурсами так, чтобы эти дисплеи вели себя автономно друг от друга.
Пример (Example):
Предположим, у вас есть три выхода: встроенная панель вашего ноутбука (eDP) и внешние мониторы через HDMI и DisplayPort. Конфигурация этих выходов уже помечена в системе как /sys/devices/…/drm/card1/card1-*. В Linux, например в инструментах Xorg или Wayland, можно разделить эти выходы на разные "сидения" (seats), при этом каждое сидение будет связано с конкретными периферийными устройствами ввода — клавиатурой и мышью.
На практике, настройка мультисид может выглядеть следующим образом:
-
Назначить один из выходов для каждого из трех мест пользователей:
- Проецировать основной экран (eDP) на одно сидение.
- Отдать HDMI и DP к двум другим сидениям соответственно.
-
Настроить LightDM или другой display manager так, чтобы он инициировал три сессии, соответствующие каждому выделенному выходу.
-
Убедиться, что для каждого вывода системы прописаны подходящие параметры в конфиге Xorg или Wayland, так чтобы они стартовали на разных номера X-сервера.
Применение (Application):
Для реализации этого на практике, вам предстоит пройти следующие шаги.
-
Настройка конфигурации LightDM:
- Настройте конфигурации LightDM, добавив несколько сессий. Это можно сделать в файле конфигурации
/etc/lightdm/lightdm.conf
. - Убедитесь, что привязка для каждого экрана и устройства ввода существует в секции Seat.
- Настройте конфигурации LightDM, добавив несколько сессий. Это можно сделать в файле конфигурации
-
Конфигурация Xorg или Wayland:
- Для Xorg создайте файл конфигурации (например,
/etc/X11/xorg.conf.d/20-multiseat.conf
), в котором будет описано позиционирование и выводы для каждого содержащегося в системе выходного экрана. - Для Wayland конфигурации могут отличаться и специфичны к compositor’у, например, GDM.
- Для Xorg создайте файл конфигурации (например,
-
Назначение устройств ввода:
- Устройства ввода могут быть назначены автоматически, но может потребоваться указать конкретные USB-порты или устройства для каждого сидения.
Помимо этого, важно убедиться, что драйверы для вашего Intel GPU корректно работают и поддерживают все необходимые функции. В конце, чтобы гарантировать, что система точно ведет себя как ожидается, протестируйте полный цикл, включая запуск и завершение работы трех сессий.
Конечно, настройка мультисид системы на одном GPU – это непростая задача, требующая знания Linux-систем и использования разнообразных конфигурационных файлов. Однако, при правильном подходе, это реалистичное решение, которое позволит участникам команды продуктивно работать, используя один компьютер.