summaryrefslogtreecommitdiffstats
path: root/x11vnc/misc/enhanced_tightvnc_viewer/bin/ssvnc_cmd
blob: 08cae7f2c69efeb08b891117e86a48ba332ca083 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
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
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
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
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
#!/bin/sh
#
# Copyright (c) 2006-2008 by Karl J. Runge <runge@karlrunge.com>
#
# ssvnc_cmd:
#
#    A wrapper that calls ss_vncviewer to use the enhanced TightVNC viewer. 
#
# 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:
#
#     ssvnc_cmd [ss_vncviewer-args] hostname:N [vncviewer-args]
#
#  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
#
# See the script util/ss_vncviewer for details about its arguments:
#
#	-verify pemfile
#	-mycert pemfile
#	-proxy  phost:pport
#	-alpha
#	-grab
#
# N.B. if this script is named "tightvncviewer" the vncviewer is called
# directly, and there won't be any SSL or SSH encryption tunnels.
#
# 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.
#
# For convenience, here is the current (7/2006) TightVNC viewer -help output:
#
#       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.
#  
# 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.

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/^#//' 
	exit
fi

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

if [ "X$FULLNAME" = "XKarl J. Runge" ]; then
	VNCVIEWER_POPUP_FIX=1
	export VNCVIEWER_POPUP_FIX

	PATH=`echo "$PATH" | sed -e 's,runge/bin/override,-------------,'`
fi

# Set this for ss_vncviewer to pick up:
#
if [ "X$1" = "X-cotvnc" ]; then
	shift
	DARWIN_COTVNC=1
	export DARWIN_COTVNC
elif [ "X$DARWIN_COTVNC" = "X" -a "X$DISPLAY" = "X" ]; then
	uname=`uname`
	if [ "X$uname" = "XDarwin" ]; then
		DARWIN_COTVNC=1
		export DARWIN_COTVNC
	fi
fi

use_ours=0
if [ "X$VNCVIEWERCMD" = "X" ]; then
	VNCVIEWERCMD="vncviewer"
	export VNCVIEWERCMD
	if [ "X$DARWIN_COTVNC" != "X1" ]; then
		use_ours=1
	fi
fi

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

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

f="$0"
for t in 1 2 3 4 5 6
do
	if [ $dL "$f" ]; then
		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"`
PATH="$dir:$PATH"
SSVNC_BASEDIR="$dir"
export SSVNC_BASEDIR
SSVNC_BASEDIRNAME="$dir/$name"
export SSVNC_BASEDIRNAME
SSVNC_UNAME="$name"
export SSVNC_UNAME

nearby=0
if [ -x "$dir/vncviewer" -a -x "$dir/stunnel" ]; then
	nearby=1
fi
if [ "X$name" = "X." ]; then
	:
	#type vncviewer
	#type stunnel
elif [ ! -d "$dir/$name" -a $nearby = 0 ]; then
	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."

else
	STUNNEL=stunnel
	#STUNNEL_EXTRA_OPTS=${STUNNEL_EXTRA_OPTS:-"maxconn = 1"}
	#export STUNNEL STUNNEL_EXTRA_OPTS
	SSVNC_VIEWER_INTERNAL=1
	export SSVNC_VIEWER_INTERNAL
fi

if [ "X$DARWIN_COTVNC" != "X1" -a "X$VNCVIEWERCMD" = "Xvncviewer" ]; then
	hstr=`$VNCVIEWERCMD -h 2>&1 | head -5`
	if echo "$hstr" | grep 'SSVNC.*TightVNC.*version 1\.3' > /dev/null; then
		# we need to avoid raw encoding
		use_ours=1
	fi
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

if [ -f "$dir/util/ultraftp.jar" ]; then
	SSVNC_ULTRA_FTP_JAR="$dir/util/ultraftp.jar"
	export SSVNC_ULTRA_FTP_JAR
fi

base=`basename "$0"`
if [ "X$1" = "X-ssl" ]; then
	shift	
	base="ssvnc_cmd"
fi

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

	SSVNC_USE_OURS=1; export SSVNC_USE_OURS

	if [ "X$base" = "Xtightvncviewer" ]; then
		$VNCVIEWERCMD -encodings 'copyrect tight zrle zlib hextile' "$@"
	else
		ss_vncviewer "$@" -encodings 'copyrect tight zrle zlib hextile'
	fi
else
	if [ "X$base" = "Xtightvncviewer" ]; then
		$VNCVIEWERCMD "$@"
	else
		ss_vncviewer "$@"
	fi
fi