Eu tenho uma máquina poderosa que eu quero usar como um sistema multi-sede. Tem duas placas gráficas e dois pares de teclados e mouses. Consegui configurar com sucesso dois "lugares" usando o udev e o Xorg.conf e lançar dois servidores X a partir de um script, para que dois usuários possam ter sessões independentes. Apenas para registro, aqui está o meu arquivo de regras do udev, onde eu identifico cada hub USB e rotulo os dispositivos e os assentos:
SUBSYSTEM=="drm", KERNEL=="card[0-9]*", ATTRS{vendor}=="0x10de", DRIVERS=="nvidia", TAG+="master-of-seat"
# SUBSYSTEM=="drm", KERNEL=="card0", ENV{ID_SEAT}="seat0"
# SUBSYSTEM=="drm", KERNEL=="card1", ENV{ID_SEAT}="seat1"
SUBSYSTEM=="input", ENV{ID_INPUT.tags}="input_default"
# KVM HUBS
KERNELS=="3-2", ATTRS{bDeviceClass}=="09", ENV{KVM_HUB}="1", ENV{ID_SEAT}="seat0"
KERNELS=="3-8", ATTRS{bDeviceClass}=="09", ENV{KVM_HUB}="2", ENV{ID_SEAT}="seat1"
# Devices of HUB 1
KERNEL=="event*", ENV{KVM_HUB}=="1", ATTRS{bInterfaceProtocol}=="01" SYMLINK+="kvm_keyboard_1"
KERNEL=="event*", ENV{KVM_HUB}=="1", ATTRS{bInterfaceProtocol}=="02" SYMLINK+="kvm_mouse_1"
# Devices of HUB 2
KERNEL=="event*", ENV{KVM_HUB}=="2", ATTRS{bInterfaceProtocol}=="01" SYMLINK+="kvm_keyboard_2"
KERNEL=="event*", ENV{KVM_HUB}=="2", ATTRS{bInterfaceProtocol}=="02" SYMLINK+="kvm_mouse_2"
# Default seat
SUBSYSTEM=="input", TAG=="seat", ENV{ID_SEAT}=="" , ENV{ID_SEAT}="seat0"
# set all tags accordingly
ENV{ID_SEAT}!="", ENV{ID_INPUT.tags}+="$env{ID_SEAT}" TAG+="$env{ID_SEAT}"
A parte relevante do meu arquivo xorg.conf
tem esta aparência:
Section "ServerFlags"
# Option "AutoAddDevices" "false"
# Option "AutoEnableDevices" "false"
Option "DefaultServerLayout" "Layout0"
Option "AllowMouseOpenFail" "true"
Option "Xinerama" "0"
EndSection
# ---------------------------------------------------------------
# LAYOUT
Section "ServerLayout"
Identifier "Layout0"
Screen "Screen0"
MatchSeat "seat0"
Option "Clone" "off"
EndSection
Section "ServerLayout"
Identifier "Layout1"
Screen "Screen1"
MatchSeat "seat1"
Option "Clone" "off"
EndSection
Como eu disse, posso lançar com êxito duas sessões independentes usando o seguinte script, mas gostaria que isso acontecesse automaticamente na inicialização.
#!/bin/bash
set +x
rm /etc/X11/xorg.conf
cp ./xorg_independientes /etc/X11/xorg.conf
# X (:0)
systemctl stop gdm
killall Xorg
killall X
systemctl restart gdm
sleep 7
# X (:1)
su - sit -c "startx /usr/bin/gnome-session -- :1 vt4 -layout Layout1 -seat seat1 -sharevts" &
sleep 10
DISPLAY=:1 xhost +
Minha abordagem seria definir o runlevel de destino padrão como 4 (para que ele tenha tudo, menos gráficos) e, em seguida, colocar esses comandos em um script em algum lugar.