XOrg를 사용하여 루트 Rootfs를 빌드하면 GUI가 표시되지 않습니다.

XOrg를 사용하여 루트 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

이 오류 메시지는 다음 쉘 스크립트 명령에 해당하는 프로그래밍 언어에 의해 생성됩니다.

echo "Can't open display: $DISPLAY" >&2

따라서 두 번째 콜론 뒤에 아무것도 표시되지 않는다는 사실은 DISPLAY환경 변수가 설정되지 않았거나 null 값으로 설정되었음을 의미합니다.

X11 서버를 시작할 때 세션 쿠키도 생성됩니다(안전하지 않은 X11 인증이 비활성화되지 않은 경우). X11 응용 프로그램을 실행하는 사용자에게 이 쿠키의 복사본을 전달하려면 무언가가 있어야 합니다. 쿠키는 일반적으로 환경 변수가 가리키는 파일에 배치되거나 XAUTHORITY해당 변수가 정의되지 않은 경우~/.Xauthority 사용자의 홈 디렉터리에 있는 파일에 배치됩니다.

이것이 X11 서버 시작이 일반적으로 특수 프로그램에 의해 처리되는 이유입니다. 이미 로컬로 텍스트 모드로 로그인한 사용자를 위해 X11 세션을 시작하려는 경우 startx(이것은 하위 수준 도구를 사용하는 스크립트입니다) xinitX 디스플레이 관리자(보통 *dm, gdm, sddm) xdm, 처음에는 GUI 로그인 프롬프트를 표시한 다음 사용자 로그인을 처리합니다.

두 경우 모두 특수 프로그램이 X11 서버 시작과 서버를 사용하는 첫 번째 GUI 응용 프로그램을 처리하므로 프로그램은 적절한 환경 설정을 응용 프로그램 프로세스에 전달할 수 있습니다. 첫 번째 애플리케이션의 모든 하위 프로세스는 자동으로 환경 변수를 상속합니다.

(X11 세션 설정은 일반적으로 더 많은 작업을 수행할 수 있지만 이는 수행해야 하는 최소한의 작업입니다.)

관련 정보