#!/bin/bash set -e set -o pipefail # x11vnc option '-noxrecord' added as workaround for crashing bug # See https://github.com/LibVNC/x11vnc/issues/61 # # The option is not be needed with latest x11vnc from source, but we don't rely # on the remote side being up to date. ssh() { command ssh "$@" 2>&1 | sed 's/^/REMOTE> /' } direct_connection() { port=$((5900 + ${local_display#*:})) ssh -o ControlPath=none -n \ -L $port:localhost:$port \ ${remote_port:+-p $remote_port} \ "$remote_host" \ "x11vnc -noxrecord -nopw -ncache -ncache_cr -localhost -display ${remote_display}" & pid=$! sleep 1 # surrender race if [ "$NOTIGER" ] then xtightvncviewer -encodings "copyrect tight zrle hextile" localhost:0 else xtigervncviewer localhost:0 fi kill $pid } atexit() { [ "$DEBUG" ] || exec 2>/dev/null || true set +e set -- "$X11VNC" "$SSH" ps hu "$@" kill "$@" rm -rf "$OUR_TMP" } share_display() { if [ "$DEBUG" ] then set -x fi port=5500 OUR_TMP=$(mktemp -d) || exit local_socket_file=$OUR_TMP/x11vnc.socket ssh_control=$OUR_TMP/ssh.socket x11vnc -noxrecord -q -nopw -ncache -ncache_cr -display "${local_display}" -unixsock "$local_socket_file" -rfbport 0 & X11VNC=$! trap atexit EXIT rando=$(tr -dc A-Za-z0-9 < /dev/urandom | head -c15) && [ "$rando" ] remote_socket_file=/tmp/xtigervncviewer.$rando.socket ssh -n \ -o ControlPath=none \ -o ExitOnForwardFailure=yes \ -R "$remote_socket_file:$local_socket_file" \ ${remote_port:+ -p "$remote_port" } \ "$remote_host" \ "${DEBUG:+ set -x; } trap 'rm -f $remote_socket_file' EXIT; DISPLAY=$remote_display xtigervncviewer $remote_socket_file" & SSH=$! wait -n } if [ "$1" = -r ] then shift cmd=share_display elif [ "$1" = -d ] then shift cmd=direct_connection else cmd=direct_connection fi remote_host=${1:-blackboard} case "$remote_host" in *:*) remote_port=${remote_host##*:} remote_host=${remote_host%:*} ;; *) remote_port= ;; esac remote_display=${2:-:0} local_display=${3:-:0} $cmd