最近自己折腾窗口管理器,看了很多linux启动的资料,感觉这篇文章分析的最详细,转过来收藏。
原文地址:http://hi.baidu.com/loring_zhang/blog/item/cb126dfdcf489f77034f56bf.html
============================================
1,如果你没有更改系统相关配置的情况下,系统使用GDM方式来启动图形界面(因为ubuntu默认运行级别为2,在/etc/rc2.d 目录中包含了GDM的启动脚本)。事实上,GDM管理的不只是X的启动,还有登录,注销,挂起等一系列操作。
它的配置文件:/etc/gdm/gdm.conf
/etc/gdm/gdm.conf --> X #启动X
--> /etc/gdm/Xsession #启动X会话
2,若你听过"startx"这个脚本的话,也可以用它来启动图形界面。将当前的会话转换到控制台下,这时X还在运行中,你可以用下面的命令还停止X,
sudo /etc/init.d/gdm stop
在控制台下输入"startx"又可以回到图形界面下,不过,它执行的是和GDM不一样的过程
分析"startx"脚本,可以看到调用xinit的过程,xinit用到的配置文件
/etc/X11/xinit/xserverrc --> X #启动X
/etc/X11/xinit/Xinitrc --> /etc/X11/Xsession #启动X会话
从上面看来,以上两种方法都实现了上面的两个部分,一就是启动X,另一个就是启动X会话,分析Xsession这个文件,它们都包含了以下几个系统文件以及主文件夹下的配置文件(没有设置的话都为空)
Xsession --> /etc/X11/Xsession.option
--> /etc/X11/Xresources
Xsession --> /etc/X11/Xsession.d #该文件是一个目录
Xsession.d目录下有好些个文件,
20x11-common_process-args
30x11-common_xresources
40x11-common_xsessionrc
50x11-common_determine-startup
55gnome-session_gnomerc
60seahorse
60xdg-user-dirs-update
80im-switch
90-console-kit
90x11-common_ssh-agent
99x11-common_start
其中可以发现有一个最重要的55gnome-session_gnomerc的会话,它就是来启动gnome桌面的。这里面还有好些个其它文件,我也不知道是用来干什么的。
打开55gnome-session_gnomerc,可以看到它是指向/usr/bin/gnome-session,可以man gnome-session,得到下面的提示:
The gnome-session program starts up the GNOME desktop environment.
This command is typically executed by your login manager (either gdm,
xdm, or from your X startup scripts). It will load either your last
session, or it will provide a default session for the user as defined
by the system administrator (or the default GNOME installation on your
system).
...
gnome-session uses the contents of the ~/.gnome2/session file for
starting up as specified by the "CurrentSession" key in the
~/.gnome2/session-options file. Various default values are provided in
case the file entry does not exist.
If the session file does not exist, gnome-session will use the contents
of the /usr/share/gnome/default.session file.
可以看到主文件夹下并没有~/.gnome2/session和~/.gnome2/session-options文件,可见gnome使用了它的各种默认参数,但是存在/usr/share/gnome/default.session文件, 可以打开来看。
# (with Priority = 0 first) and defaults to 50.
# The id provides a name that is unique within this file and passed to the
# app as the client id which it must use to register with gnome-session.
# The clients must be numbered from 0 to the value of num_clients - 1.
[Default]
num_clients=4
0,id=default0
0,Priority=10
0,RestartCommand=gnome-wm --sm-client-id default0
1,id=default1
1,Priority=40
1,RestartCommand=gnome-panel --sm-client-id default1
2,id=default2
2,Priority=40
2,RestartCommand=nautilus --no-default-window --sm-client-id default2
3,id=default3
3,Priority=60
3,RestartCommand=gnome-cups-icon --sm-client-id default3
可以发现里面写了好几个client,第一个gnome-wm就是最重要的的WM(gnome自带的window manager),也就是metacity,第二个和第三个就不用说了,gnome-panel指的是面板,nautilus指的是文件管理器,第四个就 不知道了。
metacity的定制性不强,上网时发现有很多人用fvwm,Sawfish(可用LISP配置的窗口管理器)等实现个性化设置。