X system 配置文件执行流程分析
1.startx启动流程
/usr/bin/startx +->/etc/X11/xinit/xinitrc |->/etc/X11/Xsession |->~/.xinitrc |->/etc/X11/xinit/xserverrc |->/usr/bin/X11/X ->~/.xserverrc
startx脚本会分析用户主目录下是否存在特殊配置文件,如果不存在则使用系统默认脚本。默认脚本分两个部份,xinitrc启动客户端部份,xserverrc启动服务器端部份。
xserverrc内容仅为启动X。xinitrc会执行/etc/X11/Xsession,而后进入session分析。
2.Xsession
/etc/X11/Xsession -> /etc/X11/Xsession.d/*
/etc/X11/Xsession和/etc/init.d/rc很类似,是用来循环依次启动其他脚本的控制脚本。他负责启动/etc/X11/Xsession.d/下的所有文件。其中50xfree86-common_determine-startup文件会依次检测以下3个文件,并且设置到STARTUP变量中。x-session-manager;x-window-manager;x-terminal-emulator;最后99xfree86-common_start文件会执行exec $STARTUP;完成整个系统的启动过程。
3.gdm
gdm服务被/etc/init.d/gdm启动,而后读取/etc/gdm/gdm.conf配置自身。后面是基于理论分析,没有加以验证。
|-gdm---gdm-+-Xorg
| `-x-session-manag-+-scim
| `-ssh-agent
上面是pstree的结果,第1个gdm是/etc/init.d/gdm,第2个gdm是/usr/bin/gdm。gdm先启动一个X作为服务端,否则自身也无法以图形方式显示登录界面。而后gdm成为此X界面的唯一用户,显示登录系统。在用户登录后,gdm启动/etc/gdm/Xsession。这个脚本的内容和/etc/X11/Xsession非常类似,我怀疑为什么他们不用链接的方式(可能是因为包的关系?)。这时整个启动活动就结束了。