↩️️ O MultiSeatu
MultiSeat je prostředí, umožňující více uživatelům používat jeden společný desktopový počítač z více míst, tzv. sezení najednou. Jde o přirozenou vlastnost Linuxu, kterou lze konfigurací vytvořit.
Hodí se všude, kde je celkem jedno jaké přihlašovací místo („sezení“) se použije, za to být na stejném počítači. Monitor, klávesnice, myš a další přidělené nebo sdílené prostředky, to vše s vlastním přihlášením do systému se nazývá „sezení“.
Podstatou vzniku nového sezení je vyčlenění grafické karty ze seat0 (existuje standardně) do vznikajícího sezení seat1 , seat2 … až do počtu osazených grafických karet. Následně se k těmto sezením vyčlení cesty ke zvukovým kartám (hdmi, součást grafických karet) a USB cesty (klávesnice, myš atd.). Klíčové definice jsou v „X-Serveru“ a „Desktop Manageru“ a samozřejmě konfigurační přkaz loginctl.
☝️ Při konfiguraci velice záleží na verzi Linuxu dané distribuce. Zejména jde o odlišnosti příkazu loginctl. Zde uvádím pro Xubuntu 24.04 LTS.
- Přístup do stejného prostředí z jakéhokoli místa.
- Jeden desktopový počítač.
- Jedno připojení do sítě.
- Jedno diskové úložiště.
- Sdílené komponenty (mimo grafické karty a vyčleněné USB porty).
- Přidělená nebo sdílená připojitelná zařízení.
- Sdílený operační systém Linux a aplikace.
- Celkově praktické, úsporné řešení.
Linux s klasickým Xorg „X-server“ grafickým rozhraním. Nástupce Wayland už MultiSeat nepodporuje. Tímto je vhodná distribuce Xubuntu. Každé sezení se váže na pevně přidělené GPU („graphics processing unit“). Tímto, kolik sezení, tolik grafických karet v počítači nebo grafickou kartu s více GPU. Ostatní prostředky jsou sdílené nebo přidělené určitému sezení. Nezapomenout mít k předpokládané vytíženosti i adekvátně dimenzované počítačové komponenty (procesor, paměť, grafické karty, disky a zdroj).

