![使用 XOrg 构建 root Rootfs 不显示 GUI](https://linux22.com/image/181036/%E4%BD%BF%E7%94%A8%20XOrg%20%E6%9E%84%E5%BB%BA%20root%20Rootfs%20%E4%B8%8D%E6%98%BE%E7%A4%BA%20GUI.png)
我已经使用 buildroot 使用模板构建了一个 rootfs,qemu_x86_64_defconfig
并在其上添加了 XOrg 服务器配置。为了启动系统,我使用 buildroot 生成的脚本来调用 qemu。output/images/start-qemu.sh
在启动消息中,我可以看到 XOrg 已启动,但是当我执行 xcalc 时,结果是
Error: Can't open display:
这是 xdm.log
xdm info (pid 114): Starting xdm 1.1.12
xdm info (pid 114): Starting X server on :0
(EE)
Fatal server error:
(EE) Server is already active for display 0
If this server is no longer running, remove /tmp/.X0-lock
and start again.
(EE)
(EE)
Please consult the The X.Org Foundation support
at http://wiki.x.org
for help.
(EE)
xdm error (pid 114): server unexpectedly died
xdm error (pid 114): Server for display :0 can't be started, session disabled
xdm info (pid 114): Exiting
在Xorg.0.0.log中
[ 2.871] (II) modeset(0): Setting screen physical size to 270 x 203
[ 3.136] (II) Using input driver 'mouse' for '<default pointer>'
[ 3.137] (**) Option "CorePointer" "on"
[ 3.137] (**) <default pointer>: always reports core events
[ 3.137] (WW) <default pointer>: No Device specified, looking for one...
**[ 3.138] (EE) <default pointer>: Cannot find which device to use.**
[ 3.138] (==) <default pointer>: Protocol: "Auto"
[ 3.138] (**) <default pointer>: always reports core events
[ 3.138] (EE) xf86OpenSerial: No Device specified.
[ 3.138] (WW) <default pointer>: cannot open input device
[ 3.138] (==) <default pointer>: Emulate3Buttons, Emulate3Timeout: 50
[ 3.139] (**) <default pointer>: ZAxisMapping: buttons 4 and 5
[ 3.139] (**) <default pointer>: Buttons: 9
[ 3.139] (II) XINPUT: Adding extended input device "<default pointer>" (type: MOUSE, id 6)
[ 3.140] (**) <default pointer>: (accel) keeping acceleration scheme 1
[ 3.141] (**) <default pointer>: (accel) acceleration profile 0
[ 3.141] (**) <default pointer>: (accel) acceleration factor: 2.000
[ 3.141] (**) <default pointer>: (accel) acceleration threshold: 4
**[ 3.141] (EE) xf86OpenSerial: No Device specified.**
[ 3.141] (WW) <default pointer>: cannot open input device
[ 3.142] (II) Using input driver 'kbd' for '<default keyboard>'
[ 3.142] (**) Option "CoreKeyboard" "on"
这里出了什么问题?
答案1
该错误消息由与此 shell 脚本命令等效的编程语言生成:
echo "Can't open display: $DISPLAY" >&2
因此,您在第二个冒号之后看不到任何内容的事实意味着DISPLAY
环境变量未设置(或设置为空值)。
启动 X11 服务器时,还会生成会话 cookie(除非禁用 X11 身份验证,这是不安全的)。您必须有一些东西可以将该 cookie 的副本传递给执行 X11 应用程序的用户:该 cookie 通常放置在环境变量指向的文件中XAUTHORITY
,或者如果未定义此类变量,则~/.Xauthority
放置在用户主目录中的文件中。
这就是为什么启动 X11 服务器通常由特殊程序处理:如果您打算为已经以文本模式本地登录的用户启动 X11 会话startx
(这是使用低级工具的脚本),或者xinit
X 显示管理器(通常命名*dm
为 、gdm
、sddm
)xdm
,它最初会显示 GUI 登录提示,然后处理用户登录。
在这两种情况下,特殊程序将处理启动 X11 服务器和使用该服务器的第一个 GUI 应用程序,因此该程序可以将适当的环境设置传递给应用程序进程。第一个应用程序的任何子进程都会自动继承环境变量。
(X11 会话设置可以而且通常会做更多的事情,但这绝对是它需要做的最低限度。)