Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1229080
  • 博文数量: 233
  • 博客积分: 6270
  • 博客等级: 准将
  • 技术积分: 1798
  • 用 户 组: 普通用户
  • 注册时间: 2010-01-26 08:32
文章分类

全部博文(233)

文章存档

2011年(31)

2010年(202)

我的朋友

分类: LINUX

2010-05-19 11:02:13

分析平台:Ubuntu 10.04

  • startx方式启动X

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
sysclientrc=/etc/X11/xinit/xinitrc


userserverrc=$HOME/.xserverrc
sysserverrc=/etc/X11/xinit/xserverrc
defaultclient=xterm
defaultserver=/usr/bin/X
defaultclientargs=""
defaultserverargs=""
defaultdisplay=":0"
clientargs=""
serverargs=""

enable_xauth=1

....(带参形式相关代码忽略)

# process client arguments
if [ x"$client" = x ]; then
    client=$defaultclient

    # if no client arguments either, use rc file instead
    if [ x"$clientargs" = x ]; then
        if [ -f "$userclientrc" ]; then
            client=$userclientrc
        elif [ -f "$sysclientrc" ]; then
            client=$sysclientrc
        fi

        clientargs=$defaultclientargs
    fi
fi

# process server arguments
if [ x"$server" = x ]; then
    server=$defaultserver

    # if no server arguments or display either, use defaults
    if [ x"$serverargs" = x -a x"$display" = x ]; then
        # For compatibility reasons, only use xserverrc if there were no server command line arguments
        if [ -f "$userserverrc" ]; then
            server=$userserverrc
        elif [ -f "$sysserverrc" ]; then
            server=$sysserverrc
        fi

        serverargs=$defaultserverargs
        display=$defaultdisplay
    fi
fi

从以上的代码我们可以知道,

client程序按优先级顺序依次是(三选一)

    • $HOME/.xinitrc(用户可以定制x client程序)
    • /etc/X11/xinit/xinitrc (系统默认的x client程序)
    • xterm

        /etc/X11/xinit/xinitrc->/etc/X11/Xsession->/etc/X11/Xsession.d/*

server程序按优先级顺序依次是(三选一)

    • $HOME/.xserverrc
    • /etc/X11/xinit/xserverrc

      #!/bin/sh

      exec /usr/bin/X -nolisten tcp "$@"

    • /usr/bin/X

从"/etc/X11/xinit/xserverrc"的内容我们可以看到,在Ubuntu中,X默认情况下不开TCP 6000端口,所以在使用XDCMP来进行远程显示的时候,需要在服务器端修改X启动选项。详情请参考<<打开Ubuntu的远程X服务>>

 

  • gdm方式启动X
阅读(1367) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~