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 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286
|
#!/bin/sh
#
# Copyright (c) 2006-2011 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" or "-viewer" is the
# first argument it calls the vncviewer directly (there is no encryption)
# and must be invoked as:
#
# tightvncviewer [vncviewer-args] hostname:N
# or
# ssvnc_cmd -viewer [vncviewer-args] hostname:N
#
# In both cases, "hostname:N" is the host and VNC display to connect to,
# e.g. snoopy:0. (-listen N and -appshare N modes works too.)
#
# 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 TightVNC 1.3dev5 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
if [ "X$NOPOPUFIX" = "X" ]; then
VNCVIEWER_POPUP_FIX=1
export VNCVIEWER_POPUP_FIX
fi
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
do_viewer_directly=""
if [ "X$1" = "X-viewer" ]; then
do_viewer_directly=1
shift
fi
if [ "X$base" = "Xtightvncviewer" ]; then
do_viewer_directly=1
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$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
if [ "X$do_viewer_directly" = "X1" ]; then
$VNCVIEWERCMD -encodings 'copyrect tight zrle zlib hextile' "$@"
else
ss_vncviewer "$@" -encodings 'copyrect tight zrle zlib hextile'
fi
else
if [ "X$do_viewer_directly" = "X1" ]; then
$VNCVIEWERCMD "$@"
else
ss_vncviewer "$@"
fi
fi
|