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

したがって、2番目のコロンの後に何も表示されないという事実は、DISPLAY環境変数が設定されていないか、null値に設定されていることを意味します。

X11サーバーを起動すると、セッションCookieも作成されます(安全でないX11認証が無効になっていない場合)。 X11アプリケーションを実行しているユーザーにこのCookieのコピーを渡すには、何かが必要です。クッキーは通常、環境変数が指すファイルに配置されるか、XAUTHORITYその変数が定義されていない場合は、~/.Xauthorityユーザーのホームディレクトリにあるファイルに配置されます。

これがX11サーバーの起動が通常特別なプログラムによって処理される理由です。すでにローカルでテキストモードでログインしているユーザーに対してX11セッションを開始したい場合startx(これは低レベルツールを使用するスクリプトです)、xinitXディスプレイマネージャ(通常*dm、、、)、最初にGUIログインプロンプトを表示してからユーザーログインを処理しますgdm。します。sddmxdm

どちらの場合も、特別なプログラムがX11サーバーの起動とサーバーを使用する最初のGUIアプリケーションを処理するため、プログラムは適切な設定をアプリケーションプロセスに渡すことができます。最初のアプリケーションのすべての子プロセスは自動的に環境変数を継承します。

(X11セッションの設定は通常より多くの作業を実行できますが、これは実行する必要がある最小限の作業です。)

関連情報