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


55

問題が発生した場合、ユーザーをGUIセッションにサインインし、Unity(または他のウィンドウマネージャー)を取得してデスクトップを表示するために、裏で何が起こるかを理解するのが良いかもしれません。

回答:


86

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 、また:Ubuntu 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シェルスクリプトは、引数グラムを使用して実行されるnome-session --session=ubuntu (原文のまま.--「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、彼らが存在する場合、内容使用setxbmapでキーボードマップロード /etc/X11/Xkbmapとは$HOME/.Xkbmap
  • XKBを使用していないことは、既存のに対して、xmodmapを使用している場合/etc/X11/Xmodmapと、$HOME/.Xmodmap
  • でスクリプトを実行し/etc/X11/xinit/xinitrc.dます。
  • /etc/X11/Xsession.d/*のオプションを使用して、Xsessionスクリプトを実行します/etc/X11/Xsession.options

    これらの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変数UPSTARTをに設定します1/etc/X11/Xsession.d/99upstartその変数をチェックし、設定されている場合、に設定されinit --user ている他の項目に置き換え$STARTUPます。したがって、ユーザーモードのupstartは、これらのupstartジョブをで開始し/usr/share/upstart/sessionsます。それらの1つはgnome-session.confgnome-sessionを開始します。

すでに行われていない限り、最後に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の1つの例を次に示します。

$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を実行するかを決定します。ミスを犯し、Unityが実行できて実行できないと言った場合、問題があります。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で独自のグラフィックドライバーの使用を促す場合があります。


システムでAwesome、Unity、またはcompizが実行されているかどうかを確認するにはどうすればよいですか?
ジェームズ

@jamesプロセスリストでcompizまたはawesomeを確認できます。これは、などのコマンドで取得できps auxます。Sessionパラメータのファイル〜/ .dmrcを確認することもできますcat ~/.dmrc。上記を参照。。セッション= Ubuntuのは、あなたが一緒のcompizと団結を使用している(そしてそれがデフォルトだ意味
ジョン・Sグルーバー

必要な知識がなくてもプロセスを十分に把握できる、例外的な答え!あなたの説明に続いて、私xsessions/ubuntu.desktopは別のファイルにそれを複製しようとしましたが、同じ動作で終わることを望んでいましたが、成功しませんでした(この質問の詳細)。デフォルトのubuntu.desktopxsessionに関して特別なものはありますか?
広告N

確かに、できれば+10になります。ドキュメントよりも良い...
リングØ17年

これを書き留めてくれてありがとう。新しいUbuntuバージョンでの状況の変化について更新できますか?
exic
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.