Home | History | Annotate | Download | only in misc
      1 #!/bin/sh
      2 #
      3 # x11vnc_loop:
      4 #
      5 # Example startup script for connecting x11vnc to an X display
      6 # at system boot up and having it reconnect when the X server restarts.
      7 #
      8 # Run, in rc.local say, via, e.g.:
      9 #
     10 #	/path/to/x11vnc_loop 1>> /var/tmp/x11vnc_loop.log 2>&1 &
     11 #
     12 # call with argument "once" or a number to limit the number of loops.
     13 # 
     14 ##########################################################################
     15 # The following needs to be customized:
     16 x11vnc_cmd=x11vnc		# or use full path (or set PATH).
     17 pwfile=/path/to/vnc/passwd	# always use a password
     18 display=:0			# display of interest
     19 restart_sleep=5 		# pause between X server restarts.
     20 
     21 # modify cmdline args if desired:
     22 x11vnc_args="-display $display -rfbauth $pwfile -forever -nap"
     23 
     24 # you may need to customize the "grep", etc, below in get_xauthority_file()
     25 ##########################################################################
     26 
     27 if [ "X$1" != "X" ]; then
     28 	max=$1
     29 	shift
     30 fi
     31 
     32 get_xauthority_file() {
     33 	#
     34 	# We need to find the MIT-COOKIE file... this not portable at all,
     35 	# depends on OS, distro, desktop, phase of moon, etc...
     36 	#
     37 	# If the cookie file was fixed and you knew it, you could just
     38 	# return it here e.g.:
     39 	#
     40 	## echo "/var/gdm/:0.Xauth"; return
     41 	#
     42 	# or, if you knew the directory, you could look for the youngest
     43 	# file there and return it e.g.:
     44 	#
     45 	## echo `ls -t /var/lib/xdm/authdir/authfiles/* | head -1`; return
     46 
     47 	# this hack tries to grep it out of ps output...
     48 	xauth=""
     49 	for i in 1 2 3
     50 	do
     51 		# very linux specific, and you likely need to tweak..
     52 		patt="X11R6.*/X.*-auth"
     53 		xauth=`ps wwwaux | grep "$patt" \
     54 			| egrep -v 'grep|Xprt' | head -1 \
     55 			| sed -e 's/^.*-auth//' | awk '{print $1}'` 
     56 
     57 		if [ "X$xauth" != "X" ]; then
     58 			break
     59 		fi
     60 		sleep 2	# wait a bit in case X server is restarting slowly.
     61 	done
     62 	echo $xauth
     63 }
     64 
     65 try=1
     66 while [ 1 ]
     67 do
     68 	echo "`date`  $0 try number: $try"; try=`expr $try + 1`
     69 
     70 	auth=`get_xauthority_file`
     71 	if [ ! -r "$auth" ]; then
     72 		echo "`date`  bad auth file: \"$auth\""
     73 	else
     74 		cmd="$x11vnc_cmd $x11vnc_args"
     75 		sleep 1
     76 		echo "`date`  running: $cmd -auth $auth"
     77 		# run x11vnc:
     78 		$cmd -auth $auth
     79 		if [ "X$max" = "Xonce" ]; then
     80 			exit $?
     81 		fi
     82 	fi
     83 	if echo "$max" | grep '[0-9]' > /dev/null; then
     84 		if [ $try -gt $max ]; then
     85 			exit
     86 		fi
     87 	fi
     88 	sleep $restart_sleep
     89 done
     90