| #!/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 |