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