Запустите два X сервера при загрузке в RHEL

Вопрос или проблема

У меня есть мощная машина, которую я хочу использовать как многосидячую систему. У нее есть две графические карты и две пары клавиатур и мышей. Мне удалось успешно настроить два “места” с использованием udev и Xorg.conf и запустить два X-сервера из скрипта, чтобы два пользователя могли иметь независимые сеансы. Для справки, вот мой файл правил udev, где я идентифицирую каждый USB-хаб и маркирую устройства и места:

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"

# Устройства 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"

# Устройства 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"

# Стандартное место
SUBSYSTEM=="input", TAG=="seat", ENV{ID_SEAT}=="" , ENV{ID_SEAT}="seat0"

# устанавливаем все теги соответственно
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


# ---------------------------------------------------------------
# РАСКЛАД

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 (чтобы он имел все, кроме графики), а затем разместить эти команды в скрипте где-то.

Начиная с RHEL6, они используют Upstart для запуска процессов при загрузке. Чтобы запустить два разных X-сервера, создайте 2 отдельных скрипта для запуска вашего X-сервера на :0 и :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" &

В /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.

Смотрите учебник по Upstart

Ответ или решение

Запуск двух X серверов при загрузке на RHEL

Если вам нужно автоматически запускать два независимых X сервера на системе Red Hat Enterprise Linux (RHEL), вы можете воспользоваться системой инициализации Upstart (начиная с RHEL 6). Ниже приведено пошаговое руководство, как это сделать:

Подготовка скриптов для запуска X серверов

Для начала создайте два скрипта, которые будут отвечать за запуск X серверов на экранах :0 и :1.

  1. Создание скрипта для запуска X сервера на :0

    Создайте файл start_colon_0.sh с следующим содержимым:

    #!/bin/sh
    su - sit -c "startx -- :0 vt4 -layout Layout0 -seat seat0 -sharevts" &
  2. Создание скрипта для запуска X сервера на :1

    Создайте файл start_colon_1.sh с следующим содержимым:

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

Не забудьте сделать оба скрипта исполняемыми:

chmod +x start_colon_0.sh
chmod +x start_colon_1.sh

Конфигурация Upstart

Теперь создайте конфигурационные файлы для Upstart в каталоге /etc/init. Эти файлы будут управлять запуском ваших скриптов при загрузке.

  1. Создание конфигурационного файла для :0

    Создайте файл /etc/init/x_server_0.conf со следующим содержимым:

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

    Замените /path/to/your на фактический путь к вашему скрипту.

  2. Создание конфигурационного файла для :1

    Создайте файл /etc/init/x_server_1.conf со следующим содержимым:

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

    Убедитесь, что путь к скрипту правильный.

Проверка изменений

После создания всех необходимых файлов, перезагрузите систему и проверьте, запустились ли оба X сервера. Если всё сделано правильно, пользователи, подключенные к seat0 и seat1, должны иметь возможность работать независимо друг от друга.

Заключение

С помощью вышеуказанных шагов вы сможете автоматически запускать два независимых X сервера на RHEL. Этот подход не только обеспечивает удобство многопользовательского взаимодействия на одном мощном компьютере, но и настраивает эффективный рабочий процесс для различных пользователей. Убедитесь, что в системе правильно настроены все необходимые компоненты, включая udev, Xorg и пользовательские сессии, чтобы избежать возможных конфликтов при запуске.

Если у вас возникнут дополнительные вопросы или потребуется помощь, не стесняйтесь обращаться!

Оцените материал
Добавить комментарий

Капча загружается...