summaryrefslogtreecommitdiffstats
path: root/x11vnc/misc/rx11vnc
diff options
context:
space:
mode:
authorrunge <runge>2005-04-10 04:30:48 +0000
committerrunge <runge>2005-04-10 04:30:48 +0000
commitbaee5e2b3a00993fee00dca9d4e560f904693a6c (patch)
tree7cea15f636074f4d81fd100f6f37cc25750f3211 /x11vnc/misc/rx11vnc
parentac01f36ce0e2630db608537641b0335b249fea3c (diff)
downloadlibtdevnc-baee5e2b3a00993fee00dca9d4e560f904693a6c.tar.gz
libtdevnc-baee5e2b3a00993fee00dca9d4e560f904693a6c.zip
x11vnc: -rawfb, -pipeinput, -xtrap, -flag, ...
Diffstat (limited to 'x11vnc/misc/rx11vnc')
-rwxr-xr-xx11vnc/misc/rx11vnc133
1 files changed, 133 insertions, 0 deletions
diff --git a/x11vnc/misc/rx11vnc b/x11vnc/misc/rx11vnc
new file mode 100755
index 0000000..27e6d06
--- /dev/null
+++ b/x11vnc/misc/rx11vnc
@@ -0,0 +1,133 @@
+#!/bin/sh
+#
+# usage: rx11vnc [-s] <host>:<xdisplay>
+# rx11vnc [-s] <host> (assumes xdisplay is 0)
+#
+# -s means use ssh instead of rsh.
+# -S tries to tunnel the vnc traffic thru ssh. (experimental...)
+#
+#set -xv
+
+#
+# Place your x11vnc cmd + options here (must have -bg and -display
+# with -display as the last one)
+#
+cmd="x11vnc -nap -q -bg -display"
+viewer="vncviewer"
+rsh=rsh
+
+#
+# The following two settings are only used under -S (ssh tunnel)
+#
+# Unfortunately, we have to set up the ssh port redirection *before*
+# x11vnc has started and selected its listening port.
+# tunnel_ports is a list of ports we expect/hope to be free on both
+# the local and remote machines:
+#
+tunnel_ports="5900 5901 5902 5903"
+#
+# VNC has a poor default in that if the client appears to be emanating
+# from the local machine, then raw encoding is preferred. With ssh port
+# redirection we appear to be coming from the localhost, but we are not.
+# We pass this encoding list to the viewer to give lowest preference to
+# raw encoding:
+#
+tunnel_encodings="copyrect tight zrle hextile zlib corre rre"
+
+if [ "$USER" = "runge" ]; then
+ cmd="x11vnc.expt -nap -q -bg -rfbauth .vnc/passwd -display"
+ viewer="vncviewerz"
+fi
+
+if [ "X$1" = "X-s" ]; then
+ shift
+ rsh=ssh
+elif [ "X$1" = "X-S" ]; then
+ shift
+ rsh=ssh
+ tunnel=1
+ cmd=`echo "$cmd" | sed -e 's/ / -localhost /'`
+fi
+
+remote=$1
+if echo "$remote" | grep ':' > /dev/null; then
+ :
+else
+ remote="$remote:0"
+fi
+
+host=`echo "$remote" | awk -F: '{print $1}'`
+disp=`echo "$remote" | awk -F: '{print $2}'`
+disp=":$disp"
+if [ "X$host" = "X" ]; then
+ echo "bad host."
+ exit 1
+fi
+
+# start the remote x11vnc:
+if [ $tunnel ]; then
+ # much more kludgy for tunnelling:
+ tmp=/tmp/rx11vnc.$$
+ redir=""
+ used_ports=`netstat -an | egrep '(ESTABLISHED|LISTEN) *$' \
+ | sed -e 's/^[ ]*//' -e 's/^tcp[ 0-9][ 0-9]*//' \
+ -e 's/[ ].*$//' -e 's/^.*[^0-9]//' | sort -nu`
+ for p in $tunnel_ports
+ do
+ ok=1
+ for u in $used_ports
+ do
+ if [ "X$p" = "X$u" ]; then
+ echo "port $u is in use. skipping it"
+ ok=
+ break
+ fi
+ done
+ if [ $ok ]; then
+ redir="$redir -L $p:localhost:$p"
+ fi
+ done
+ #
+ # Have ssh put the command in the bg, then we look for PORT=
+ # in the tmp file. The sleep at the end is to give us enough
+ # time to connect thru the port redir, otherwise ssh will exit
+ # before we can connect.
+ #
+ time=15
+ $rsh -f $redir $host "$cmd $disp; echo END; sleep $time" > $tmp
+
+ i=0
+ while [ $i -lt $time ]
+ do
+ sleep 1
+ if grep '^PORT=' $tmp > /dev/null; then
+ port=`grep '^PORT=' $tmp | sed -e 's/PORT=//'`
+ if [ "X$port" != "X" ]; then
+ break
+ fi
+ fi
+ i=`expr $i + 1`
+ done
+ cat $tmp
+ rm -f $tmp
+else
+ port=`$rsh $host "$cmd $disp" | grep '^PORT=' | sed -e 's/PORT=//'`
+fi
+
+echo "x11vnc port is '$port'"
+
+# now start up the viewer on this end:
+if echo "$port" | grep '^[0-9][0-9]*$' > /dev/null; then
+ if [ $port -lt 6000 -a $port -ge 5900 ]; then
+ # vncviewer special cases 0-99
+ port=`expr $port - 5900`
+ fi
+ if [ $tunnel ]; then
+ $viewer -encodings "$tunnel_encodings" "localhost:$port"
+ else
+ $viewer "$host:$port"
+ fi
+else
+ echo "bad port."
+ exit 1
+fi