ssvnc_cmd 6.92 KB
Newer Older
runge's avatar
runge committed
1 2
#!/bin/sh
#
3
# Copyright (c) 2006-2009 by Karl J. Runge <runge@karlrunge.com>
runge's avatar
runge committed
4
#
runge's avatar
runge committed
5
# ssvnc_cmd:
runge's avatar
runge committed
6
#
runge's avatar
runge committed
7
#    A wrapper that calls ss_vncviewer to use the enhanced TightVNC viewer. 
runge's avatar
runge committed
8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
#
# The enhanced TightVNC viewer features are:
#
#	- SSL support for connections using the co-bundled stunnel program.
#	- rfbNewFBSize VNC support (screen resizing)
#	- cursor alphablending with x11vnc at 32bpp
#	- xgrabserver support for fullscreen mode (for old window mgrs)
#
#
# Your platform (e.g. Linux.i686) is autodetected and enhanced
# vncviewer and stunnel binaries for it are used (see the ./bin directory).
#
# See the build.unix script if your platform is not in this package.
# You can also set the env. var. UNAME=os.arch to any "os.arch" you want
# to override the autodetetion.
#
# Usage:
#
26
#     ssvnc_cmd [ss_vncviewer-args] hostname:N [vncviewer-args]
runge's avatar
runge committed
27
#
28 29 30 31 32 33 34
#  if, instead, this script is named "tightvncviewer" it calls the
#  vncviewer directly and must be invoked as:
#
#     tightvncviewer [vncviewer-args] hostname:N
#
# In both cases, "hostname:N" is the host and VNC display to connect to,
# e.g. snoopy:0
runge's avatar
runge committed
35
#
runge's avatar
runge committed
36
# See the script util/ss_vncviewer for details about its arguments:
runge's avatar
runge committed
37 38 39 40 41 42 43
#
#	-verify pemfile
#	-mycert pemfile
#	-proxy  phost:pport
#	-alpha
#	-grab
#
44 45
# N.B. if this script is named "tightvncviewer" the vncviewer is called
# directly, and there won't be any SSL or SSH encryption tunnels.
runge's avatar
runge committed
46 47 48 49 50 51 52
#
# If the *very first* argument is "-cotvnc" then it is assumed you are on
# Darwin and want to run the Chicken of the VNC viewer via our wrapper.
#
#
# See the TightVNC viewer documentation for on its cmdline arguments.
#
53
# For convenience, here is the TightVNC 1.3dev5 viewer -help output:
runge's avatar
runge committed
54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85
#
#       TightVNC viewer version 1.3dev5
#       
#       Usage: vncviewer [<OPTIONS>] [<HOST>][:<DISPLAY#>]
#              vncviewer [<OPTIONS>] [<HOST>][::<PORT#>]
#              vncviewer [<OPTIONS>] -listen [<DISPLAY#>]
#              vncviewer -help
#       
#       <OPTIONS> are standard Xt options, or:
#               -via <GATEWAY>
#               -shared (set by default)
#               -noshared
#               -viewonly
#               -fullscreen
#               -noraiseonbeep
#               -passwd <PASSWD-FILENAME> (standard VNC authentication)
#               -user <USERNAME> (Unix login authentication)
#               -encodings <ENCODING-LIST> (e.g. "tight copyrect")
#               -bgr233
#               -owncmap
#               -truecolour
#               -depth <DEPTH>
#               -compresslevel <COMPRESS-VALUE> (0..9: 0-fast, 9-best)
#               -quality <JPEG-QUALITY-VALUE> (0..9: 0-low, 9-high)
#               -nojpeg
#               -nocursorshape
#               -x11cursor
#               -autopass
#       
#       Option names may be abbreviated, e.g. -bgr instead of -bgr233.
#       See the manual page for more information.
#  
86 87 88
# Note: the enhanced tightvnc viewer (SSVNC) has many more options, run
# this script as "ssvnc_cmd Vnc://a:0 -help" or "tightvncviewer -help"
# to seem them.
runge's avatar
runge committed
89

