#!/bin/sh direct_connection() { port=$((5900 + local_display)) ssh -o ControlPath=none -n \ -L $port:localhost:$port "$remote_host" "x11vnc -nopw -ncache -ncache_cr -localhost -display ${remote_display}" & pid=$! sleep 1 # surrender race xvncviewer -encodings "copyrect tight zrle hextile" localhost:0 kill $pid } quietly() { "$@" >/dev/null 2>&1 } reverse_connection() { port=5500 xvncviewer -fullscreen -encodings "copyrect tight zrle hextile" -listen & pid=$! quietly ssh -o ControlPath=none \ -R $port:localhost:$port "$remote_host" \ "x11vnc -q -nopw -localhost -display ${remote_display} -coe localhost:$port -rfbport 0" kill $pid } share_display() { set -x port=5500 fuser -vk $port/tcp ssh -o ControlPath=none \ -o ExitOnForwardFailure=yes \ -f \ -L $port:localhost:$port "$remote_host" \ "fuser -vk $port/tcp; DISPLAY=${remote_display} xvncviewer -fullscreen -encodings 'copyrect tight zrle hextile' -listen" trap "fuser -vk $port/tcp" INT sleep 1 x11vnc -q -nopw -localhost -display ${local_display} -coe localhost:$port -rfbport 0 } if [ "$1" = -r ] then shift cmd=share_display else cmd=reverse_connection fi remote_host=${1:-blackboard} remote_display=${2:-:0} local_display=${3:-:0} $cmd