Page 1 of 1

系统启动到X桌面过程请教

Posted: Wed Jul 15, 2009 11:03 pm
by lofeng
由于我来自内陆,只有简体输入法,还请谅解~~

启动到X桌面,有两种方式:
1. 通过终端登录后,用startx 来启动(其实是使用xinit来实现启动X桌面的)。
通过这种方式启动到X桌面比较简单
通过vim /usr/bin/startx得知,这种方式可以通过设置 ~/.xinitrc 来设置自己需要的变量和启动的相关程序,当然,也可以在/etc/X11/xinit/xinitrc中来设置自己需要的变量和启动相关的程序。
userclientrc=$HOME/.xinitrc
sysclientrc=/etc/X11/xinit/xinitrc

userserverrc=$HOME/.xserverrc
sysserverrc=/etc/X11/xinit/xserverrc
没有明白xserverrc的具体作用,我的系统里没有这两个文件,用的也很好。估计影响不大

/etc/X11/xinit/xinitrc文件中的部分内容,这几个文件我的系统中也没有,不知是为何。
userresources=$HOME/.Xresources
usermodmap=$HOME/.Xmodmap
xinitdir=/etc/X11
sysresources=$xinitdir/Xresources
sysmodmap=$xinitdir/Xmodmap

2. 通过X Display Manager来启动
我用的是kdm,由于不清楚通过这种方式来启动X桌面会读取哪些配置文件
先说下我通过相关文件知道的:
通过kdm来启动X桌面,当然会读取kdm的配置文件,查看了下估计是
/usr/share/config/kdm/Xsession
这个文件很重要,通过该文件可知该方式中会读取哪些文件
下面两个引用指明了使用bash时会读取哪些配置文件
[ -f /etc/profile ] && . /etc/profile
if [ -f $HOME/.bash_profile ]; then
. $HOME/.bash_profile
elif [ -f $HOME/.bash_login ]; then
. $HOME/.bash_login
elif [ -f $HOME/.profile ]; then
. $HOME/.profile
fi
[ -f /etc/xprofile ] && . /etc/xprofile
[ -f $HOME/.xprofile ] && . $HOME/.xprofile

下面这个引用中指明了kdm会根据我们选择的session来执行相应的动作
在我的系统中,kdm给出的界面中有四种session选择:failsafe、default、custom、KDE 4.2(previos) ,前三种从代码中能直接看出读取的是哪个配置文件。但是对于第四种,就有点迷糊了,应该是红色的代码实现该功能。推测应该会到/etc/X11/Sessions下面去寻找具体的文件,具体过程不明。
case $session in
"")
exec xmessage -center -buttons OK:0 -default OK "Sorry, $DESKTOP_SESSION is no valid session."
;;
failsafe)
exec xterm -geometry 80x24-0-0
;;
custom)
exec $HOME/.xsession
;;
default)
exec /usr/bin/startkde
;;
*)
eval exec "$session"
;;
esac
exec xmessage -center -buttons OK:0 -default OK "Sorry, cannot execute $session. Check $DESKTOP_SESSION.desktop."

这样这个过程就比较明朗了,但是,在系统将控制权交给kdm之前,可有做过跟X桌面有关的配置工作?或者说,在系统将控制权交给kdm之后,kdm是否直接读取/usr/share/config/kdm/Xsession?如果不是,会先读取哪些文件?

从这里的分析来看,/etc/X11/Sessions/Xsession貌似没有什么用,真的是没有什么用处的么?


另外,我的,/etc/X11/Sessions/kde-4.2文件内容如下:
#!/bin/sh
exec /usr/bin/startkde
这样看来跟default session一样,没有什么差别了

Re: 系统启动到X桌面过程请教

Posted: Thu Jul 16, 2009 11:27 am
by paar
這是個有點深度的好問題,
看來您研究的差不多了,
您的 config/kdm 在 /usr/share 下?
我的是在 /usr/kde/3.5/share 下,
您 prefix 過了?

Re: 系统启动到X桌面过程请教

Posted: Sat Jul 18, 2009 9:35 pm
by lofeng
paar wrote:這是個有點深度的好問題,
看來您研究的差不多了,
您的 config/kdm 在 /usr/share 下?
我的是在 /usr/kde/3.5/share 下,
您 prefix 過了?
我安装的是KDE4.2,可能是由于这个原因造成目录的差异

Re: 系统启动到X桌面过程请教

Posted: Sun Jul 19, 2009 3:58 pm
by lofeng
目前我的系统是这样启动的:
在/etc/inittb中默认的启动级别是3,但是运行过#rc-update add xdm default
所以虽然默认的运行级别是3,但是仍然能通过kdm登录进入X Window
此时也可以通过console 登录(root用户),然后#startx也可进入X Window,但是如果是以普通用户登陆),#startx是不能进入X Window
————————————————————————————————————————————————————————————————

使用startx来启动X Window整个过程比较好理解,这个网上也有很多分析
只是在我的/etc/X11/目录下有些文件不存在,如xinit/xserverrc、Xresources、Xmodmap
————————————————————————————————————————————————————————————————

但是通过kdm来登录X Window却有点不好理解。
系统启动后,会通过/etc/init.d/xdm来启动kdm,但是这个过程中,会读取哪些文件,读取的次序又是怎样的,则不是很清楚。
/usr/share/config/kdm/Xsession这个文件是比较重要的文件,我前面也提到过,但是在哪个文件中#source /usr/share/config/kdm/Xsession的呢?
还有具体是在什么地方启动X server也不是很明晰,不像startx中有很明确的xinit指令来启动Xserver