總覽
startx 只是xinit的一個前端工具
xinit的命令格式
xinit [ [client] clientargs] [
startx所做的工作:
一
clientargs:
完全從命令行中獲取
client:
如果沒有指定
如果沒有指定
$HOME/
/usr/X
而/etc/X
所以如果$HOME/
時
跟client類似
增加一個display的設置
二
三
四
對xinit來說
所以當由startx啟動X時
client的順序是: 命令行
server的順序是: 命令行
以上
源碼:
#!/bin/sh
# $Xorg: startx
#
# This is just a sample implementation of a slightly less primitive
# interface than xinit
# files
# its default
# for
# and pop a clock and serveral xterms
#
# Site administrators are STRONGLY urged to write nicer versions
#
# $XFree
#注意
#xinit $client $clientargs
#各個參數的特點
#client必須是以
的
#第一個clientargs不能是以
#對於server跟serverargs的區別也是類似的
#而display跟serverargs的區別
#display是第一個以
userclientrc=$HOME/
userserverrc=$HOME/
sysclientrc=/usr/X
sysserverrc=/usr/X
defaultclient=/usr/X
defaultserver=/usr/X
defaultclientargs=
defaultserverargs=
clientargs=
serverargs=
#===================參數配置文件================
if [
defaultclientargs=$userclientrc
elif [
defaultclientargs=$sysclientrc
fi
if [
defaultserverargs=$userserverrc
elif [
defaultserverargs=$sysserverrc
fi
#接收命令行參數
whoseargs=
#誰的參數
while [ x
case
#
/
#這個參數是以
if [
if [ x
# 如果clientargs為空
# 故它應該是client
client=
else
clientargs=
fi
else
if [ x
#為什麼這裡不用display是否為空來判斷呢?
#因為display可以省略
server=
else
serverargs=
fi
fi
;;
whoseargs=
;;
*)
if [
clientargs=
else
# display must be the FIRST server argument
if [ x
#如果serverargs為空
display=
else
serverargs=
fi
fi
;;
esac
shift
done
#命令行參數接收完畢
# process client arguments
if [ x
# if no client arguments either
if [ x
client=
else
client=$defaultclient
fi
fi
# process server arguments
if [ x
# if no server arguments or display either
if [ x
server=
else
server=$defaultserver
fi
fi
if [ x
XAUTHORITY=$HOME/
export XAUTHORITY
fi
removelist=
# set up default Xauth info for this machine
# check for GNU hostname
if hostname
if [
hostname=`hostname
#long hostname
fi
fi
if [
hostname=`hostname`
fi
#以上是設置hostname
#添加X標記認證
authdisplay=${display:
#設置要驗證的顯示
#如果display沒有設置
mcookie=`mcookie`
for displayname in $authdisplay $hostname$authdisplay; do
if ! xauth list
#沒有xauth認證
xauth add $displayname
removelist=
fi
done
#啟動X window
xinit $client $clientargs
#關閉X window時
if [ x
#刪除標記認證
xauth remove $removelist
fi
#釋放不用的虛擬終端所占用的資源
if command
deallocvt
fi
由於本人對X機制也不是很了解
有關xauth部分
From:http://tw.wingwit.com/Article/program/Oracle/201311/17774.html