90 91
if [ "X$1" = "X-h" -o "X$1" = "X-helpxxx" -o "X$1" = "X--help" ]; then
	tail -n +2 "$0" | sed -e '/^$/ q' -e 's/^#//' 
runge's avatar
runge committed
92 93 94 95 96 97 98 99
	exit
fi

# Include /usr/bin... to be sure to get regular utilities:
#
PATH=$PATH:/usr/bin:/bin
export PATH

100
if [ "X$FULLNAME" = "XKarl J. Runge" ]; then
101 102 103 104
	if [ "X$NOPOPUFIX" = "X" ]; then
		VNCVIEWER_POPUP_FIX=1
		export VNCVIEWER_POPUP_FIX
	fi
105 106 107
	PATH=`echo "$PATH" | sed -e 's,runge/bin/override,-------------,'`
fi

runge's avatar
runge committed
108
# Set this for ss_vncviewer to pick up:
runge's avatar
runge committed
109 110 111 112 113
#
if [ "X$1" = "X-cotvnc" ]; then
	shift
	DARWIN_COTVNC=1
	export DARWIN_COTVNC
runge's avatar
runge committed
114 115 116 117 118 119
elif [ "X$DARWIN_COTVNC" = "X" -a "X$DISPLAY" = "X" ]; then
	uname=`uname`
	if [ "X$uname" = "XDarwin" ]; then
		DARWIN_COTVNC=1
		export DARWIN_COTVNC
	fi
runge's avatar
runge committed
120
fi
runge's avatar
runge committed
121 122

use_ours=0
runge's avatar
runge committed
123 124 125
if [ "X$VNCVIEWERCMD" = "X" ]; then
	VNCVIEWERCMD="vncviewer"
	export VNCVIEWERCMD
126
	if [ "X$DARWIN_COTVNC" != "X1" ]; then
runge's avatar
runge committed
127 128 129 130 131 132 133 134
		use_ours=1
	fi
fi

# work out os.arch platform string and check for binaries:
#
name=$UNAME
if [ "X$name" = "X" ]; then
135
	name=`uname -sm | sed -e 's/ /./g' -e 's,/.*,,' -e 's/Linux\.i.86/Linux.i686/'`
runge's avatar
runge committed
136 137
fi

138 139 140 141 142
dL="-L"
if uname -sr | egrep 'SunOS 5\.[5-8]' > /dev/null; then
	dL="-h"
fi

runge's avatar
runge committed
143
f="$0"
runge's avatar
runge committed
144
for t in 1 2 3 4 5 6
runge's avatar
runge committed
145
do
146
	if [ $dL "$f" ]; then
runge's avatar
runge committed
147 148 149 150 151 152 153 154 155 156 157 158
		f0="$f"
		f=`ls -l "$f" | sed -e 's/^.* -> //'`
		if echo "$f" | grep '^/' > /dev/null; then
			:
		else
			f="`dirname "$f0"`/$f"
		fi
	else
		break
	fi
done
dir=`dirname "$f"`
runge's avatar
runge committed
159
PATH="$dir:$PATH"
160 161
SSVNC_BASEDIR="$dir"
export SSVNC_BASEDIR
162 163
SSVNC_BASEDIRNAME="$dir/$name"
export SSVNC_BASEDIRNAME
164 165
SSVNC_UNAME="$name"
export SSVNC_UNAME
runge's avatar
runge committed
166 167 168 169 170

nearby=0
if [ -x "$dir/vncviewer" -a -x "$dir/stunnel" ]; then
	nearby=1
fi
171 172 173 174 175
if [ "X$name" = "X." ]; then
	:
	#type vncviewer
	#type stunnel
