home *** CD-ROM | disk | FTP | other *** search
- #!/bin/bash
-
- # $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.16tsi Exp $
- userclientrc=$HOME/.xinitrc
- sysclientrc=/etc/X11/xinit/xinitrc
-
-
- userserverrc=$HOME/.xserverrc
- sysserverrc=/etc/X11/xinit/xserverrc
- defaultclient=xterm
- defaultserver=/usr/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"
- 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
- client="$1"
- else
- clientargs="$clientargs $1"
- fi
- else
- if [ x"$serverargs" = x ]; then
- 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
- 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, 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
- case `uname` in
- Linux*)
- if [ -z "`hostname --version 2>&1 | grep GNU`" ]; then
- hostname=`hostname -f`
- else
- hostname=`hostname`
- fi
- ;;
- *)
- hostname=`hostname`
- ;;
- esac
-
- authdisplay=${display:-:0}
- mcookie=`/usr/bin/mcookie`
- dummy=0
-
- # create a file with auth information for the server. ':0' is a dummy.
- xserverauthfile=$HOME/.serverauth.$$
- xauth -q -f $xserverauthfile << EOF
- add :$dummy . $mcookie
- EOF
- serverargs=${serverargs}" -auth "${xserverauthfile}
-
- # now add the same credentials to the client authority file
- # if '$displayname' already exists don't overwrite it as another
- # server man need it. Add them to the '$xserverauthfile' instead.
- for displayname in $authdisplay $hostname$authdisplay; do
- authcookie=`xauth list "$displayname" \
- | sed -n "s/.*$displayname[[:space:]*].*[[:space:]*]//p"` 2>/dev/null;
- if [ "z${authcookie}" = "z" ] ; then
- xauth -q << EOF
- add $displayname . $mcookie
- EOF
- removelist="$displayname $removelist"
- else
- dummy=$(($dummy+1));
- xauth -q -f $xserverauthfile << EOF
- add :$dummy . $authcookie
- EOF
- fi
- done
- xinit $client $clientargs -- $server $display $serverargs
-
-
- if [ x"$removelist" != x ]; then
- xauth remove $removelist
- fi
- if [ x"$xserverauthfile" != x ]; then
- rm -f $xserverauthfile
- fi
-
-
-
-
-
- if command -v deallocvt > /dev/null 2>&1; then
- deallocvt
- fi
-