RHEL에서 부팅 시 두 개의 X 서버 시작

RHEL에서 부팅 시 두 개의 X 서버 시작

나는 다중 좌석 시스템으로 사용하고 싶은 강력한 기계를 가지고 있습니다. 두 개의 그래픽 카드와 두 쌍의 키보드 및 마우스가 있습니다. udev 및 Xorg.conf를 사용하여 두 개의 "좌석"을 성공적으로 구성하고 두 사용자가 독립적인 세션을 가질 수 있도록 스크립트에서 두 개의 X 서버를 시작할 수 있었습니다. 기록을 위해 각 USB 허브를 식별하고 장치와 좌석에 레이블을 지정하는 udev 규칙 파일은 다음과 같습니다.

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}"

내 파일의 관련 부분은 xorg.conf다음과 같습니다.

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

내가 말했듯이,성공적으로 런칭할 수 있어요다음 스크립트를 사용하는 두 개의 별도 세션이 있지만 시작 시 자동으로 발생하도록 하고 싶습니다.

#!/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 +

내 접근 방식은 기본 대상 런레벨을 4로 설정한 다음(그래서 그래픽을 제외한 모든 것이 포함됨) 이 명령을 스크립트 어딘가에 두는 것이었습니다.

답변1

RHEL6부터는 Upstart를 사용하여 부팅 시 프로세스를 시작합니다. 두 개의 서로 다른 X 서버를 시작하려면 2개의 별도 스크립트를 생성하여 :0 및 :1에서 X 서버를 시작하십시오.

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" &

에서 /etc/init다음과 같이 2개의 구성 파일을 만듭니다.

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

런레벨 5에 들어갈 때 시작 시 스크립트가 실행됩니다.

보다신생 튜토리얼

관련 정보