使用 XOrg 构建 root Rootfs 不显示 GUI

使用 XOrg 构建 root Rootfs 不显示 GUI

我已经使用 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(这是使用低级工具的脚本),或者xinitX 显示管理器(通常命名*dm为 、gdmsddmxdm,它最初会显示 GUI 登录提示,然后处理用户登录。

在这两种情况下,特殊程序将处理启动 X11 服务器和使用该服务器的第一个 GUI 应用程序,因此该程序可以将适当的环境设置传递给应用程序进程。第一个应用程序的任何子进程都会自动继承环境变量。

(X11 会话设置可以而且通常会做更多的事情,但这绝对是它需要做的最低限度。)

相关内容