设为首页 加入收藏 网站搜索 繁體中文 中国建站网 — 站长资源平台

全面解读 startx

来源本站整理 作者:佚名 时间:2006-8-1 20:54:49 该文得分0

  总览:
  startx 只是xinit的一个前端工具,它所做的只是设置好一些变量,资源。然后再用xinit 启动X window.
  xinit的命令格式:
  xinit [ [client] clientargs] [-- [server] [display] serverargs]
  startx所做的工作:
  一.获取命令行参数
  1.client段
  clientargs:
  完全从命令行中获取,无默认值
  client:
  如果没有指定,但是已经指定clientargs,则使用/usr/X11R6/bin/xterm
  如果没有指定,且没有指定clientargs,则使用./defaultclientargs,即按以下顺序取值:
  $HOME/.xinitrc -> /usr/X11R6/lib/X11/xinit/xinitrc
  /usr/X11R6/lib/X11/xinit/xinitrc其实就是执行/etc/X11/Xsessions这个脚本
  而/etc/X11/Xsession又会检查$HOME/.xsession,如果存在则把它作为client.
  所以如果$HOME/.xinitrc不存在时,它可以使用$HOME/.xsession;而当$HOME/.xinitrc存在
  时,它并不会使用$HOME/.xsession
  2.server段
  跟client类似
  增加一个display的设置,默认为":0"
  二.设置标志认证
  三.通过xinit启动X
  四.关闭X时,进行一些收尾工作。
  对xinit来说,如果没有指定client,则使用$HOME/.xinitrc,如果这个也不存在则使用xterm;如果没有指定server,则使用$HOME/.xserverc,如果这这个不存在的话则使用X :0。
  所以当由startx启动X时
  client的顺序是: 命令行 -> $HOME/.xinitrc -> $HOME/.xsession -> /usr/X11R6/lib/X11/xinit/xinitrc
  server的顺序是: 命令行 -> $HOME/.xserverrc -> /usr/X11R6/lib/X11/xinit/xserverrc
  以上"->"表示:当前一个不存在时,则取下面一个,直到存在。
  源码:--------------------------------------------------------------------------------
  #!/bin/sh
  # $Xorg: startx.cpp,v 1.3 2000/08/17 19:54:29 cpqbld Exp $
  #
  # This is just a sample implementation of a slightly less primitive
  # interface than xinit. It looks for user .xinitrc and .xserverrc
  # files, then system xinitrc and xserverrc files, else lets xinit choose
  # its default. The system xinitrc should probably do things like check
  # for .Xresources files and merge them in, startup up a window manager,
  # and pop a clock and serveral xterms.
  #
  # Site administrators are STRONGLY urged to write nicer versions.
  #
  # $XFree86: xc/programs/xinit/startx.cpp,v 3.12.2.2 2002/01/28 18:27:34 tsi Exp $
  #注意:xinit 的参数格式:
  #xinit $client $clientargs -- $server $display $serverargs
  #各个参数的特点:
  #client必须是以"/"或者"./"开头。因为client其实就是一个程序,所以他是由路径来指出
  的
  #第一个clientargs不能是以"/"或者"./"开头的。
  #对于server跟serverargs的区别也是类似的。
  #而display跟serverargs的区别
  #display是第一个以":??"(??代表两个数字)开头的字符串。
  userclientrc=$HOME/.xinitrc
  userserverrc=$HOME/.xserverrc
  sysclientrc=/usr/X11R6/lib/X11/xinit/xinitrc
  sysserverrc=/usr/X11R6/lib/X11/xinit/xserverrc
  defaultclient=/usr/X11R6/bin/xterm
  defaultserver=/usr/X11R6/bin/X
  defaultclientargs=""
  defaultserverargs=""
  clientargs=""
  serverargs=""
  #===================参数配置文件================
  if [ -f $userclientrc ]; then
   defaultclientargs=$userclientrc
  elif [ -f $sysclientrc ]; then
  defaultclientargs=$sysclientrc
  fi
  if [ -f $userserverrc ]; then
  defaultserverargs=$userserverrc
  elif [ -f $sysserverrc ]; then
  defaultserverargs=$sysserverrc
  fi
  #接收命令行参数
  whoseargs="client"
  #谁的参数--之前是client的参数,--之后是server的参数。
  while [ x"$1" != x ]; do
  case "$1" in
   # '' required to prevent cpp from treating "/*" as a C comment.
   /''*|\./''*)
  #这个参数是以"/"或者"./"开头
   if [ "$whoseargs" = "client" ]; then
   if [ x"$clientargs" = x ]; then
   # 如果clientargs为空,说明这个参数是从命令行传入的第一个参数
   # 故它应该是client
   client="$1"
   else
   clientargs="$clientargs $1"
   fi
   else
   if [ x"$serverargs" = x ]; then
   #为什么这里不用display是否为空来判断呢?
   #因为display可以省略,这时则不能正确判断了。
   server="$1"
   else
   serverargs="$serverargs $1"
   fi
   fi
   ;;
   --)
   whoseargs="server"
   ;;
   *)
   if [ "$whoseargs" = "client" ]; then
   clientargs="$clientargs $1"
   else
   # display must be the FIRST server argument
   if [ x"$serverargs" = x ] && expr "$1" : ':[0-9][0-9]*$' > /dev/null 2>&1; then
  #如果serverargs为空,并且$1是以":"跟数字组成,即为display参数。
   display="$1"
   else
   serverargs="$serverargs $1"
   fi
   fi
   ;;
   esac
   shift
  done
  #命令行参数接收完毕。
  # process client arguments
  if [ x"$client" = x ]; then
   # if no client arguments either, use rc file instead
   if [ x"$clientargs" = x ]; then
  client="$defaultclientargs"
   else
   client=$defaultclient
   fi
  fi
  # process server arguments
  if [ x"$server" = x ]; then
   # if no server arguments or display either,

[1] [2]  下一页

上一篇:stty使用方法

下一篇:find和xargs使用详解

相关文章
广告赞助
网友评论

共有 0 位网友发表了评论,平均得分: 0 查看完整内容

用户名:

分 值:100分 85分 70分 55分 40分 25分 10分 0分

内 容:

(注“”为必填内容。) 验证码: 验证码,看不清楚?请点击刷新验证码