xinit启动X Window System过程文档格式.docx
《xinit启动X Window System过程文档格式.docx》由会员分享,可在线阅读,更多相关《xinit启动X Window System过程文档格式.docx(15页珍藏版)》请在冰豆网上搜索。
X"
状的鼠标。
那么怎样才能进入DesktopEnvironment呢?
让我们来分析一下startx命令的运行情况吧。
通过分析startx命令文件的内容,得知startx主要是置Xclient和Xserver所在的位置,并处理相关参数,最后交给xinit处理。
可以看出startx设置Xclient的位置是先搜寻$HOME/.xinitrc,然后是/etc/X11/xinit/xinitrc;
设置Xserver的位置是先搜寻$HOME/.xserverrc,然后是/etc/X11/xinit/xserverrc。
即相当于运行了以下命令:
xinit/etc/X11/xinit/xinitrc--/etc/X11/xinit/xserverrc
进一步分析:
xinit/etc/X11/Xsession--/usr/bin/X11/X-dpi100
Xsessin是一个重要的文件,为什么要怎么说呢?
因为不管是通过DisplayManager登录X,还是通过xinit(startx)登录X,它都会被执行。
Xsession是一个全局文件。
Xsession文件中以下内容:
/usr/bin/x-session-manager/*启动DesktopEnvironment*/
/usr/bin/x-window-manager/*启动WindowManager*/
/usr/bin/x-terminal-emulator/*启动Terminal*/
这就是为什么我们可以用一个startx命令直接进入X的原因所在了。
如果我们要进入GNOME我们只需要将/usr/bin/x-session-manager所链接的目标文件改为/usr/bin/gnome-session,然后把/usr/bin/x-window-manager所链接的目标文件改为/usr/bin/metacity,把/usr/bin/x-terminal-emulator所链接的目标文件改为/usr/bin/gnome-terminal就可以了
弄清楚了以上的内容,我们就可以修改$HOME/.xinitrc,通过xinit来启动DesktopEnvironment了,下面以启动GNOME为例:
首先在$HOME下创建.xinitrc文件,然后添加以下内容:
gnome-session&
metacity/*除了最后一个命令在前台运行以外,其他的都应运行在后台*/
保存后,你就可以在终端通过执行xinit来启动GNOME了,是不是很酷呢?
利用xinit启动X的时候应注意,如果第一个运行的Xclient结束,xinit将自动结束X,返回到CLI。
下面以具体的例子来说明:
当不存在$HOME/.xinitrc时,执行xinitmetacity,将会出现一个可移动的xterm(无$HOME/.xinitrc,xinit默认启动xterm),当然也有一个X
server。
关闭xterm将退出X,因为xterm是第一个运行的Xclient。
当存在$HOME/.xinitrc且包含如下内容:
xeyes&
metacity&
xterm
执行xinit将会出现一个xterm和一个xeyes,关闭xterm将退出X,因为其他的Xclient(xeyes、metacity)都是运行在后台的,而xterm是前台运行的第一个Xclient。
同理,我们也可以通过以下的命令来启动DesktopEnvironment:
xinitgdm
xinit/etc/X11/Xsession
=========================================
有关XWinowSystem的一些概念,你还是找相关的文献来看吧,我的目标就是讨论下如何设置和启动你的XWindowsSystem。
首先你要懂得如何配置你的X配置的文件/etc/X11/XF86Config(orXF86Config-4),这个文件配置和它的配置工具不在讨论的行列中。
好多天前,我看了xdm/gdm/kdm这方面的东西,也看了些它们的man页,当然也找了点相关的资料来looklook,虽然我还不很了解,但还是知道了一些,拿出来献丑了。
呵呵,我的原则就是:
好东西大家一起分享。
1、我们先不讨论xdm/gdm/kdm这些东西。
而是先看看启动X最简直的方式。
首先来认识两个重要的文件,一个是X视窗启动文件--xinitrc,另外一个就是X视窗资源文件--Xdefaults.
[1]X视窗启动文件--xinitrc
事实上,我们一般执行startx来启动XWindowSystem,其中startx就是xinit的前端界面[front-end].倘若我们以startx或xinit启动X,这指令会启动Xserver并且会执行$HOME/.xinitrc文件内的所设置的指令。
倘若$HOME没有这个文件,则系统会使用内定的的配置文件/usr/XR116/lib/X11/xinit/xinitrc。
而事实上xinitrc文件一般只包含有启动X时所要执行clients的shellscript,里面定义一些指令和shellscript,让X启动时,可以遵照里面的shellscript来启动必要的应用程序。
例如我的简单而又实用的的$HOME/.xinitrc的内容如下:
代码:
#more.xinitrc
LANG=zh_CN.GB2312
LC_ALL=zh_CN.GB2312
LC_CTYPE=zh_CN.GB2312
KDE_LANG=zh_CN.GB2312
exportLANGLC_ALLLC_CTYPEKDE_LANG
exportXMODIFIERS=@im=Chinput
/usr/bin/chinput&
execkde3
killallchinput
对于更为详细的$HOME/.xinitrc,你可以找更专业的书籍来看,我的目标是越简单越好。
前面的大家应该都比较清楚吧。
先设一些环境变量,再设下一些输入法(我用的是智能五笔),接下来是启动视窗管理程序kde3,注意了:
kde3用shellscript的exec描述所执行的,这造成执行xinit程序的shell会被执行kde3的shell所取代。
所以一旦kde3程序结束,就会跳出shell,相对地,xinit将会跟着结束,XServer将关闭。
这正是XWindowManager执行的方式。
必须确定在.xinitrc中最后执行的是指令是以exec为开头的的命令执行XWindowsManager,而且不应该加上&
放在一些背景执行,不然,那些指令也毫无意义。
后面的killallchinput是告诉要结束chinput,不然极有可能会因为chinput的原因,会造成一些问题。
这是最为简单的桌面设置。
倘若你还要启动更多的程序和设置,都可以在前面加的。
只要你在你的$HOME/.xinitrc文件中稍加增加便可做到,但要记住加在XWindowManager执行段落之前。
[2]X视窗资源文件--Xdefaults
在X的文献中,resources有两种意义。
第一种是指被server管理或建立桌面应用程序使用的东西,例如:
视窗、光标、字体等均属于这种意义。
另外的一种又是指一种可以传递预设置值、参数和其它值给应用程序的方法,比如,可以定义视窗的大小、前景颜色、显示字体、快捷键等。
而在XWindowSystem的操作应用过程中,泛指的resources的意义也局限于第二种,主要是采用resources功能。
在XWindowSystem的资源文件Xdefaults中,主要是设置合适自己喜欢的应用程序的操作操控环境或界面。
一般会执行X后,会自动读取$HOME/.Xdefaults.具体的内容我在这里不给出,因为这个东西我感觉还不是很重要。
以后有时间的话再详细写写这个东西。
呵呵,在xterm视窗中按有一个小技巧:
你按住Ctrl+鼠标右键会跳出一些字体等设置的东西,按住Ctrl+鼠标左键会跳出显示xterm应用程序的主菜单。
另外,除了.Xdefaults资源可用处,还有一些应用程序会自己产生的的资源文件,一般放在
/usr/XR116/lib/X11/app-defaults中,并以这些程序名称的大写文件名命名。
比如,Xclok时钟程序的资源文件就是Xclock。
其它的你自己看一下就会明白了。
你可以直接修改这些应用程序的的资源文件,作为系统内定的应用程序的样式。
不一定都要非得修改.Xdefaults来完成。
因为.Xdefaults通常是个人爱好而使用环境来设置的东西。
个人的一些小经验,不知道对否?
如果$HOME中存在.xsession这个文件而没有.xinitrc这个文件是,你用startx启动也会读取.xsession,但当存在这两个文件是,就会读取.xsinitrc这个文件。
可能是它优先的原因吧(知道的出来说说吧)。
2、启动我们的XWindowSystem
XWindowSystem的启动方法很多,最学常用的还是上面得到的startx,除此外,还要先执行"
启动X视窗系统,或者执行xinit启动X。
现在的发行版本一般都是以xdm(XDisplayManager)/gdm(GNOMEDisplayManager)/kdm(KDEDisplayManager)启动X,让Linux系统一启动就立即进入XWindowSystem,并以图形模式让用用户来登录(呵呵,像MsWindows吧,这样启动起来)。
倘若你想退出XWindowManager,你可以xterm中执行init3离开。
[1]以xinit/startx来启动X
这是一般的方法:
我在Debain也是经常以这种方式来启动X的。
就是执行/usr/XR116/bin/startx.事实上这个方法就是与直接执行/usr/X11R6/bin/xinit或是/usr/X11R6/bin/X是无异的。
差别在于xinit和"
并不会去执行读取读资源文件而去执行XWindowManager,所以一般的情况你得到的X视窗系统是个非常简朴的的一个X型鼠标指针与简朴的xterm而已。
但xinit就是最标准的X启动方法,估计是绝大部分的系统XWindowSystem都会支持。
它是XWindowSystem核心的程序,而startx仅是个启动xinit的shellscript而已,里面同样定义执行xinit命令以启动X视窗系统。
当一般执行startx时,X启动的过程大约就是这些东西了:
1)xinit启动Xserver程序;
2)Xserver会寻找$HOME/.xinintrc文件,有就执行它,没有就会转到/etc/X11/xinit/xinitrc读取系统内定的启动文件。
3)接着就会读取$HOME/.Xdefaults,倘若没有,就会转到/usr/X11/xinit/Xcilents。
从文件名Xclients看来,这个是用来设置时执行哪些X应用的程序的文件。
性质和xinitrc类似,同样是个shellscript。
但要注意的是:
.Xdefaults是的权限具有755,即可执行。
4)在正常的情况下,$HOME/.xinintrc是用来指派可以让XWindowSystem正常运行的应用程序了。
而.Xdefaults则被建议用来载入X资源设置和应用应用,以适合每个用户本身的喜爱程度而已。
5)Xserver建立一个属于它自己的根视窗(Rootwindows),并设置视窗的背景与执行所指定的应用程序,显示一个大的"
光标,便完成启动了。
6)在Xserver执行的期间,它一直控制着你的鼠标的键盘。
这就是你能在屏幕上移动光标的原因,但由于目前还没有任何Xclient程序要求键盘和鼠标的输入。
所以Xserver只是和鼠标一直移动而已。
而其它的键盘或鼠标输入虽然都经过Xserver处理,但均被视为无作用(因为没有什么xclinet程序所接收)。
这也是X启动的初期,按键盘或鼠标都没有反应的原因。
但如果你是送信号能Xserver而Xclient的话,这下就有会作用了。
比如:
Ctrl+Alt+Backspace即是送给XServer的中断信号,当X启动到中途或者是执行时,只要按下这组合键,便会立即结束Xserver,跳回到commandpromptterminal的状态。
7)接下来,在xinitrc唤起Xserver后,xinit会启动xterm程序。
呵呵,xterm就是XWindowterminal的缩写吧。
它对Xserver而言是一个XClietn程序而已。
要求Xserver建立一个视窗,而且会行告知Xserver在这个视窗中的鼠标和键盘的输入状态(Event),因而启动xterm时便会视窗执行一个shell,内定的就是bash。
当指标被移至视窗之内时,xterm便准备接受输入。
键盘输入会被关到xterm中的shell就如同真的终端机输入一般。
而从shell本身或其副程序的输出则借着xterm显示在视窗上,xterm也接受输入,便得你能设置不同的程序操作参数和进行文本的一些操作,比如copy或paste.对于这些操作,你可以通过在xterm中执行psauxw命令来观察到系统执行这些命令的详细步骤。
[2]以xdm/gdm来启动你的X。
上面说到了以startx来启动你的X,也可通过xdm/gdm来启动你的X来启动你的X,这正是其它一些发行版本的采用的方式。
比如Redhat是gdm,而Mandrake用kdm。
一般的情况,如果你要用调整你系统的run-level。
比如修改你的/etc/inittab,把id:
3:
initdefault中的3改为5。
当系统以xdm/gdm来启动XWindowsSystem。
大约的步骤就是这些了:
1)执行/etc/X11/xdm/Xserver启动X出现console登录的界面(是执行/etc/X11/xdm/GiveConsole&
TakeConsole所产生的)
2)执行/etc/X11/xdm/Xsessions来启动xdm或者是gdm。
如果启动的是xdm,则装入用户家目录上的配置文件,.xsession和.Xclients。
如果是gdm,则装载入/etc/X11/gdm/Sesseion与.Xclients。
到此为止,就会出现X视窗的登录的界面选项。
3)gdm则会检查/etc/X11/gdm/Session目录的Session操作。
比如Fvwm,Wmaker,Default,Failsafe,Gnome,Kde与Default等。
并将显示给用户选择进入那个那个XWindowManager。
其实这些Sessions都是ShellScriptfile。
如果你选择Kde,就进入KDEDeskTopenvironment,选择Gnome就会进入GNOMEDeskTopenvironment了。
4)用户如果选择是的Gnome,在输入用户名和password后,gdmGNOMESession就会找gnomercscript,$HOME/.gnomerc,如果没有这个文件,就会读会系统文件内定的GNOMEresourcefile:
/etc/X11/gdm/gnomerc,并且启动/usr/bin/gnome-session.
这就完成了一个xdm/gdm的过程。
但细心的人会发现,startx会读取$HOME/.xinitrc,而xdm/gdm为什么不会读取这个呢,它又是如何设置根视窗口背景及你的logo和XWindowManager的呢。
其中的原因是因为xdm/gdm改用了/etc/X11/xdm/Setup_0来设置的,例如我的Mandrake90的内容大致如下:
#moreXsetup_0
#!
/bin/sh
#(C)MandrakeSoft
#ChmouelBoudjnah
#
#$Id:
Xsetup_0,v1.82001/09/1918:
49:
29flepiedExp$
if[-f/etc/profile.d/kde.sh];
then
./etc/profile.d/kde.sh
fi
[-z"
$KDEDIR"
]&
&
KDEDIR=/usr
if[-x$KDEDIR/bin/kdmdesktop];
$KDEDIR/bin/kdmdesktop
else
/usr/X11R6/bin/xsetroot-solid"
#21449C"
/usr/X11R6/bin/xconsole-geometry480x130-0-0-daemon-notify-verbose-fnfixed-exitOnFail
if[-x/etc/X11/xinit/fixkeyboard];
then
/etc/X11/xinit/fixkeyboard
但细心的人会发