我有一台功能强大的机器,我想将其用作多座位系统。它有两个显卡和两对键盘和鼠标。我已经能够使用 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"
# 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 时,这将在启动时运行您的脚本。
请参阅新贵教程