web-dev-qa-db-ja.com

ログインしてUnityまたは別のグラフィカルユーザーインターフェイスを起動すると、何が発生しますか?

トラブルが発生した場合、ユーザーをGUIセッションにサインインし、Unity(または他のウィンドウマネージャー)を取得してデスクトップを表示するために、裏側で何が起こるかを理解するとよいでしょう。

55
John S Gruber

Ubuntu 12.04-14.04でデスクトップユーザーGUIセッションを開始する方法

イベントのチェーンは次のとおりです。

Ubuntu Linuxカーネルと新興企業

カーネルはプロセス番号1としてinitプロセスを開始します。これはUbuntu 12.04の新興企業です。

アップスタートジョブは/etc/init/にあります


マニュアルページ: man init

ログ:カーネルログ(dmesg; /var/log/syslogにコピー)、/var/log/upstart/jobname.log、開始されたジョブによって決定されるその他のログ。

出典:/etc/init/lightdm.conf


Upstartジョブは/usr/sbin/lightdmを実行します。おそらく、これは時間とともにsystemdサービスユニットに変換されると予想できます。

Lightdm


マニュアルページ: man lightdm 、また: buntu Wiki:LightDM

ログ:

/var/log/syslog
/var/log/lightdm/lightdm.log
/var/log/lightdm/*

## for PAM:
/var/log/auth.log

## for the Xorg X server:
/var/log/Xorg.0.log

出典: man lightdm および/var/log/lightdm/lightdm.log


lightdm getは、initプロセスのかなり後期に開始されました。たとえば、システムdbusがすでに起動されている必要があり、ファイルシステムが準備されている必要があり、グラフィック表示システムが準備されている必要があります。

lightdmはxauthorityファイルを作成してからXを起動し、VT 7で起動します。 Alt+Ctrl+F7。 Xが開始されると、lightdmは、Plymouthスプラッシュスクリーンプログラムが終了することを通知します。これは、すべてのtty(1〜6)が開始した後に発生することが不可欠です。

2013年7月以降、Mirのサポートアイテムがlightdmに追加されましたが、14.04の時点ではこれらはデフォルトでデスクトップシステムに使用されません。

Xは可能な限り最新のドライバーを使用しようとします。独自のドライバーは/usr/lib/xorg/modules/からロードされます。多くのデバイスにはカーネルドライバーとxorgドライバーの両方が存在し、xorgドライバーはほぼ確実にカーネルのものを使用していることに注意してください。 driとglxは、特に高度な高性能グラフィックスにとって重要な機能です。 Xのログは/var/log/Xorg.0.logに保存されます。

この「座席」についてシステムdbusを介して通信が行われ、可能なユーザー名が取得されます。 lightdmはXを使用して画面を描画します。 unity-greeterは、プロセスを支援するために使用されます。

さまざまなユーザーIDを選択すると、そのユーザーIDの背景画像が使用されます。

lightdmは、/usr/share/xsessions/*.desktopから潜在的なウィンドウマネージャー/システムの名前を取得します。

アカウント情報は、dbus経由のaccountsservice accounts-daemonを介して取得されます。

lightdmとグリーターはPAMを使用してユーザーを認証します。認証されると、PAMは--loginオプションを使用してgnome-keyring-daemonデーモンを起動し、ユーザーのパスワードを入力して、ユーザーのログインキーリングがあればロックを解除できるようにします。詳細については、 https://live.gnome.org/GnomeKeyring/Pam およびman 8 pam_unixを参照してください。 PAMは、ログ情報を/var/log/auth.logに保存し、/etc/pam.conf(ほぼ空)と/etc/pam.d/*によって制御されます。特に、/etc/pam.d/lightdmおよび/etc/pam.d/lightdm-autologinを参照してください。

ユーザーが認証されると、特権が削除され、セッションを説明するファイルが~user/.dmrcに書き込まれます。例えば:

[Desktop]
Session=ubuntu

または

[Desktop]
Session=awesome

.desktopからの/usr/share/xsessions/*.desktopファイルが残りの起動シーケンスを決定するようになりました。

たとえば、Unityの場合は次のとおりです。

[Desktop Entry]
Name=Ubuntu
Comment=This session logs you into Ubuntu
Exec=gnome-session --session=ubuntu
TryExec=unity
Icon=
Type=Application
X-Ubuntu-Gettext-Domain=gnome-session-3.0

/usr/sbin/lightdm-session Shellスクリプトは、引数gnome-session --session=ubuntuで実行されます(sic .-- 'unity'ではなく 'ubuntu')

lightdm-session


ログ:?
エラーログ:~/.xsession-errors
プロセスログの開始:~/.cache/upstart/*
出典:/usr/sbin/lightdm-session


/usr/sbin/lightdm-sessionは次の手順を実行します。

実行:

  • /etc/profile, $HOME/.profile
  • /etc/xprofile $HOME/.xprofile;
  • /etc/X11/Xresourcesおよび$HOME/.Xresourcesからリソースをロードします(存在する場合)。/etc/X11/Xkbmapおよび$HOME/.Xkbmapの内容を使用してsetxbmapでキーボードマップをロードします。
  • xKBを使用しない場合、既存の/etc/X11/Xmodmapおよび$HOME/.Xmodmapに対してxmodmapを使用します
  • /etc/X11/xinit/xinitrc.dでスクリプトを実行します。
  • /etc/X11/Xsession.d/*のオプションを使用して、/etc/X11/Xsession.optionsでXsessionスクリプトを実行します。

    これらの1つはssh-agent(冗長)を起動し、別の1つは$HOME/.xsessionrcを実行します。もう1つはsession-dbusを開始します(上記のXsession.optionsファイルで許可されているssh-agentとsession-dbusの両方)。このセッションdbusは、このシングルユーザーセッションに関するプロセス間の通信に役立ちます。

ssh-agentは、セッション中にssh-addされた場合にセッションのsshキーを保持できますが、gnome-keyring-daemonは同じことを行います。

/etc/X11/Xsession.d/50_check_unity_support/usr/lib/nux/unity_support_testを実行し、失敗した場合はLIBGL_ALWAYS_SOFTWARE=1を環境にエクスポートし、llvmpipeを使用してデスクトップをソフトウェアレンダリングします。

Ubunu 13.10以降:/etc/X11/Xsession.d/00upstartは変数UPSTART1に設定します。 /etc/X11/Xsession.d/99upstartはその変数をチェックし、設定された場合はinit --user$STARTUPに設定された他の項目に置き換えます。したがって、ユーザーモードのupstartは、/usr/share/upstart/sessionsでそれらのupstartジョブを開始します。それらの1つはgnome-sessionを開始するgnome-session.confです。

すでに行われていない限り、最後にlightdm-sessionがウィンドウマネージャーを起動します。または、単一の場合、上記はgnome-sessionセッションマネージャーを起動します。

Lightdm-sessionは従来のxsessionの役割を担っているようです。そのmanページは http://manpages.ubuntu.com/manpages/precise/man5/Xsession.5.html にあります。 lightdmは、それをセッションラッパーと見なします。

gnome-sessionセッションマネージャー(UnityおよびGnome Shells)


マンページ: http://manpages.ubuntu.com/manpages/precise/en/man1/gnome-session.1.html
ログ:?

出典:manページ


gnome-sessionはUnityに使用されますが、たとえばデフォルトでは素晴らしいものには使用されません。上記の.desktopファイルを参照してください。

gnome-sessionは、指定されたプログラムを/ usr/share/gnome-session/sessions /から開始し、アプリケーションを〜/ .config/autostart /および/ etc/xdg/autostartから開始します。

/ etc/xdg/autostartの例を次に示します。

$cat /etc/xdg/autostart/nm-applet.desktop
[Desktop Entry]
Name=Network
Comment=Manage your network connections
Icon=nm-device-wireless
Exec=nm-applet
Terminal=false
Type=Application
NoDisplay=true
NotShowIn=KDE;
X-GNOME-Bugzilla-Bugzilla=GNOME
X-GNOME-Bugzilla-Component=general
X-GNOME-Autostart-enabled=true
X-Ubuntu-Gettext-Domain=nm-applet

別の/etc/xdg/autostart/gnome-keyring-ssh.desktopは、-startオプションを使用してgnome-keyring-daemonを起動し、そのデーモンプロセスの開始を完了し、環境に関する重要な情報を保存します。 ssh。

Ps auxリストから、gnome-sessionはdbus-launchでウィンドウマネージャーを起動するようです。

ウィンドウマネージャー

素晴らしいウィンドウマネージャー


マニュアルページ: http://manpages.ubuntu.com/manpages/precise/en/man1/awesome.1.html
ログ:?

出典:manページ、設定ファイルの検査


Lightdm-sessionが使用する/ usr/share/xsessions /のawesome.desktopファイルは次のとおりです。

[Desktop Entry] 
Encoding=UTF-8
Name=awesome
Comment=Highly configurable framework window manager
TryExec=awesome
Exec=awesome

ご覧のとおり、このエントリにより、素晴らしいウィンドウマネージャが実行されます。 awesomeパッケージの/etc/xdg/awesome/rc.luaを含む独自の構成ファイルを読み取ります。 $ HOME/.config/awesome/rc.luaで設定できます。

団結


出典:設定ファイルの検査


/ usr/share/xsessions /にあるubuntu.desktopファイルは次のとおりです。

[Desktop Entry]
Name=Ubuntu
Comment=This session logs you into Ubuntu
Exec=gnome-session --session=ubuntu
TryExec=unity
Icon=
Type=Application
X-Ubuntu-Gettext-Domain=gnome-session-3.0

これにより、/ usr/share/gnome-session/sessions/ubuntu.sessionに記述されているgnomeセッションが開始されます

そのファイルは次のとおりです。

[GNOME Session]
Name=Ubuntu
RequiredComponents=gnome-settings-daemon;
RequiredProviders=windowmanager;panel;
DefaultProvider-windowmanager=compiz
DefaultProvider-panel=compiz
IsRunnableHelper=/usr/lib/nux/unity_support_test
FallbackSession=ubuntu-2d
DesktopName=Unity

12.04でgnome-sessionによって実行されるIsRunnableHelperプログラムは、Unityを実行できるか、ubuntu-2dを実行するかを決定します。ミスをしてユニティが実行できて、実行できないと言う場合、問題があります。もしそうなったら、lightdmでubuntu-2dを手動で選択してください。リターンコードを返しますが、-pオプションを指定して実行することで、何をしているのかを確認できます。

$ /usr/lib/nux/unity_support_test -p
OpenGL vendor string:   X.Org R300 Project
OpenGL renderer string: Gallium 0.4 on ATI RS690
OpenGL version string:  2.1 Mesa 8.0.2

Not software rendered:    yes
Not blacklisted:          yes
GLX fbconfig:             yes
GLX texture from pixmap:  yes
GL npot or rect textures: yes
GL vertex program:        yes
GL fragment program:      yes
GL vertex buffer object:  yes
GL framebuffer object:    yes
GL version is 1.4+:       yes

Unity 3D supported:       yes

12.10以降では、サポートされていないハードウェアはllvmpipeソフトウェアを使用して、ハードウェアができないことをレンダリングします。その構成ファイルは上記よりも簡単です。有効にする方法については、上記を参照してください。

上記のファイルから、gnome-sessionは設定デーモンを起動し、ウィンドウマネージャーとパネルを実行する目的でcompizを起動する必要があることがわかります。

コンピズ


マニュアルページ: http://manpages.ubuntu.com/manpages/precise/en/man1/compiz.1.html
ログ:?
出典: http://en.wikipedia.org/wiki/Compiz 、ファイルシステム検査


Compizが開始されると、さまざまなプラグインが実行されます。 12.10より前は、これらを定義するためにgnome-settingsが使用されます。これらは、ccsm(compiz config settings manager)またはgconf-editorで変更できます。プラグイン設定は、active_pluginsの下のapps/compiz-1/general/screen0/optionsに保存されます。重複により、compizでセグメンテーション違反が発生しました。これらは、上記のように編成された〜/ .gconf /ディレクトリのユーザーのホームディレクトリに保存されます。実際の値は、そこの%gconf.xmlファイルに保存されます。

12.10以降、これらのプラグインは〜/ .config/dconf/userファイルにバイナリで保存されます。設定を保存するdconfまたはgsettingsメソッドは新しいです。これらの設定はすべてdconf dump /org/gnome/で確認できます。

Unityshellはこれらのプラグインの1つです。 nuxプロジェクトを埋め込みツールキットとして使用します。画像は、指定された透明度値で3次元空間のテクスチャに描画されます。これらはcompizによって処理され、llvmまたは高度なグラフィックスドライバーに送信され、システムのコンピューターグラフィックスハードウェアコンポジットにグラフィックスエンジンを搭載してレンダリングします。一般的に、これは、従来行われていたフレームバッファへの画像の直接レンダリングとは対照的です。この複雑なイベントチェーンは、より高度なドライバーを必要とするものであり、Ubuntuで独自のグラフィックドライバーの使用を促すことがあります。

86
John S Gruber