![如何成功运行第二个 X 会话?](https://linux22.com/image/188183/%E5%A6%82%E4%BD%95%E6%88%90%E5%8A%9F%E8%BF%90%E8%A1%8C%E7%AC%AC%E4%BA%8C%E4%B8%AA%20X%20%E4%BC%9A%E8%AF%9D%EF%BC%9F.png)
我正在尝试使用标准用户(名为 stduser)在 tty 上运行startx -- :1 vt1
,该用户已经按照以下答案使用 XFCE 本机登录到 Debian 10:https://unix.stackexchange.com/a/85384
然后显示器似乎也会闪烁,但这最终失败了:
(==) Log file: "/var/log/Xorg.1.log"
(==) Using config directory: "/etc/X11/xorg.conf.d"
(==) Using system config directory "/usr/share/X11/xorg.conf.d"
xinit: connection to X server lost
根据/var/log/Xorg.1.log
,一切看起来都很好,直到这些行:
[ 3585.25] (++) using VT number 1
[ 3585.25] (II) systemd-logind: logind integration requires -keeptty and -keeptty was not provided, disabling logind integration
[ 3585.26] (II) xfree86: Adding drm device (/dev/dri/card0)
[ 3585.26] (EE) /dev/dri/card0: failed to set DRM interface version 1.4: Permission denied
这似乎适合并确认了软件问题,因为sudo startx -- :1 vt1
它完美地工作了。但这不是我想要的,因为我无法在以 root 身份登录时运行某些软件。
这就是我陷入困境的地方,因为大多数线索都与具有 Optimus(Intel iGPU + Nvidia GPU)的 PC 有关。
一些细节:
- 我只有大约十年前的英特尔高清显卡(没有像英特尔 Iris 及其 eDRAM/L4 缓存/HBM 那样奇特的东西,也没有任何 AMD、Nvidia 和糟糕的旧英特尔 GMA GPU)。
- 桌面管理器是
lightdm
. /home/stduser/.profile
设置为导出DISPLAY=:0.0
并XAUTHORITY=/home/stduser/.Xauthority
设置为环境变量。- 由于一些显示/会话问题得到了解决(但这仍然没有帮助),因此也应用了此修复:为什么我无法从“root”运行 GUI 应用程序:“未指定协议”?
startx -- :1 vt1
完美适用于 AntiX(轻量级无 systemd Debian)。
所以问题是:如何使用相同的标准用户成功启动另一个 X 会话?
更新1:应用 xhienne 提示
X :1
似乎工作“更好”,但只显示黑屏。xinit -- :1
工作得“更好”,在黑屏上显示了一个无窗口的 xterm,我现在可以移动鼠标光标。
但是,同样的错误仍然发生,(已更新,见上文)中有一些更有趣的行/var/log/Xorg.1.log
,这似乎与systemd-logind
.
更新2: 这确实主要是一个系统问题,照常。
您需要执行以下操作:
启用早期 KMS通过将
i915
(例如您的 GPU 驱动程序,如果它支持早期 KMS)附加到文件/etc/initramfs-tools/modules
和一个结束行字符(一个简单的空新行)。保存它,然后用于update-initramfs -u
更新您的 initramfs。创建一个
/etc/modprobe.d/i915-kms.conf
文件,然后添加options i915 modeset=1
到其中和常用的结束行字符,保存更改。重新启动您的电脑。
现在,运行以下命令会给出:(即将更新,立即测试)。
但是,根据经验:当 Debian 上出现故障时,请尝试 AntiX 并查看这是否是 systemd 问题。
更新 2.1:由于某种原因,i915 modeset=1
即使在update-initramfs -u
.所以我拔出了核武器:
update-initramfs -u -k all
, 然后- 使用
grub-customizer
>General settings
选项卡>kernal parameters
框添加i915.modesetting=1
并保存编辑, - 重启,
- 选择要启动的内核,按下
e
可编辑内核参数, - 并再次放置
i915.modeset=1
(确保它在那里),然后 - 按 F10 启动。
- 检查了一下,
cat /sys/module/i915/parameters/modeset
返回了1
,确实如此。
答案1
您可能发现了一个稍微不同的途径来解决这个已知的错误:https://gitlab.freedesktop.org/xorg/xserver/-/issues/1021
基本上,打开设备的第一个进程会自动获得自动赋予它的 DRM“主”功能,因此它可以执行诸如drmSetInterfaceVersion()
和 之类的操作drmGetBusId()
(后者以前者为先决条件),而无需 root。但任何其他尝试执行相同操作的进程需要已经具有 DRM 主功能或 CAP_SYS_ADMIN(通常 CAP_SYS_ADMIN 相当于root
)。这是X服务器硬件探测例程的作者没有想到的。
该错误导致了两个修复:
drmSetInterfaceVersion()
X 服务器在找到正确的设备之前不应使用- 内核需要更聪明地处理 DRM SET_MASTER 和 DROP_MASTER 的权限而不仅仅是“需要 CAP_SYS_ADMIN(实际上是 root)或成为第一个打开设备的人”。
但看起来这些修复还没有出现在 Debian 10 上(至少还没有)。对于您的情况,第一个修复将是重要的。
可以说,可能还有第三个修复的地方:如果不先做的话,实际的总线 ID 就不可用,drmSetInterfaceVersion()
这一事实可能需要修复。