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