Вопрос или проблема
Конкурс по программированию разрешает только 1 компьютер на команду из 3 человек (что глупо), поэтому я подумал, что многоместность может быть хорошим обходным решением, учитывая, что нам разрешено использовать внешнюю мышь, дисплей и клавиатуру отдельно от ноутбука.
Я прочитал и посмотрел много учебников по Ubuntu, Debian, от разных людей, Arch, однако я не могу найти никого, кто настраивает один GPU (в моем случае APU) для многоместности. Я не уверен, какой мастер места нужно выделить для 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"
Ответ или решение
Настройка многоместной среды на компьютере с одной видеокартой — задача, требующая детального подхода и понимания принципов работы графической подсистемы в Linux. В данной ситуации цель состоит в том, чтобы использовать один компьютер с одной видеокартой (в вашем случае это встроенная графика Intel Iris Xe) для создания нескольких рабочих мест таким образом, чтобы они могли использоваться одновременно тремя людьми. Рассмотрим теорию, пример и практическое применение этой настройки.
Теоретическая часть
Теория многоместности в Linux
Многоместность (multiseat) — это конфигурация, при которой одна система предоставляет несколько независимых рабочих мест, состоящих из отдельно подключенных периферийных устройств: клавиатуры, мыши и монитора. Эта концепция может быть полезной в учебных заведениях, офисах и, как в вашем случае, на соревнованиях, где существует ограничение на количество используемых компьютеров.
Концепция DRM и видеокарты
Direct Rendering Manager (DRM) — это компонент ядра Linux, который занимается управлением графическим оборудованием и обеспечивает интерфейс для взаимодействия с графическим стеком. В контексте многоместности, управление именно графическими ресурсами является ключевой задачей, так как одна видеокарта должна обеспечивать независимые потоки вывода на разные мониторы.
Пример конфигурации
Создадим пример на основе вашей системы, которая использует Xubuntu и графическое окружение LightDM. Ваша задача состоит в том, чтобы назначить устройство ввода и вывода для каждого рабочего места. В данном контексте, задания рабочих мест могут быть выполнены с помощью loginctl
, xorg.conf
и дополнительных инструментов.
Конфигурация xorg.conf
Создание отдельного конфигурационного файла для каждого рабочего места может быть одной из стратегий. Для этого воспользуемся Xorg. Создайте конфигурационный файл /etc/X11/xorg.conf.d/99-multiseat.conf
с содержанием, отражающим вашу конфигурацию устройств:
Section "ServerLayout"
Identifier "Server Layout"
Screen "Screen0"
InputDevice "Keyboard0" "CoreKeyboard"
InputDevice "Mouse0" "CorePointer"
Option "AutoAddDevices" "false"
EndSection
Section "Device"
Identifier "Device0"
Driver "intel"
Option "DRI" "3"
EndSection
Section "Screen"
Identifier "Screen0"
Device "Device0"
EndSection
Section "InputDevice"
Identifier "Mouse0"
Driver "libinput"
Option "Device" "/dev/input/mouse0"
EndSection
Section "InputDevice"
Identifier "Keyboard0"
Driver "kbd"
Option "XkbLayout" "us"
EndSection
Это базовый пример, с которым необходимо экспериментировать, добавляя и корректируя параметры для вашего конкретного случая. Обратите внимание, что устройства должны быть правильно идентифицированы командой lsusb
или xinput
.
Практическое применение
Настройка systemd-logind
Кроме правильно настроенного xorg.conf
, необходимо также учитывать роли systemd-logind
и loginctl
в управлении сеансами. loginctl
может быть использован для назначения устройств конкретным местам:
loginctl attach seat1 /sys/devices/pci0000:00/0000:00:02.0/drm/card1
loginctl attach seat1 /dev/input/mouse1
loginctl attach seat1 /dev/input/event1
Это гарантирует, что определенные устройства ввода привязаны к конкретному рабочему месту. Очень важно убедиться, что устройства не пересекаются между сессиями.
Управление правами доступа
Убедитесь, что ваш пользователь имеет все необходимые права доступа для управления устройствами DRM. Это можно сделать путем добавления пользователя в соответствующие группы:
sudo usermod -aG video,plugdev yourusername
Отладка и тестирование
Поскольку настройка многоместной конфигурации может быть сложной, полезно вести отладочные журналы X-сервера и systemd-logind
для анализа ошибок. Логи можно найти в /var/log/Xorg.0.log
и через команду journalctl -xe
.
Заключение
Настройка многоместной рабочей среды на Linux с одной видеокартой — это достаточно сложный процесс, который требует внимательного подхода к каждой его части: от конфигурации графической подсистемы, назначения устройств до управления сессиями. Важно быть готовым к возможным трудностям и экспериментировать с различными параметрами и конфигурациями. Также рекомендуется консультироваться с документацией и сообществами пользователей, которые уже имели опыт решения подобных задач.