You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
libtdevnc/x11vnc/misc/enhanced_tightvnc_viewer/bin/ssvnc_cmd

287 lines
7.2 KiB

#!/bin/sh
#
# Copyright (c) 2006-2009 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