分类: LINUX
2010-05-19 11:02:13
分析平台:Ubuntu 10.04
startx方式启动X的核心是构建"xinit"的运行环境(环境变量)和运行参数。
startx可以带参数,也可以不带参;两者最终的区别只体现在"xinit"的运行环境(环境变量)和参数。
以下,我以不带参的形式分析startx的执行过程。
首先,让我们来看看startx的目标,就是构建出一条"xinit"的命令,形式如下(分析请参考man page):
xinit [ [ client ] options ... ] [ -- [ server ] [ display ] options ... ] 实例: #xinit -- /usr/local/bin/Xvnc :1 or xinit -geometry =80x65+10+10 -fn 8x13 -j -fg white -bg navy or xinit /usr/ucb/rsh fasthost cpupig -display ws:1 -- :1 -a 2 -t 5 |
其次,再看看xinit的功能。
xinit的功能是在非DM(display manager)的工作模式下,启动X和第一个X client程序,当client退出时,xinit会杀死X进程,然后终止运行。
而第一个X client程序可以是二进制程序,也可以是shell脚本。
接下来,一起进入代码了解一下startx的X client程序和X服务器程序分别是什么。
userclientrc=$HOME/.xinitrc
enable_xauth=1 ....(带参形式相关代码忽略) # process client arguments # if no client arguments either, use rc file instead clientargs=$defaultclientargs # process server arguments # if no server arguments or display either, use defaults serverargs=$defaultserverargs |
从以上的代码我们可以知道,
client程序按优先级顺序依次是(三选一)
/etc/X11/xinit/xinitrc->/etc/X11/Xsession->/etc/X11/Xsession.d/*
server程序按优先级顺序依次是(三选一)
#!/bin/sh exec /usr/bin/X -nolisten tcp "$@" |
从"/etc/X11/xinit/xserverrc"的内容我们可以看到,在Ubuntu中,X默认情况下不开TCP 6000端口,所以在使用XDCMP来进行远程显示的时候,需要在服务器端修改X启动选项。详情请参考<<打开Ubuntu的远程X服务>>