在封面下登录并启动Unity或其他图形用户界面会发生什么?
当出现问题时,理解在用户签署GUI会话并让Unity(或其他窗口管理器)启动桌面时会发生什么事情可能会很好。
如何使用Ubuntu 12.04-14.04启动桌面用户GUI会话
这是一系列事件:
Ubuntu Linux内核和新贵
内核以进程号1启动init进程。这是Ubuntu 12.04的新贵。
Upstart作业在/etc/init/
man init
页: man init
日志:内核日志( dmesg
;复制到/var/log/syslog
), /var/log/syslog
/var/log/upstart/jobname.log
,由启动的作业确定的其他日志。
资料来源: /etc/init/lightdm.conf
upstart作业执行/usr/sbin/lightdm
。 我们可能期望随着时间的推移将其转换为systemd
服务单元。
Lightdm
man 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是重要的function,特别是对于高级高性能图形。 日志在/var/log/Xorg.0.log
中存储为X.
系统dbus上有关于这个“座位”的通信,并且可能获得用户名。 lightdm使用X来绘制屏幕。 unity-greeter用于协助这个过程。
当您选择使用用户ID的背景图像的各种可能的用户ID时。
lightdm从/usr/share/xsessions/*.desktop
获取潜在窗口管理器/系统的名称。
帐户信息通过dbus上的accountsservice accounts-daemon获取。
lightdm和greeter使用PAM来validation用户身份。 经过身份validation后,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
。
一旦用户通过身份validation,就会删除权限,并将文件写入描述会话的~user/.dmrc
。 例如:
[Desktop] Session=ubuntu
要么
[Desktop] Session=awesome
来自/usr/share/xsessions/*.desktop
的.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脚本使用参数g nome-session --session=ubuntu
(sic .–‘ubuntu’,而不是’unity’)运行
lightdm会话
日志:?
错误日志: ~/.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/Xresources
加载资源(如果存在),使用/etc/X11/Xkbmap
和$HOME/.Xkbmap
的内容加载带有setxbmap的键盘映射; - 如果不使用XKB,则对任何现有的
/etc/X11/Xmodmap
和$HOME/.Xmodmap
- 在
/etc/X11/xinit/xinitrc.d
运行脚本; -
使用
/etc/X11/Xsession.d/*
中的选项运行/etc/X11/Xsession.d/*
的Xsession脚本。其中一个启动ssh-agent(冗余),另一个执行
$HOME/.xsessionrc
。 另一个启动session-dbus(在上面的Xsession.options
文件中允许使用ssh-agent和session-dbus)。 此会话dbus对于有关此单个用户会话的进程之间的通信非常有用。
如果ssh-agent在会话期间的某些时间是ssh-add,那么ssh-agent可以保留会话的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
的其他项。 因此,用户模式新手启动/usr/share/upstart/sessions
那些新手工作。 其中一个是gnome-session.conf
,它启动了gnome-session。
除非已经完成,否则最后lightdm-session启动一个窗口管理器,或者为了统一,上面启动了gnome-session会话管理器。
似乎lightdm-session承担了xsession的传统角色。 其手册页位于http://manpages.ubuntu.com/manpages/precise/man5/Xsession.5.html 。 lightdm认为它是一个会话包装器。
gnome-session会话管理器(Unity和Gnome Shell)
Manpage: http : //manpages.ubuntu.com/manpages/precise/en/man1/gnome-session.1.html
日志:?
来源:手册页
gnome-session用于Unity,但默认情况下不用于awesome,例如。 请参阅上面的.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
日志:?
来源:手册页,配置文件检查
这是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软件来呈现硬件无法实现的function。 它的配置文件比上面的简单。 请参阅上文了解如何启用它。
我们可以从上面的文件中看到gnome-session必须启动设置守护进程,并启动compiz以运行窗口管理器和任何面板。
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配置设置管理器)或gconf-editor更改它们。 插件设置存储在active_plugins下的apps / compiz-1 / general / screen0 / options中。 重复项导致我使用compiz进行段错误。 它们存储在用户的主目录中,如上所述组织在〜/ .gconf /目录中。 实际值存储在%gconf.xml文件中。
从12.10开始,这些插件以二进制forms存储在〜/ .config / dconf / user文件中。 存储设置的dconf或gsettings方法更新。 您可以使用dconf dump /org/gnome/
查看所有这些设置。
Unityshell是这些插件之一。 它使用nux项目作为嵌入式工具包。 使用指定的透明度值在3维空间中的纹理上绘制图像。 这些由compiz处理并发送到llvm或高级图形驱动程序,以使系统的计算机图形硬件组合上的图形引擎并渲染它们。 通常,这与将图像直接渲染到帧缓冲区相反,正如传统上更常做的那样。 这个复杂的事件链需要更高级的驱动程序,有时会提示在Ubuntu中使用专有的图形驱动程序。