知识大全 全面解读 startx

Posted

篇首语:人永远是要学习的。死的时候,才是毕业的时候。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 全面解读 startx相关的知识,希望对你有一定的参考价值。

  总览   startx 只是xinit的一个前端工具 它所做的只是设置好一些变量 资源 然后再用xinit 启动X window   xinit的命令格式   xinit [ [client] clientargs] [ [server] [display] serverargs]  startx所做的工作:  一 获取命令行参数   client段  clientargs:  完全从命令行中获取 无默认值  client:  如果没有指定 但是已经指定clientargs 则使用/usr/X R /bin/xterm  如果没有指定 且没有指定clientargs 则使用 /defaultclientargs 即按以下顺序取值   $HOME/ xinitrc > /usr/X R /lib/X /xinit/xinitrc  /usr/X R /lib/X /xinit/xinitrc其实就是执行/etc/X /Xsessions这个脚本  而/etc/X /Xsession又会检查$HOME/ xsession 如果存在则把它作为client   所以如果$HOME/ xinitrc不存在时 它可以使用$HOME/ xsession;而当$HOME/ xinitrc存在  时 它并不会使用$HOME/ xsession   server段  跟client类似  增加一个display的设置 默认为 :   二 设置标志认证  三 通过xinit启动X  四 关闭X时 进行一些收尾工作   对xinit来说 如果没有指定client 则使用$HOME/ xinitrc 如果这个也不存在则使用xterm 如果没有指定server 则使用$HOME/ xserverc 如果这这个不存在的话则使用X :   所以当由startx启动X时  client的顺序是: 命令行 > $HOME/ xinitrc > $HOME/ xsession > /usr/X R /lib/X /xinit/xinitrc  server的顺序是: 命令行 > $HOME/ xserverrc > /usr/X R /lib/X /xinit/xserverrc  以上 > 表示 当前一个不存在时 则取下面一个 直到存在   源码:   #!/bin/sh  # $X: startx cpp v / / : : 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   #  # $XFree : xc/programs/xinit/startx cpp v / / : : 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/X R /lib/X /xinit/xinitrc  sysserverrc=/usr/X R /lib/X /xinit/xserverrc  defaultclient=/usr/X R /bin/xterm  defaultserver=/usr/X R /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 $ != x ]; do  case $ in   # required to prevent cpp from treating /* as a C ment    / *|\\ / *)  #这个参数是以 / 或者 / 开头   if [ $whoseargs = client ]; then   if [ x $clientargs = x ]; then   # 如果clientargs为空 说明这个参数是从命令行传入的第一个参数   # 故它应该是client   client= $    else   clientargs= $clientargs $    fi   else   if [ x $serverargs = x ]; then   #为什么这里不用display是否为空来判断呢?   #因为display可以省略 这时则不能正确判断了    server= $    else   serverargs= $serverargs $    fi   fi   ;;   )   whoseargs= server    ;;   *)    if [ $whoseargs = client ]; then   clientargs= $clientargs $    else   # display must be the FIRST server argument   if [ x $serverargs = x ] && expr $ : :[ ][ ]*$ > /dev/null >& ; then  #如果serverargs为空 并且$ 是以 : 跟数字组成 即为display参数    display= $    else   serverargs= $serverargs $    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 use rc file instead   if [ x $serverargs = x a x $display = x ]; then   server= $defaultserverargs    else   server=$defaultserver   fi  fi  if [ x $XAUTHORITY = x ]; then  XAUTHORITY=$HOME/ Xauthority   export XAUTHORITY  fi   removelist=  # set up default Xauth info for this machine  # check for GNU hostname  if hostname version > /dev/null >& ; then   if [ z `hostname version >& | grep GNU` ]; then   hostname=`hostname f`   #long hostname    fi  fi      if [ z $hostname ]; then   hostname=`hostname`  fi  #以上是设置hostname  #添加X标记认证   authdisplay=$display: :   #设置要验证的显示 如果display已经设置则取display的值   #如果display没有设置 则取:   mcookie=`mcookie`  for displayname in $authdisplay $hostname$authdisplay; do   if ! xauth list $displayname | grep $displayname >/dev/null >& ; then   #没有xauth认证 需要添加    xauth add $displayname $mcookie   removelist= $displayname $removelist    fi  done  #启动X window  xinit $client $clientargs $server $display $serverargs  #关闭X window时  if [ x $removelist != x ]; then  #删除标记认证   xauth remove $removelist  fi  #释放不用的虚拟终端所占用的资源  if mand v deallocvt > /dev/null >& ; then   deallocvt  fi   由于本人对X机制也不是很了解 所以错误在所难免 欢迎大家指正   有关xauth部分 请参阅 ~bric /# cha138/Article/program/Oracle/201311/17774

相关参考

如何解读RSI指标

如何解读RSI指标?RSI(市场买卖相对强弱指标)是股市技术分析中最常用的技术指标之一,作为一种市场价格强弱性指标,其最大实战性操作作用不是在于持仓捂股,而是在于选择买入或卖出的波段时机。很多炒股者把

知识大全 HR解读三大面试难题

HR解读三大面试难题  以下文字资料是由(本站网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  面试是求

知识大全 解读UDDI和JAXR

解读UDDI和JAXR  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  在过去的数年中许多开发人员

知识大全 解读Linux的十大缺憾(3)

困惑:解读Linux的十大缺憾(3)  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  作者伊梅  

知识大全 知名外企面试重点全解读

知名外企面试重点全解读找到一份理想的工作是大学毕业生们最大的心愿,而进入那些知名的大企业更是广大毕业生的梦想。如何应付这些企业的面试成为了毕业生们最为关注的话题。这些名企的面试往往有一定的程序,绝非草

知识大全 解读.Net虚拟框架的实现原理

解读.Net虚拟框架的实现原理  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  在让Net程序脱离

解读地震医疗救援

作者简介郑静晨,武警总医院院长,国务院应急管理专家组成员,中国国际救援队副总队长兼首席医疗官,中国灾害防御协会救援医学会副会长,成功组织十余次国内外重大灾害医疗救援。主编《灾害救援医学》一书。被国务院

解读白癜风临床表现的体征

白癜风症状很明显,但也容易和一些其它类似的病混肴,疾病中非常典型的一种,对于白癜风的研究一直也是非常的多,白癜风的临床表现特征的问题也一直以来深受白癜风医疗界的关注,今天我们来看看专家为我们解读的白癜

解读白癜风临床表现的体征

白癜风症状很明显,但也容易和一些其它类似的病混肴,疾病中非常典型的一种,对于白癜风的研究一直也是非常的多,白癜风的临床表现特征的问题也一直以来深受白癜风医疗界的关注,今天我们来看看专家为我们解读的白癜

知识大全 详细解读JVM中的对象生命周期

详细解读JVM中的对象生命周期  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  在JVM运行空间中