elif [ ! -d "$dir/$name" -a $nearby = 0 ]; then
runge's avatar
runge committed
176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203
	echo
	echo "Cannot find platform dir for your OS `uname -sm`:"
	echo
	echo "    $dir/$name" 
	echo
	PATH=$PATH:/usr/sbin:/usr/local/sbin:/dist/sbin

	quit=0
	if type vncviewer >/dev/null 2>/dev/null; then
		:
	else
		echo "vncviewer not found in PATH." 
		quit=1
	fi
	if type stunnel >/dev/null 2>/dev/null; then
		:
	else
		echo "stunnel not found in PATH."
		quit=1
	fi
	echo
	if [ "X$quit" = "X1" ]; then
		echo "You can set the \$UNAME env. var. to override the OS setting."
		echo "Or, if available, run the ./build.unix script to build it."
		echo "Or install external \"vncviewer\" and \"stunnel\" packages."
		exit 1
	fi
	echo "Using externel \"vncviewer\" and \"stunnel\" found in PATH."
runge's avatar
runge committed
204

runge's avatar
runge committed
205
else
runge's avatar
runge committed
206
	STUNNEL=stunnel
207 208
	#STUNNEL_EXTRA_OPTS=${STUNNEL_EXTRA_OPTS:-"maxconn = 1"}
	#export STUNNEL STUNNEL_EXTRA_OPTS
runge's avatar
runge committed
209 210
	SSVNC_VIEWER_INTERNAL=1
	export SSVNC_VIEWER_INTERNAL
runge's avatar
runge committed
211 212
fi

213
if [ "X$DARWIN_COTVNC" != "X1" -a "X$VNCVIEWERCMD" = "Xvncviewer" ]; then
runge's avatar
runge committed
214
	hstr=`$VNCVIEWERCMD -h 2>&1 | head -5`
215
	if echo "$hstr" | grep 'SSVNC.*TightVNC.*version 1\.3' > /dev/null; then
runge's avatar
runge committed
216 217 218
		# we need to avoid raw encoding
		use_ours=1
	fi
runge's avatar
runge committed
219 220 221 222 223 224 225 226 227 228 229 230 231
fi

# Put our os.arch and other utils dirs at head of PATH to be sure to
# pick them up:
#
PATH="$dir:$dir/$name:$dir/util:$PATH"
if echo "$dir" | grep '^/' > /dev/null; then
	:
else
	dir=`pwd`/$dir
	PATH="$dir:$dir/$name:$dir/util:$PATH"
fi

232 233 234 235 236
if [ -f "$dir/util/ultraftp.jar" ]; then
	SSVNC_ULTRA_FTP_JAR="$dir/util/ultraftp.jar"
	export SSVNC_ULTRA_FTP_JAR
fi

runge's avatar
runge committed
237 238 239 240 241
base=`basename "$0"`
if [ "X$1" = "X-ssl" ]; then
	shift	
	base="ssvnc_cmd"
fi
runge's avatar
runge committed
242 243 244 245 246 247

# If ours (and not cotvnc), force the use of tight encoding for localhost
# redir connection:
#
#
if [ $use_ours = 1 ]; then
248 249 250
	# avoid system vncviewer app-defaults
	#XFILESEARCHPATH="/tmp/path/nowhere"; export XFILESEARCHPATH

251 252
	SSVNC_USE_OURS=1; export SSVNC_USE_OURS

253 254 255 256 257 258 259 260 261 262
	if [ "X$SSVNC_TURBOVNC" != "X" ]; then
		if echo "$VNCVIEWERCMD" | grep '\.turbovnc' > /dev/null; then
			:
		else
			if type "$VNCVIEWERCMD.turbovnc" > /dev/null 2>/dev/null; then
				VNCVIEWERCMD="$VNCVIEWERCMD.turbovnc"
			fi
		fi
	fi

runge's avatar
runge committed
263
	if [ "X$base" = "Xtightvncviewer" ]; then
runge's avatar
runge committed
264
		$VNCVIEWERCMD -encodings 'copyrect tight zrle zlib hextile' "$@"
runge's avatar
runge committed
265 266 267
	else
		ss_vncviewer "$@" -encodings 'copyrect tight zrle zlib hextile'
	fi
runge's avatar
runge committed
268
else
runge's avatar
runge committed
269
	if [ "X$base" = "Xtightvncviewer" ]; then
runge's avatar
runge committed
270
		$VNCVIEWERCMD "$@"
runge's avatar
runge committed
271 272 273
	else
		ss_vncviewer "$@"
	fi
runge's avatar
runge committed
274
fi