Iniciar dois servidores X na inicialização no RHEL

3

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.

    
por José Tomás Tocino 12.12.2016 / 10:02

1 resposta

0

A partir do RHEL6, eles usam o Upstart para iniciar processos na inicialização. Para iniciar dois servidores X diferentes, crie dois scripts separados para iniciar seu servidor X em: 0 e: 1.

start_colon_0.sh:

#!/bin/sh
su - sit -c "startx -- :0 vt4 -layout Layout0 -seat seat0 -sharevts" &

start_colon_1.sh:

#!/bin/sh
su - sit -c "startx -- :1 vt4 -layout Layout1 -seat seat1 -sharevts" &

Em /etc/init , crie dois arquivos de configuração da seguinte forma:

x_server_0.conf:

start on stopped rc RUNLEVEL=5
stop on starting rc RUNLEVEL=[!5]
console output
respawn
exec start_colon_0.sh

x_server_1.conf:

start on stopped rc RUNLEVEL=5
stop on starting rc RUNLEVEL=[!5]
console output
respawn
exec start_colon_1.sh

Isso executará seus scripts na inicialização ao entrar no runlevel 5.

Veja o tutorial do Upstart

    
por 17.07.2017 / 20:43