Debian 中非 root 用户如何在启动时启动 headless X

Debian 中非 root 用户如何在启动时启动 headless X

我的要求与这个因为我想在启动时为两个非root用户分别启动一个窗口管理器。

为了进行测试,我首先准备了以下几行.xinitrc和/或.xsession在主目录中用户2用户3像这样:

#!/bin/sh
exec icewm

然后我手动登录到虚拟控制台用户2或者用户3或者打开 xterm 窗口并输入此命令:

xinit -- /usr/bin/Xvfb :3 -cc 4 -screen 0 1024x768x16

这完成了工作 - icewm 和 Xvfb 在后台运行。

现在我想自动执行登录和命令初始化在启动时。但是以下方法均不起作用:

以 root 身份手动输入这两个命令或将它们放在 /etc/rc.local 中:

su -l user2 -c xinit -- /usr/bin/Xvfb :3 -cc 4 -screen 0 1024x768x16

No protocol specified
IceWM: Can't open display: :0. X must be running and $DISPLAY set.

start-stop-daemon --start -u user2 -g user2 -b --pidfile /tmp/pid --exec /usr/bin/xinit -- -- Xvfb :3
ps ax

[Xorg] <defunct>

如能得到帮助将不胜感激!

[测试 alex.d. 的方法后进行编辑]

文件/home/user2/.xsession

#!/bin/bash
export DISPLAY=localhost:3
export XAUTHORITY=$HOME/.Xauthority
exec icewm

以 root 身份发出此命令:

su -l user2 -c /usr/bin/startx -- /usr/bin/Xvfb :3 &

我明白了:

hostname: Name or service not known
xauth: (stdin):1:  bad display name "example.com:2" in "add" command

IceWM: Can't open display: localhost:3. X must be running and $DISPLAY set.
xinit: giving up
xinit: unable to connect to X server: Connection refused
xinit: server error
xauth: (argv):1:  bad display name "example.com:2" in "remove" command

有什么想法吗?请告诉我!

答案1

这是我的工作方法。

文件/etc/systemd/system/john.service:

[Unit]
Description=xinit - user "john"

[Service]
User=john
Group=john
ExecStart=/usr/bin/xinit openbox-session -- /usr/bin/Xvfb :1 -nolisten tcp
ExecStopPost=/usr/bin/killall -u john

[Install]
WantedBy=multi-user.target

文件/home/john/.config/openbox/自动启动

wine my_program.exe

谢谢大家的帮助!

答案2

从 rc.local 启动 X11 时,它不是从用户会话(consolekit 或 logind)内部启动的,因此环境中缺少某些内容。您应该尝试使用旨在启动会话的 startx 来启动 X11,而不是使用裸 xinit。

相关内容