トラブルが発生した場合、ユーザーをGUIセッションにサインインし、Unity(または他のウィンドウマネージャー)を取得してデスクトップを表示するために、裏側で何が起こるかを理解するとよいでしょう。
イベントのチェーンは次のとおりです。
カーネルはプロセス番号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
サービスユニットに変換されると予想できます。
マニュアルページ: 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')
ログ:?
エラーログ:~/.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でキーボードマップをロードします。/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
は変数UPSTART
を1
に設定します。 /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は、それをセッションラッパーと見なします。
マンページ: 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で独自のグラフィックドライバーの使用を促すことがあります。