Klasicky na externí disk, cloud… Zároveň už od dvou sezení se dá zvážit mít i jeden počítač jako záložní. Buď průběžně aktualizovaný, jako aktivní záloha rychlého zastoupení při výpadku primárního nebo jako zdroj komponent.
↩️️ Implementace
Výpis modelů osazených grafických karet a jejich PCI ID:
💻 lspci -nn | grep -i 'vga'
Výpis:
00:02.0 VGA compatible controller [0300]: Intel Corporation RocketLake-S GT1 [UHD Graphics 730] [8086:4c8b] (rev 04) 01:00.0 VGA compatible controller [0300]: Advanced Micro Devices, Inc. [AMD/ATI] Caicos [Radeon HD 6450/7450/8450 / R5 230 OEM] [1002:6779] 04:00.0 VGA compatible controller [0300]: Advanced Micro Devices, Inc. [AMD/ATI] Caicos XT [Radeon HD 7470/8470 / R5 235/310 OEM] [1002:6778]
Přidělení grafických karet sezením:
| sezení | PCI ID | Model |
| seat0 (hlavní) | 00:02.0 |
UHD Graphics 730 |
| seat1 | 01:00.0 |
Radeon HD 6450/7450/8450 / R5 230 OEM |
| seat2 | 04:00.0 |
Radeon HD 7470/8470 / R5 235/310 OEM |
Pro „seat0“
💻 sudo mousepad /etc/X11/xorg-seat0.conf
Základní definice:
Section "Device" Identifier "Card-Seat0" BusId "PCI:0:2:0" MatchSeat "seat0" EndSection
Pro „seat1“
🖥️ sudo mousepad /etc/X11/xorg-seat1.conf
Základní definice:
Section "Device" Identifier "Card-Seat1" BusId "PCI:1:0:0" MatchSeat "seat1" EndSection
Pro „seat2“
💻 sudo mousepad /etc/X11/xorg-seat2.conf
Základní definice:
Section "Device" Identifier "Card-Seat2" BusId "PCI:4:0:0" MatchSeat "seat2" EndSection
💻 sudo mousepad /etc/lightdm/lightdm.conf
Definice:
[LightDM] [SeatDefaults] [Seat:*] allow-guest=false user-session=xubuntu autologin-guest=false [Seat:seat0] xserver-command=/usr/lib/xorg/Xorg :0 xserver-config=/etc/X11/xorg-seat0.conf xserver-layout=seat0 [Seat:seat1] xserver-command=/usr/lib/xorg/Xorg :1 -sharevts xserver-config=/etc/X11/xorg-seat1.conf xserver-layout=seat1 [Seat:seat2] xserver-command=/usr/lib/xorg/Xorg :2 -sharevts xserver-config=/etc/X11/xorg-seat2.conf xserver-layout=seat2 [XDMCPServer] [VNCServer]
💡 Standardně je vše v seat0 , kdy další seat... se přidá vyčleněním ze seat0.
Inicializace do jednoho „seat0“
Pro případ pozůstalé předešlé MultiSeat konfigurace
💻 sudo loginctl flush-devices
Seznam grafických karet v „seat0“
💻 sudo loginctl seat-status seat0 |grep -e /drm -e /fb
Výpis a zvýrazněno k přidělení pro „seat1“:
... ├─/sys/devices/pci0000:00/0000:00:02.0/drm/card2 │ ├─/sys/devices/pci0000:00/0000:00:02.0/drm/card2/card2-DP-1 │ ├─/sys/devices/pci0000:00/0000:00:02.0/drm/card2/card2-HDMI-A-1 │ └─/sys/devices/pci0000:00/0000:00:02.0/drm/card2/card2-HDMI-A-2 ├─/sys/devices/pci0000:00/0000:00:02.0/drm/renderD129 ├─/sys/devices/pci0000:00/0000:00:02.0/graphics/fb0 ├─/sys/devices/pci0000:00/0000:00:01.0/0000:01:00.0/drm/card1 │ ├─/sys/devices/pci0000:00/0000:00:01.0/0000:01:00.0/drm/card1/card1-DVI-I-1 │ ├─/sys/devices/pci0000:00/0000:00:01.0/0000:01:00.0/drm/card1/card1-HDMI-A-3 │ └─/sys/devices/pci0000:00/0000:00:01.0/0000:01:00.0/drm/card1/card1-VGA-1 ├─/sys/devices/pci0000:00/0000:00:01.0/0000:01:00.0/drm/renderD128 ├─/sys/devices/pci0000:00/0000:00:01.0/0000:01:00.0/graphics/fb1 ├─/sys/devices/pci0000:00/0000:00:1c.0/0000:04:00.0/drm/card0 │ ├─/sys/devices/pci0000:00/0000:00:1c.0/0000:04:00.0/drm/card0/card0-DVI-D-1 │ ├─/sys/devices/pci0000:00/0000:00:1c.0/0000:04:00.0/drm/card0/card0-HDMI-A-4 │ └─/sys/devices/pci0000:00/0000:00:1c.0/0000:04:00.0/drm/card0/card0-VGA-2 ├─/sys/devices/pci0000:00/0000:00:1c.0/0000:04:00.0/drm/renderD130 ├─/sys/devices/pci0000:00/0000:00:1c.0/0000:04:00.0/graphics/fb2 ...
Vytvoření sezení „seat1“ přidělením grafické karty
Vyčlení se ze „seat0“ a přidělí k „seat1“:
💻 sudo loginctl attach seat1 /sys/devices/pci0000:00/0000:00:02.0/drm/card1
💻 sudo loginctl attach seat1 /sys/devices/pci0000:00/0000:00:02.0/drm/renderD129
💻 sudo loginctl attach seat1 /sys/devices/pci0000:00/0000:00:02.0/graphics/fb0
Ověření „seat1“
💻 sudo loginctl list-seats
Výpis:
SEAT seat0 seat1 2 seats listed.
Seznam zvukových karet v „seat0“
💻 sudo loginctl seat-status seat0 | grep -i sound
Výpis a zvýrazněno k přidělení pro „seat1“:
... ├─/sys/devices/pci0000:00/0000:00:01.0/0000:01:00.1/sound/card0 │ sound:card0 "HDMI_1" │ └─/sys/devices/pci0000:00/0000:00:01.0/0000:01:00.1/sound/card0/input20 ...
Přidělení audio větve pro „seat1“
Vyčlení se ze „seat0“ a přidělí k „seat1“:
💻 sudo loginctl attach seat1 /sys/devices/pci0000:00/0000:00:01.0/0000:01:00.1/sound/card0
Kontrolní výpis předěleného k „seat1“
💻 sudo loginctl seat-status seat1
Výpis:
seat1 Sessions: *c1 Devices: n/a ├─/sys/devices/pci0000:00/0000:00:01.0/0000:01:00.0/drm/card1 │ [MASTER] drm:card1 │ ├─/sys/devices/pci0000:00/0000:00:01.0/0000:01:00.0/drm/card1/card1-DVI-I-1 │ │ [MASTER] drm:card1-DVI-I-1 │ ├─/sys/devices/pci0000:00/0000:00:01.0/0000:01:00.0/drm/card1/card1-HDMI-A-3 │ │ [MASTER] drm:card1-HDMI-A-3 │ └─/sys/devices/pci0000:00/0000:00:01.0/0000:01:00.0/drm/card1/card1-VGA-1 │ [MASTER] drm:card1-VGA-1 ├─/sys/devices/pci0000:00/0000:00:01.0/0000:01:00.0/drm/renderD128 │ drm:renderD128 ├─/sys/devices/pci0000:00/0000:00:01.0/0000:01:00.0/graphics/fb1 │ graphics:fb1 "radeondrmfb" └─/sys/devices/pci0000:00/0000:00:01.0/0000:01:00.1/sound/card0 sound:card0 "HDMI_1" └─/sys/devices/pci0000:00/0000:00:01.0/0000:01:00.1/sound/card0/input20 input:input20 "HDA ATI HDMI HDMI/DP,pcm=3"
Přidělení USB větve pro sezení „seat1“
💻 sudo loginctl seat-status seat0 | grep -i usb
Část výpisu se zvýrazněnou usb cestou pro seat1:
... ├─/sys/devices/pci0000:00/0000:00:14.0/usb1/1-4/1-4.3 │ usb:1-4.3 │ ├─/sys/devices/pci0000:00/0000:00:14.0/usb1/1-4/1-4.3/1-4.3.3 │ │ usb:1-4.3.3 ...
Přidělení USB větve do seat1:
💻 sudo loginctl attach seat1 /sys/devices/pci0000:00/0000:00:14.0/usb1/1-4/1-4.3
Celkový výpis přiděleného k „seat1“
💻 sudo loginctl seat-status seat1
Výpis:
seat1 Sessions: *c1 Devices: n/a ├─/sys/devices/pci0000:00/0000:00:01.0/0000:01:00.0/drm/card1 │ [MASTER] drm:card1 │ ├─/sys/devices/pci0000:00/0000:00:01.0/0000:01:00.0/drm/card1/card1-DVI-I-1 │ │ [MASTER] drm:card1-DVI-I-1 │ ├─/sys/devices/pci0000:00/0000:00:01.0/0000:01:00.0/drm/card1/card1-HDMI-A-3 │ │ [MASTER] drm:card1-HDMI-A-3 │ └─/sys/devices/pci0000:00/0000:00:01.0/0000:01:00.0/drm/card1/card1-VGA-1 │ [MASTER] drm:card1-VGA-1 ├─/sys/devices/pci0000:00/0000:00:01.0/0000:01:00.0/drm/renderD128 │ drm:renderD128 ├─/sys/devices/pci0000:00/0000:00:01.0/0000:01:00.0/graphics/fb1 │ graphics:fb1 "radeondrmfb" ├─/sys/devices/pci0000:00/0000:00:01.0/0000:01:00.1/sound/card0 │ sound:card0 "HDMI_1" │ └─/sys/devices/pci0000:00/0000:00:01.0/0000:01:00.1/sound/card0/input20 │ input:input20 "HDA ATI HDMI HDMI/DP,pcm=3" └─/sys/devices/pci0000:00/0000:00:14.0/usb1/1-4/1-4.3 usb:1-4.3 └─/sys/devices/pci0000:00/0000:00:14.0/usb1/1-4/1-4.3/1-4.3.3 usb:1-4.3.3 └─/sys/devices/pci0000:00/0000:00:14.0/usb1/1-4/1-4.3/1-4.3.3/1-4.3.3.4 usb:1-4.3.3.4 ...
💡 Stejným principem jako vytvoření seat1 , ale již bez inicializace seat0.
😎 Rozpracované … ✍️
Separace do tvaru „seat0“, „seat1“, …
💻 loginctl session-status |sed '/Seat:/!d;s/t.*Seat: //;s/; [^ ]*//;q'
nebo pro novější verzi:
💻 loginctl show-session "$(loginctl | awk '$1 ~ /^[0-9]+$/ && $3 == ENVIRON["USER"] {print $1}')" -p Seat --value
Separace do tvaru indexu „0“, „1“, …
💻 loginctl session-status |sed '/Seat:/!d;s/t.*Seat: seat//;s/; [^ ]*//;q'
nebo pro novější verzi:
💻 loginctl show-session "$(loginctl | awk '$1 ~ /^[0-9]+$/ && $3 == ENVIRON["USER"] {print $1}')" -p Seat --value | sed -E 's/^[^0-9]*([0-9]+)$/\1/'
