Commit 8938cda1 authored by runge's avatar runge

Sync SSVNC changes: fullscreen fixes, local scaling, -chatonly, iso-8859-1/utf8 etc., etc.

parent 73f19d71
......@@ -14,7 +14,7 @@ if [ "X$SSVNC_DYLD_LIBRARY_PATH" != "X" ]; then
export DYLD_LIBRARY_PATH
fi
if [ "X$DISPLAY" != "X" ]; then
if [ "X$DISPLAY" != "X" -a "X$DARWIN_COTVNC" != "X1" ]; then
"$dir/vncviewer.x11" "$@"
else
args=""
......
......@@ -140,7 +140,10 @@ if [ -f "$dir/util/ultraftp.jar" ]; then
export SSVNC_ULTRA_FTP_JAR
fi
if [ "X$WISH" = "Xwish" ]; then
if [ "X$1" = "X-cmd" ]; then
shift
exec ssvnc_cmd "$@"
elif [ "X$WISH" = "Xwish" ]; then
exec ssvnc.tcl "$@"
else
exec $WISH $dir/util/ssvnc.tcl "$@"
......
......@@ -209,7 +209,7 @@ fi
if [ "X$DARWIN_COTVNC" != "X1" -a "X$VNCVIEWERCMD" = "Xvncviewer" ]; then
hstr=`$VNCVIEWERCMD -h 2>&1 | head -5`
if echo "$hstr" | grep '^TightVNC.*version 1\.[23]' > /dev/null; then
if echo "$hstr" | grep 'SSVNC.*TightVNC.*version 1\.3' > /dev/null; then
# we need to avoid raw encoding
use_ours=1
fi
......@@ -245,6 +245,8 @@ 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$base" = "Xtightvncviewer" ]; then
$VNCVIEWERCMD -encodings 'copyrect tight zrle zlib hextile' "$@"
else
......
......@@ -229,6 +229,22 @@ do
;;
"-grab") VNCVIEWER_GRAB_SERVER=1; export VNCVIEWER_GRAB_SERVER
;;
"-x11cursor") VNCVIEWER_X11CURSOR=1; export VNCVIEWER_X11CURSOR
;;
"-rawlocal") VNCVIEWER_RAWLOCAL=1; export VNCVIEWER_RAWLOCAL
;;
"-scale") shift; SSVNC_SCALE="$1"; export SSVNC_SCALE
;;
"-ssvnc_encodings") shift; VNCVIEWER_ENCODINGS="$1"; export VNCVIEWER_ENCODINGS
;;
"-rfbversion") shift; VNCVIEWER_RFBVERSION="$1"; export VNCVIEWER_RFBVERSION
;;
"-nobell") VNCVIEWER_NOBELL=1; export VNCVIEWER_NOBELL
;;
"-popupfix") VNCVIEWER_POPUP_FIX=1; export VNCVIEWER_POPUP_FIX
;;
"-realvnc4") VNCVIEWER_IS_REALVNC4=1; export VNCVIEWER_IS_REALVNC4
;;
"-h"*) help; exit 0
;;
"--h"*) help; exit 0
......@@ -273,6 +289,7 @@ if [ "X$reverse" != "X" ]; then
echo "*Warning*: -listen and a single proxy/gateway does not make sense."
sleep 3
fi
SSVNC_LISTEN_ONCE=1; export SSVNC_LISTEN_ONCE
fi
fi
if [ "X$ssh_cmd" = "X" ]; then
......@@ -342,6 +359,9 @@ if [ "X$SSVNC_ULTRA_DSM" != "X" ]; then
use_ssh=""
use_sshssl=""
direct_connect=1
if echo "$SSVNC_ULTRA_DSM" | grep 'noultra:' > /dev/null; then
SSVNC_NO_ULTRA_DSM=1; export SSVNC_NO_ULTRA_DSM
fi
fi
# (possibly) tell the vncviewer to only listen on lo:
......@@ -1448,9 +1468,16 @@ Kecho proxy=$proxy
echo ""
echo "NOTE: Press Ctrl-C to terminate viewer LISTEN mode."
echo ""
echo "$VNCVIEWERCMD" "$@" -listen $N
N2=$N
if [ "X$VNCVIEWER_IS_REALVNC4" = "X1" ]; then
N2=`echo "$N2" | sed -e 's/://g'`
if [ $N2 -le 200 ]; then
N2=`expr $N2 + 5500`
fi
fi
echo "$VNCVIEWERCMD" "$@" -listen $N2
echo ""
$VNCVIEWERCMD "$@" -listen $N
$VNCVIEWERCMD "$@" -listen $N2
fi
exit $?
......@@ -1536,14 +1563,19 @@ if [ "X$direct_connect" != "X" ]; then
echo ""
echo "Using UltraVNC DSM Plugin key for encryption:"
echo ""
echo " $SSVNC_ULTRA_DSM PORT HOST:PORT"
ustr=`echo "$SSVNC_ULTRA_DSM" | sed -e 's/pw=[^ ]*/pw=******/g'`
echo " $ustr PORT HOST:PORT"
echo ""
elif [ "X$getport" = "X" ]; then
echo ""
echo "Running viewer for direct connection:"
echo ""
echo "** NOTE: THERE WILL BE NO SSL OR SSH ENCRYPTION **"
echo ""
if echo X"$@" | grep chatonly > /dev/null; then
:
else
echo ""
echo "** NOTE: THERE WILL BE NO SSL OR SSH ENCRYPTION **"
echo ""
fi
fi
x=""
if [ "X$SSVNC_NO_ENC_WARN" != "X" ]; then
......@@ -1594,9 +1626,25 @@ if [ "X$direct_connect" != "X" ]; then
if [ "X$reverse" = "X" ]; then
hostdisp="$host:$disp"
if [ "X$SSVNC_ULTRA_DSM" != "X" ]; then
hostdisp="exec=$SSVNC_ULTRA_DSM 0 $host:$port"
if [ "X$SSVNC_USE_OURS" = "X1" ]; then
hostdisp="exec=$SSVNC_ULTRA_DSM 0 $host:$port"
else
pf=`findfree 5970`
cmd="$SSVNC_ULTRA_DSM -$pf $host:$port"
pf=`expr $pf - 5900`
hostdisp="localhost:$pf"
ustr=`echo "$cmd" | sed -e 's/pw=[^ ]*/pw=******/g'`
echo "Running:"
echo
echo "$ustr &"
echo
$cmd &
dsm_pid=$!
sleep 2
fi
fi
echo "$VNCVIEWERCMD" "$@" "$hostdisp"
hostdisp2=`echo "$hostdisp" | sed -e 's/pw=[^ ]*/pw=******/g'`
echo "$VNCVIEWERCMD" "$@" "$hostdisp2"
trap "final" 0 2 15
echo ""
$VNCVIEWERCMD "$@" "$hostdisp"
......@@ -1614,13 +1662,17 @@ if [ "X$direct_connect" != "X" ]; then
trap "final" 0 2 15
if [ "X$SSVNC_ULTRA_DSM" != "X" ]; then
echo "NOTE: The ultravnc_dsm_helper only runs once. So after the first LISTEN"
echo " ends, you will have to Press Ctrl-C and restart for a new connection."
echo " ends, you may have to Press Ctrl-C and restart for another connection."
echo ""
SSVNC_LISTEN_ONCE=1; export SSVNC_LISTEN_ONCE
VNCVIEWER_LISTEN_LOCALHOST=1
export VNCVIEWER_LISTEN_LOCALHOST
dport=`expr 5500 + $disp`
cmd="$SSVNC_ULTRA_DSM $dport localhost:$use"
ustr=`echo "$cmd" | sed -e 's/pw=[^ ]*/pw=******/g'`
echo "Running:"
echo
echo "$cmd &"
echo "$ustr &"
echo
$cmd &
dsm_pid=$!
......@@ -1630,9 +1682,16 @@ if [ "X$direct_connect" != "X" ]; then
disp=`expr $disp - 5500`
fi
fi
echo "$VNCVIEWERCMD" "$@" -listen $disp
disp2=$disp
if [ "X$VNCVIEWER_IS_REALVNC4" = "X1" ]; then
disp2=`echo "$disp2" | sed -e 's/://g'`
if [ $disp2 -le 200 ]; then
disp2=`expr $disp2 + 5500`
fi
fi
echo "$VNCVIEWERCMD" "$@" -listen $disp2
echo ""
$VNCVIEWERCMD "$@" -listen $disp
$VNCVIEWERCMD "$@" -listen $disp2
fi
exit $?
fi
......@@ -1793,7 +1852,7 @@ if [ "X$stunnel_exec" = "X" ]; then
if [ "X$mycert" != "X" ]; then
sleep 1
echo ""
echo "(pausing for possible certificate passphrase dialog)"
echo "(** pausing for possible certificate passphrase dialog **)"
echo ""
sleep 4
fi
......@@ -1829,7 +1888,14 @@ else
echo ""
echo "NOTE: Press Ctrl-C to terminate viewer LISTEN mode."
echo ""
echo "$VNCVIEWERCMD" "$@" -listen $N
N2=$N
if [ "X$VNCVIEWER_IS_REALVNC4" = "X1" ]; then
N2=`echo "$N2" | sed -e 's/://g'`
if [ $N2 -le 200 ]; then
N2=`expr $N2 + 5500`
fi
fi
echo "$VNCVIEWERCMD" "$@" -listen $N2
trap "final" 0 2 15
echo ""
if [ "X$proxy" != "X" ]; then
......@@ -1838,7 +1904,7 @@ else
PPROXY_KILLPID=+1; export PPROXY_KILLPID;
$ptmp &
fi
$VNCVIEWERCMD "$@" -listen $N
$VNCVIEWERCMD "$@" -listen $N2
fi
sleep 1
......@@ -8,7 +8,7 @@ exec wish "$0" "$@"
# ssvnc.tcl: gui wrapper to the programs in this
# package. Also sets up service port forwarding.
#
set version 1.0.20
set version 1.0.21
set buck_zero $argv0
......@@ -362,9 +362,8 @@ proc help {} {
and any VNC server can be made to do this by using, e.g., STUNNEL
or socat on the remote side.
Automatic SSH tunnels are described below.
See Tip 5) below for how to disable encryption.
* Automatic SSH Tunnels are described below.
* See Tip 5) below for how to Disable Encryption.
Port numbers:
......@@ -380,6 +379,10 @@ proc help {} {
If you must use a TCP port less than 200, specify a negative value,
e.g.: 24.67.132.27:-80
For Reverse VNC connections (listening viewer, See Tip 6 below and
Options -> Help), the port mapping is similar, except "listening
display :0" corresponds to port 5500, :1 to 5501, etc.
SSL Certificate Verification:
......@@ -828,14 +831,20 @@ proc help {} {
For mode II when tunnelling via SSL, you probably should also disable
"Verify All Certs" unless you have taken the steps beforehand to
import the VNC server's certificate, or have previously accepted it
using another method. With the mode II proxying scheme, there is
no way to "Fetch Cert" and check if it has been previously accepted.
import the VNC server's certificate, or have previously accepted
it using another method. With the mode II proxying scheme, there
is no way to do the initial "Fetch Cert" and check if it has been
previously accepted.
Even when you disable "Verify All Certs", you are free to set a
ServerCert or CertsDir under "Certs ..." to authenticate the VNC
Server against.
Also, after the connection you MUST terminate the listening VNC Viewer
(Ctrl-C) and connect again (the proxy only runs once.) In Windows,
go to the System Tray and terminate the Listening VNC Viewer.
Subsequent connection attempts after the first one will fail.
Subsequent connection attempts after the first one will fail unless
you return to the GUI and restart listening.
BTW, the x11vnc VNC server command for the mode II case would be
something like:
......@@ -910,10 +919,6 @@ proc help {} {
port 5500). Then click on the "Listen" button and finally have the
user run your Single Click III EXE.
For SC III, you will also need to enable the setting in the Options
menu "UltraVNC Single Click III Bug", otherwise the STUNNEL connection
may drop after 2-15 minutes.
Note that in Listening SSL mode you MUST supply a MyCert or use the
"listen.pem" one you are prompted to create.
......@@ -996,21 +1001,52 @@ proc help {} {
4) Pressing the "Load" button or pressing Ctrl-L or Clicking the Right
mouse button on the main GUI will invoke the Load dialog.
5) If you want to do a Direct VNC connection, WITH **NO** SSL OR SSH
ENCRYPTION, use the "vnc://" prefix, e.g. vnc://far-away.east:0
This also works for reverse connections (see below).
Pressing Ctrl-A on the main GUI will bring up the Advanced
Options Panel.
5) If you want to make a Direct VNC connection, WITH **NO** SSL OR
SSH ENCRYPTION, use the "vnc://" prefix in the VNC Host:Display
entry box, e.g. "vnc://far-away.east:0" This also works for
reverse connections (e.g. vnc://0 more info below). Use Vnc://
to avoid being prompted if you are sure you want no encryption.
Apologies that we do not make this easy to figure out how to do
(e.g. a button on the main panel), but the goal of SSVNC is
secure and encrypted connections!
Often SSVNC is used to connect to x11vnc where the Unix username
and password is sent over the channel. It would be a very bad
idea to let that data be sent over an unencrypted connection.
In general, it is not wise to have a plaintext VNC connection.
So we force you to learn about and supply the "vnc://" or "Vnc://"
prefix to the host:port to disable encryption rather than simply
click on an option and not think too much about the consequences.
Note that even the VNC Password challenge-response method (the
password is not sent in plaintext) leaves your VNC password
susceptible a dictionary attack unless encryption is used.
The prefix will be stored in any profile that you save so you
do not have to enter it every time.
Set the env var SSVNC_NO_ENC_WARN=1 to skip the warning prompts.
Sorry we do not make this easy to figure out how to do (e.g. a
button on the main panel), but the goal of SSVNC is secure
connections! Set the env var SSVNC_NO_ENC_WARN=1 to skip the
warning prompts. Using capitalized: Vnc:// will also skip the
prompts.
Using capitalized: Vnc:// will also skip the prompts, for example,
"Vnc://far-away.east:0" in the VNC Host:Display entry box.
6) Reverse VNC connections are possible as well. Go to Options and
select "Reverse VNC connection". In the 'VNC Host:Display' entry
box put in the number (e.g. "0" or ":0") that corresponds to the
Listening display (0 -> port 5500). See the Options Help for more
info.
6) Reverse VNC connections (Listening) are possible as well.
In this case the VNC Server initiates the connection to your
waiting (i.e. listening) SSVNC viewer.
Go to Options and select "Reverse VNC connection". In the 'VNC
Host:Display' entry box put in the number (e.g. "0" or ":0", or
":1", etc) that corresponds to the Listening display (0 -> port
5500, 1 -> port 5501, etc.) you want to use. Then clicking on
'Listen' puts your SSVNC viewer in a "listening" state on that
port number, waiting for a connection from the VNC Server.
See the Options Help for more info.
7) On Unix to have SSVNC act as a general STUNNEL redirector (i.e. no
VNC), put the desired host:port in VNC Host:Display (use a
......@@ -1526,6 +1562,11 @@ set msg {
Clicking on this button will return you to the full SSVNC Mode.
Unix ssvncviewer:
Clicking on this button will popup a menu for setting options
of the Unix (and Mac OS X) provided SSVNC vncviewer.
~/.ssvncrc file:
......@@ -1781,18 +1822,28 @@ set msg {
Reverse VNC Connection:
Reverse (listening) VNC connections are possible.
Reverse (listening) VNC connections are possible as well.
In this case the VNC Server initiates the connection to your
waiting (i.e. listening) SSVNC viewer.
For SSL connections in the 'VNC Host:Display' entry box put in
the number (e.g. "0" or ":0") that corresponds to the Listening
display (0 -> port 5500). For example x11vnc can then be used:
"x11vnc ... -ssl SAVE -connect hostname:port".
the number (e.g. "0" or ":0" or ":1", etc.) that corresponds to
the Listening display (0 -> port 5500, 1 -> port 5501, etc.) you
want to use. For example x11vnc can then be used via:
"x11vnc ... -ssl SAVE -connect hostname:port" using the "port"
with the one you chose.
Clicking on the 'Listen' button puts your SSVNC viewer
in a "listening" state on that port number, waiting for a
connection from the VNC Server.
Then a VNC server should establish a reverse connection to
that port on this machine (e.g. -connect this-machine:5500)
that port on this machine (e.g. -connect this-machine:5500
or -connect this-machine:5503, etc.)
Server SSL certificates will be verified, however you WILL
NOTE be prompted about unrecognized ones; rather, you MUST
NOT be prompted about unrecognized ones; rather, you MUST
set up the correct Server certificate (e.g. by importing).
prior to any connections.
......@@ -1844,32 +1895,6 @@ set msg {
unless it is a double proxy where the 2nd host is the machine with
the VNC server.
UltraVNC Single Click III Bug:
The UltraVNC Single Click III (SSL) server works with SSVNC;
it makes a reverse connection to it via an SSL tunnel:
http://www.uvnc.com/pchelpware/SCIII/index.html
Unfortunately the SSL implementation used by UltraVNC SC III
is incompatible with OpenSSL in that the connection will be
dropped after 2-15 minutes due to an unexpected packet.
However this can be worked around in STUNNEL by setting
configution item 'options = ALL'. Enabling 'UltraVNC Single
Click III Bug' passes this setting to STUNNEL.
On Windows 'options = ALL' is used by default for stunnel.
On Unix and MacOSX you will need to select this option.
Setting this option may provide a workaround for other SSL
VNC servers.
BTW, you can set the environment variable STUNNEL_EXTRA_OPTS_USER
to add any lines to the STUNNEL global config that you want to.
See the stunnel(8) man page for more details.
View Only: Have VNC Viewer ignore mouse and keyboard input.
......@@ -2322,19 +2347,20 @@ proc set_defaults {} {
global ts_mode ts_desktop_size ts_desktop_depth choose_desktop_geom
global additional_port_redirs additional_port_redirs_list
global stunnel_local_protection stunnel_local_protection_type ssh_local_protection multiple_listen
global ultra_dsm ultra_dsm_type ultra_dsm_file
global ultra_dsm ultra_dsm_type ultra_dsm_file ultra_dsm_noultra ultra_dsm_salt
global sound_daemon_remote_cmd sound_daemon_remote_port sound_daemon_kill sound_daemon_restart
global sound_daemon_local_cmd sound_daemon_local_port sound_daemon_local_kill sound_daemon_x11vnc sound_daemon_local_start
global smb_su_mode smb_mount_list
global use_port_knocking port_knocking_list
global ycrop_string extra_sleep use_listen use_unixpw use_x11vnc_find unixpw_username
global use_uvnc_ssl_bug
global ycrop_string ssvnc_scale sbwid_string rfbversion ssvnc_encodings use_x11cursor use_nobell use_rawlocal use_popupfix extra_sleep use_listen use_unixpw use_x11vnc_find unixpw_username
global disable_ssl_workarounds disable_ssl_workarounds_type
global include_list
set defs(use_viewonly) 0
set defs(use_listen) 0
set defs(use_uvnc_ssl_bug) 0
set defs(disable_ssl_workarounds) 0
set defs(disable_ssl_workarounds_type) "none"
set defs(use_unixpw) 0
set defs(unixpw_username) ""
set defs(use_x11vnc_find) 0
......@@ -2392,13 +2418,15 @@ proc set_defaults {} {
set defs(additional_port_redirs_list) ""
set defs(stunnel_local_protection) 0
set defs(stunnel_local_protection_type) "none"
set defs(stunnel_local_protection_type) "exec"
set defs(ssh_local_protection) 0
set defs(multiple_listen) 0
set defs(ultra_dsm) 0
set defs(ultra_dsm_file) ""
set defs(ultra_dsm_type) "guess"
set defs(ultra_dsm_noultra) 0
set defs(ultra_dsm_salt) ""
set defs(cups_local_server) ""
set defs(cups_remote_port) ""
......@@ -2420,6 +2448,14 @@ proc set_defaults {} {
set defs(sound_daemon_x11vnc) 0
set defs(ycrop_string) ""
set defs(ssvnc_scale) ""
set defs(sbwid_string) ""
set defs(rfbversion) ""
set defs(ssvnc_encodings) ""
set defs(use_x11cursor) 0
set defs(use_nobell) 0
set defs(use_rawlocal) 0
set defs(use_popupfix) 0
set defs(extra_sleep) ""
set defs(use_port_knocking) 0
set defs(port_knocking_list) ""
......@@ -2458,10 +2494,10 @@ proc set_defaults {} {
}
proc do_viewer_windows {n} {
global use_alpha use_grab use_ssh use_sshssl use_viewonly use_fullscreen use_bgr233
global use_alpha use_grab use_x11cursor use_nobell use_ssh use_sshssl use_viewonly use_fullscreen use_bgr233
global use_nojpeg use_raise_on_beep use_compresslevel use_quality
global change_vncviewer change_vncviewer_path vncviewer_realvnc4
global use_listen use_uvnc_ssl_bug env
global use_listen disable_ssl_workarounds disable_ssl_workarounds_type env
set cmd "vncviewer"
if {$change_vncviewer && $change_vncviewer_path != ""} {
......@@ -2897,7 +2933,8 @@ proc launch_windows_ssh {hp file n} {
global is_win9x env
global use_sshssl use_ssh putty_pw
global port_knocking_list
global use_listen use_uvnc_ssl_bug listening_name
global use_listen listening_name
global disable_ssl_workarounds disable_ssl_workarounds_type
global ts_only
global debug_netstat
......@@ -3363,6 +3400,7 @@ proc launch_windows_ssh {hp file n} {
catch {destroy .o}
catch {destroy .oa}
catch {destroy .os}
if { ![do_port_knock $ssh_host start]} {
catch {file delete $file}
......@@ -3766,6 +3804,7 @@ proc darwin_terminal_cmd {{title ""} {cmd ""} {bg 0}} {
set fh ""
catch {set fh [open $tmp w 0755]}
catch {[exec chmod 755 $tmp]}
if {$fh == ""} {
raise .
tk_messageBox -type ok -icon error -message "Cannot open temporary file: $tmp" -title "Cannot open file"
......@@ -4707,9 +4746,11 @@ proc repeater_proxy_check {proxy} {
set force 1
}
}
global use_listen
global use_listen ultra_dsm
if {! $use_listen} {
if {$force} {
if {$ultra_dsm != ""} {
return 1;
} elseif {$force} {
mesg "WARNING: repeater:// ID:nnn proxy must use Listen Mode"
after 1000
} else {
......@@ -4880,7 +4921,8 @@ proc reset_stunnel_extra_opts {} {
proc launch_unix {hp} {
global smb_redir_0 smb_mounts env
global vncauth_passwd use_unixpw unixpw_username unixpw_passwd
global ssh_only ts_only
global ssh_only ts_only use_x11cursor use_nobell use_rawlocal use_popupfix ssvnc_scale
global ssvnc_encodings
globalize
......@@ -4933,17 +4975,31 @@ proc launch_unix {hp} {
set ssvnc_multiple_listen0 ""
if {[regexp -nocase {sslrepeater://} $hp]} {
if {! $use_uvnc_ssl_bug} {
set use_uvnc_ssl_bug 1
mesg "Enabling 'UltraVNC Single Click III Bug'"
if {$disable_ssl_workarounds} {
set disable_ssl_workarounds 0
mesg "Disabling SSL workarounds for 'UVNC Single Click III Bug'"
after 400
}
}
if {$use_uvnc_ssl_bug && ! $use_ssh} {
if [info exists env(STUNNEL_EXTRA_OPTS)] {
set stunnel_extra_opts0 $env(STUNNEL_EXTRA_OPTS)
if [info exists env(STUNNEL_EXTRA_OPTS)] {
set stunnel_extra_opts0 $env(STUNNEL_EXTRA_OPTS)
if {$disable_ssl_workarounds} {
if {$disable_ssl_workarounds_type == "none"} {
;
} elseif {$disable_ssl_workarounds_type == "noempty"} {
set env(STUNNEL_EXTRA_OPTS) "$env(STUNNEL_EXTRA_OPTS)\noptions = DONT_INSERT_EMPTY_FRAGMENTS"
}
} else {
set env(STUNNEL_EXTRA_OPTS) "$env(STUNNEL_EXTRA_OPTS)\noptions = ALL"
}
} else {
if {$disable_ssl_workarounds} {
if {$disable_ssl_workarounds_type == "none"} {
;
} elseif {$disable_ssl_workarounds_type == "noempty"} {
set env(STUNNEL_EXTRA_OPTS) "options = DONT_INSERT_EMPTY_FRAGMENTS"
}
} else {
set env(STUNNEL_EXTRA_OPTS) "options = ALL"
}
......@@ -4974,13 +5030,25 @@ proc launch_unix {hp} {
}
}
if {$ultra_dsm} {
if {![file exists $ultra_dsm_file]} {
if {![file exists $ultra_dsm_file] && ![regexp {pw=} $ultra_dsm_file]} {
mesg "DSM key file does exist: $ultra_dsm_file"
bell
after 1000
return
}
global vncauth_passwd
if {$ultra_dsm_file == "pw=VNCPASSWORD" || $ultra_dsm_file == "pw=VNCPASSWD"} {
if {![info exists vncauth_passwd] || $vncauth_passwd == ""} {
mesg "For DSM pw=VNCPASSWD you must supply the VNC Password"
bell
after 1000
return
}
}
set dsm "ultravnc_dsm_helper "
if {$ultra_dsm_noultra} {
append dsm "noultra:"
}
if {$use_listen} {
append dsm "rev:"
}
......@@ -4989,7 +5057,16 @@ proc launch_unix {hp} {
} else {
append dsm $ultra_dsm_type
}
append dsm " $ultra_dsm_file"
if {$ultra_dsm_noultra} {
if {$ultra_dsm_salt != ""} {
append dsm "@$ultra_dsm_salt"
}
}
if {$ultra_dsm_file == "pw=VNCPASSWORD" || $ultra_dsm_file == "pw=VNCPASSWD"} {
append dsm " pw=$vncauth_passwd"
} else {
append dsm " $ultra_dsm_file"
}
set env(SSVNC_ULTRA_DSM) $dsm
}
if {$ssh_local_protection} {
......@@ -5255,6 +5332,30 @@ proc launch_unix {hp} {
if {$use_grab} {
set cmd "$cmd -grab"
}
if {$use_x11cursor} {
set cmd "$cmd -x11cursor"
}
if {$use_nobell} {
set cmd "$cmd -nobell"
}
if {$use_rawlocal} {
set cmd "$cmd -rawlocal"
}
if {$use_popupfix} {
set cmd "$cmd -popupfix"
}
if {$ssvnc_scale != ""} {
set cmd "$cmd -scale '$ssvnc_scale'"
}
if {$ssvnc_encodings != ""} {
set cmd "$cmd -ssvnc_encodings '$ssvnc_encodings'"
}
if {$rfbversion != ""} {
set cmd "$cmd -rfbversion '$rfbversion'"
}
if {$vncviewer_realvnc4} {
set cmd "$cmd -realvnc4"
}
if {$use_listen} {
set cmd "$cmd -listen"
}
......@@ -5274,8 +5375,6 @@ proc launch_unix {hp} {
}
}
set cmd "$cmd $hp"
set do_vncspacewrapper 0
if {$change_vncviewer && $change_vncviewer_path != ""} {
set path [string trim $change_vncviewer_path]
......@@ -5346,11 +5445,23 @@ proc launch_unix {hp} {
set realvnc4 0
set realvnc3 1
}
if {$realvnc4} {
set cmd "$cmd -realvnc4"
}
set cmd "$cmd $hp"
set passwdfile ""
if {$vncauth_passwd != ""} {
global use_listen
set passwdfile "$env(SSVNC_HOME)/.vncauth_tmp.[tpid]"
set footest [mytmp /tmp/.check.[tpid]]
catch {file delete $footest}
global mktemp
set passwdfile "/tmp/.vncauth_tmp.[tpid]"
if {$mktemp == ""} {
set passwdfile "$env(SSVNC_HOME)/.vncauth_tmp.[tpid]"
}
set passwdfile [mytmp $passwdfile]
catch {exec vncstorepw $vncauth_passwd $passwdfile}
catch {exec chmod 600 $passwdfile}
......@@ -5446,6 +5557,7 @@ proc launch_unix {hp} {
}
global ycrop_string
global sbwid_string
catch {unset env(VNCVIEWER_SBWIDTH)}
catch {unset env(VNCVIEWER_YCROP)}
if {[info exists ycrop_string] && $ycrop_string != ""} {
......@@ -5457,12 +5569,18 @@ proc launch_unix {hp} {
if {$t != ""} {
set env(VNCVIEWER_YCROP) $t
}
#catch {puts "VNCVIEWER_SBWIDTH $env(VNCVIEWER_SBWIDTH)"}
#catch {puts "VNCVIEWER_YCROP $env(VNCVIEWER_YCROP)"}
}
if {[info exists sbwid_string] && $sbwid_string != ""} {
set t $sbwid_string
set env(VNCVIEWER_SBWIDTH) $sbwid_string
if {$t != ""} {
set env(VNCVIEWER_SBWIDTH) $t
}
}
catch {destroy .o}
catch {destroy .oa}
catch {destroy .os}
update
if {$use_sound && $sound_daemon_local_start && $sound_daemon_local_cmd != ""} {
......@@ -5471,7 +5589,6 @@ proc launch_unix {hp} {
set sound_daemon_local_pid ""
#exec sh -c "$sound_daemon_local_cmd " >& /dev/null </dev/null &
set sound_daemon_local_pid [exec sh -c "echo \$\$; exec $sound_daemon_local_cmd </dev/null 1>/dev/null 2>/dev/null &"]
#puts "A $sound_daemon_local_pid"
update
after 500
}
......@@ -5522,8 +5639,15 @@ proc launch_unix {hp} {
set env(SSVNC_EXTRA_SLEEP) $extra_sleep
}
unix_terminal_cmd $geometry "SSL/SSH VNC Viewer $hp" \
"$te$cmd; set +xv; ulimit -c 0; trap 'printf \"Paused. Press Enter to exit:\"; read x' QUIT; echo; echo $m; echo; echo sleep 5; echo; sleep 6" 0 $xrm1 $xrm2 $xrm3
set sstx "SSL/SSH VNC Viewer"
set hptx $hp
global use_listen
if {$use_listen} {
set sstx "SSVNC"
set hptx "$hp (Press Ctrl-C to Stop Listening)"
}
unix_terminal_cmd $geometry "$sstx $hptx" \
"$te$cmd; set +xv; ulimit -c 0; trap 'printf \"Paused. Press Enter to exit:\"; read x' QUIT; echo; echo $m; echo; echo sleep 5; echo; sleep 5" 0 $xrm1 $xrm2 $xrm3
set env(SS_VNCVIEWER_SSH_CMD) ""
set env(SS_VNCVIEWER_USE_C) ""
......@@ -5786,7 +5910,7 @@ proc launch {{hp ""}} {
global mycert svcert crtdir
global pids_before pids_after pids_new
global env
global use_ssl use_ssh use_sshssl use_listen use_uvnc_ssl_bug
global use_ssl use_ssh use_sshssl use_listen disable_ssl_workarounds
global vncdisplay
set debug 0
......@@ -6151,10 +6275,14 @@ proc launch {{hp ""}} {
} else {
puts $fh "client = yes"
}
# WRT, UltraVNC Single Click III Bug:
# Wow, on Windows we've been using 'options = ALL'
# all along! Duh. OK keep it...
puts $fh "options = ALL"
global disable_ssl_workarounds disable_ssl_workarounds_type
if {$disable_ssl_workarounds} {
if {$disable_ssl_workarounds_type == "noempty"} {
puts $fh "options = DONT_INSERT_EMPTY_FRAGMENTS"
}
} else {
puts $fh "options = ALL"
}
puts $fh "taskbar = yes"
puts $fh "RNDbytes = 2048"
......@@ -6287,6 +6415,7 @@ proc launch {{hp ""}} {
} else {
catch {destroy .o}
catch {destroy .oa}
catch {destroy .os}
wm withdraw .
}
......@@ -6418,6 +6547,7 @@ proc direct_connect_windows {{hp ""}} {
catch {destroy .o}
catch {destroy .oa}
catch {destroy .os}
wm withdraw .
if {$use_listen} {
......@@ -10728,79 +10858,89 @@ proc help_advanced_opts {} {
Brief descriptions:
CUPS Print tunnelling: redirect localhost:6631 (say) on the VNC
server to your local CUPS server.
CUPS Print tunnelling:
ESD/ARTSD Audio tunnelling: redirect localhost:16001 (say) on
the VNC server to your local ESD, etc. sound server.
Redirect localhost:6631 (say) on the VNC server to your local
CUPS server.
SMB mount tunnelling: redirect localhost:1139 (say) on the VNC
server and through that mount SMB file shares from your local
server. The remote machine must be Linux with smbmount installed.
ESD/ARTSD Audio tunnelling:
Additional Port Redirs: specify additional -L port:host:port and
-R port:host:port cmdline options for SSH to enable additional
services.
Redirect localhost:16001 (say) on the VNC server to your local
ESD, etc. sound server.
SSH Local Port Protections: and LD_PRELOAD hack to limit the
number of SSH port redirections to 1 and within the first
15 seconds. So there is a smaller window when the user can try
to use your tunnel compared to the duration of your session.
SMB mount tunnelling:
STUNNEL Local Port Protections: Try to prevent Untrusted Local
Users (see the main Help panel) from using your STUNNEL tunnel
to connect to the remote VNC Server.
Redirect localhost:1139 (say) on the VNC server and through
that mount SMB file shares from your local server. The remote
machine must be Linux with smbmount installed.
UltraVNC DSM Encryption Plugin: on Unix, by using the supplied
tool, ultravnc_dsm_helper, encrypted connections to UltraVNC
servers using their plugins is enabled.
Additional Port Redirs:
Multiple LISTEN Connections: allow multiple VNC servers to
reverse connect at the same time and so display each of their
desktops on your screen at the same time.
Specify additional -L port:host:port and -R port:host:port
cmdline options for SSH to enable additional services.
Change VNC Viewer: specify a non-bundled VNC Viewer (e.g.
UltraVNC or RealVNC) to run instead of the bundled TightVNC Viewer.
SSH Local Port Protections:
Port Knocking: for "closed port" services, first "knock" on the
firewall ports in a certain way to open the door for SSH or SSL.
The port can also be closed when the encrypted VNC connection
finishes.
An LD_PRELOAD hack to limit the number of SSH port redirections
to 1 and within the first 15 seconds. So there is a smaller
window when the user can try to use your tunnel compared to
the duration of your session.
Use XGrabServer: On Unix only, use the XGrabServer workaround
for old window managers.
STUNNEL Local Port Protections:
Cursor Alphablending: Use the x11vnc alpha hack for translucent
cursors (requires Unix, 32bpp and same endianness)
Try to prevent Untrusted Local Users (see the main Help panel)
from using your STUNNEL tunnel to connect to the remote VNC
Server.
Y Crop: this is for x11vnc's -ncache client side caching scheme
with our Unix TightVNC viewer. Sets the Y value to "crop" the
viewer size at (below the cut is the pixel cache region you do
not want to see). If the screen is tall (H > 2*W) ycropping
will be autodetected, or you can set to -1 to force autodection.
Otherwise, set it to the desired Y value. You can also set
the scrollbar width (very thin by default) by appending ",sb=N"
(or use ",sb=N" by itself to just set the scrollbar width).
UltraVNC DSM Encryption Plugin:
Include: Profile template(s) to load before loading a profile
(Load button). For example if you Save a profile called "globals"
On Unix only, by using the supplied tool, ultravnc_dsm_helper,
encrypted connections to UltraVNC servers using their plugins
is enabled. Support for secret key encryption to Non-UltraVNC
DSM servers is also supported, e.g. x11vnc -enc blowfish:my.key
Change VNC Viewer:
Specify a non-bundled VNC Viewer (e.g. UltraVNC or RealVNC)
to run instead of the bundled TightVNC Viewer.
Port Knocking:
For "closed port" services, first "knock" on the firewall ports
in a certain way to open the door for SSH or SSL. The port
can also be closed when the encrypted VNC connection finishes.
Include:
Profile template(s) to load before loading a profile (Load
button). For example if you Save a profile called "globals"
that has some settings you use often, then just supply "Include:
globals" to have them applied. You may supply a comma or space
separated list of templates to include. They can be full path
names or basenames relative to the profiles directory. You do
not need to supply the .vnc suffix. The non-default settings
in them will be applied first, and then any values in the loaded
Profile will override them.
separated list of templates to include. They can be full
path names or basenames relative to the profiles directory.
You do not need to supply the .vnc suffix. The non-default
settings in them will be applied first, and then any values in
the loaded Profile will override them.
Sleep:
Sleep: Enter a number to indicate how many extra seconds to sleep
Enter a number to indicate how many extra seconds to sleep
while waiting for the VNC viewer to start up. On Windows this
can give extra time to enter the Putty/Plink password, etc.
ssh-agent: On Unix only: restart the GUI in the presence of
ssh-agent(1) (e.g. in case you forgot to start your agent before
starting this GUI). An xterm will be used to enter passphrases,
etc. This can avoid repeatedly entering passphrases for the SSH
logins (note this requires setting up and distributing SSH keys).
Unix ssvncviewer:
Display a popup menu with options that apply to the special
Unix SSVNC VNC Viewer (perhaps called 'ssvncviewer') provided by
this SSVNC package. This only applies to Unix or Mac OS X.
Use ssh-agent:
On Unix only: restart the GUI in the presence of ssh-agent(1)
(e.g. in case you forgot to start your agent before starting
this GUI). An xterm will be used to enter passphrases, etc.
This can avoid repeatedly entering passphrases for the SSH logins
(note this requires setting up and distributing SSH keys).
About the CheckButtons:
......@@ -10814,6 +10954,111 @@ proc help_advanced_opts {} {
jiggle_text .ah.f.t
}
proc help_ssvncviewer_opts {} {
toplev .av
scroll_text_dismiss .av.f
center_win .av
wm title .av "Unix SSVNC viewer Options Help"
set msg {
These Unix SSVNC VNC Viewer Options apply only on Unix or Mac OS X
when using the viewer (ssvncviewer) supplied by this SSVNC package.
Brief descriptions:
Multiple LISTEN Connections:
Allow multiple VNC servers to reverse connect at the same time
and so display each of their desktops on your screen at the
same time.
Use X11 Cursor:
When drawing the mouse cursor shape locally, use an X11 cursor
instead of drawing it directly into the framebuffer. This
can sometimes give better response, and avoid problems under
'Scaling'.
Disable Bell:
Disable beeps coming from remote side.
Use Raw Local:
Use the VNC Raw encoding for 'localhost' connections (instead
of assuming there is a local tunnel, SSL or SSH, going to the
remote machine.
Use Popup Fix:
Enable a fix that warps the popup (F8) to the mouse pointer.
Use XGrabServer (for fullscreen):
On Unix only, use the XGrabServer workaround for older window
managers. Sometimes also needed on recent (2008) GNOME. This
workaround can make going into/out-of Fullscreen work better.
Cursor Alphablending:
Use the x11vnc alpha hack for translucent cursors (requires Unix,
32bpp and same endianness)
Scaling:
Use viewer-side (i.e. local) scaling of the VNC screen. Supply
a fraction, e.g. 0.75 or 3/4, or a WxH geometry, e.g. 1280x1024,
or the string 'fit' to fill the current screen. Use 'auto'
to scale the desktop to match the viewer window size.
Y Crop:
This is for x11vnc's -ncache client side caching scheme with our
Unix TightVNC viewer. Sets the Y value to "crop" the viewer
size at (below the cut is the pixel cache region you do not
want to see). If the screen is tall (H > 2*W) ycropping will
be autodetected, or you can set to -1 to force autodection.
Otherwise, set it to the desired Y value. You can also set
the scrollbar width (very thin by default) by appending ",sb=N"
(or use ",sb=N" by itself to just set the scrollbar width).
ScrollBar Width:
This is for x11vnc's -ncache client side caching scheme with our
Unix TightVNC viewer. For Y-Crop mode, set the size of the
scrollbars (often one want it to be very narrow, e.g. 2 pixels
to be less distracting.
These are environment variables one may set to affect the options
of the SSVNC vncviewer:
VNCVIEWER_ALPHABLEND (-alpha, see Cursor Alphablending above)
VNCVIEWER_POPUP_FIX (-popupfix, warp popup to mouse location)
VNCVIEWER_GRAB_SERVER (-graball, see Use XGrabServer above)
VNCVIEWER_YCROP (-ycrop, see Y Crop above)
VNCVIEWER_SBWIDTH (-sbwidth, see ScrollBar Width above)
VNCVIEWER_RFBVERSION (-rfbversion, e.g. 3.6)
VNCVIEWER_ENCODINGS (-encodings, e.g. "copyrect zrle hextile")
VNCVIEWER_BELL (-bell)
VNCVIEWER_X11CURSOR (-x11cursor, see Use X11 Cursor above)
VNCVIEWER_RAWLOCAL (-rawlocal, see Use Raw Local above)
SSVNC_SCALE (-scale, see Scaling above)
SSVNC_MULTIPLE_LISTEN (-multilisten, see Mulitple LISTEN above)
SSVNC_UNIXPW (-unixpw)
SSVNC_UNIXPW_NOESC (do not send escape in -unixpw mode)
SSVNC_NOSOLID (do not do solid region speedup in
scaling mode.)
}
.av.f.t insert end $msg
jiggle_text .av.f.t
}
proc set_viewer_path {} {
global change_vncviewer_path
unix_dialog_resize .chviewer
......@@ -10993,7 +11238,7 @@ proc stunnel_sec_dialog {} {
On Unix, for STUNNEL SSL tunnels we provide two options as extra
safeguards against untrusted local users. Both only apply to Unix/MacOSX.
Note that Both options are *ignored* in reverse connection (Listen) mode.
Note that Both options are *IGNORED* in reverse connection (Listen) mode.
1) The first one 'Use stunnel EXEC mode' (it is mutually exclusive with
option 2). For this case the modified SSVNC Unix viewer must be
......@@ -11038,6 +11283,95 @@ proc stunnel_sec_dialog {} {
wm resizable .stlsec 1 0
}
proc disable_ssl_workarounds_dialog {} {
global disable_ssl_workarounds disable_ssl_workarounds_type
toplev .sslwrk
wm title .sslwrk "Disable SSL Workarounds"
global help_font uname
scroll_text .sslwrk.f 86 36
apply_bg .sslwrk.f
set msg {
Some SSL implementations are incomplete or buggy or do not work properly
with other implementations. SSVNC uses STUNNEL for its SSL encryption,
and STUNNEL uses the OpenSSL SSL implementation.
This causes some problems with non-OpenSSL implementations on the VNC server
side. The most noticable one is the UltraVNC Single Click III (SSL) server:
http://www.uvnc.com/pchelpware/SCIII/index.html
It can make a reverse connection to SSVNC via an encrypted SSL tunnel.
Unfortunately, in the default operation with STUNNEL the connection will be
dropped after 2-15 minutes due to an unexpected packet.
Because of this, by default SSVNC will enable some SSL workarounds to make
connections like these work. This is the STUNNEL 'options = ALL' setting:
it enables a basic set of SSL workarounds.
You can read all about these workarounds in the stunnel(8) manpage and the
OpenSSL SSL_CTX_set_options(3) manpage.
Why are we mentioning this? STUNNELS's 'options = ALL' lowers the SSL
security a little bit. If you know you do not have an incompatible SSL
implementation on the server side (e.g. any one using OpenSSL is compatible,
x11vnc in particular), then you can regain that little bit of security by
selecting the "Disable SSL Workarounds" option.
"Disable All SSL Workarounds" selected below will do that. On the other hand,
choose "Keep the DONT_INSERT_EMPTY_FRAGMENTS Workaround" to retain that one,
commonly needed workaround.
BTW, you can set the environment variable STUNNEL_EXTRA_OPTS_USER to add
any lines to the STUNNEL global config that you want to. See the stunnel(8)
man page for more details.
}
.sslwrk.f.t insert end $msg
radiobutton .sslwrk.none -relief ridge -anchor w -variable disable_ssl_workarounds_type -value "none" -text "Disable All Workarounds"
radiobutton .sslwrk.noempty -relief ridge -anchor w -variable disable_ssl_workarounds_type -value "noempty" -text "Keep the DONT_INSERT_EMPTY_FRAGMENTS Workaround"
button .sslwrk.cancel -text "Cancel" -command {set disable_ssl_workarounds 0; destroy .sslwrk}
bind .sslwrk <Escape> {set disable_ssl_workarounds 0; destroy .sslwrk}
wm protocol .sslwrk WM_DELETE_WINDOW {set disable_ssl_workarounds 0; destroy .sslwrk}
button .sslwrk.done -text "Done" -command {destroy .sslwrk}
pack .sslwrk.f .sslwrk.none .sslwrk.noempty .sslwrk.cancel .sslwrk.done -side top -fill x
center_win .sslwrk
wm resizable .sslwrk 1 0
}
proc update_no_ultra_dsm {} {
global ultra_dsm_noultra
global ultra_dsm_type
foreach b {bf des3 aes aes256 l e} {
if {! $ultra_dsm_noultra} {
.ultradsm.nou.$b configure -state disabled
} else {
.ultradsm.nou.$b configure -state normal
}
}
if {! $ultra_dsm_noultra} {
if {$ultra_dsm_type == "arc4"} {
;
} elseif {$ultra_dsm_type == "aesv2"} {
;
} elseif {$ultra_dsm_type == "msrc4"} {
;
} elseif {$ultra_dsm_type == "msrc4_sc"} {
;
} else {
set ultra_dsm_type guess
}
}
}
proc ultra_dsm_dialog {} {
global ultra_dsm ultra_dsm_file ultra_dsm_type
......@@ -11045,20 +11379,28 @@ proc ultra_dsm_dialog {} {
wm title .ultradsm "UltraVNC DSM Encryption Plugin"
global help_font
eval text .ultradsm.t -width 80 -height 24 $help_font
apply_bg .ultradsm.t
scroll_text .ultradsm.f 85 35
set msg {
On Unix with the provided SSVNC vncviewer, you can connect to an UltraVNC
server that is using one of its encryption plugins: MSRC4 (not yet
supported), ARC4, or AESV2.
server that is using one of its encryption plugins: MSRC4, ARC4, or AESV2.
See the end of this text for how to use symmetric encryption with NON-UltraVNC
servers (for example, x11vnc 0.9.5 or later).
You will need to specify the corresponding UltraVNC encryption key (created
by you using an UltraVNC server or viewer). It is usually called 'rc4.key'
(for MSRC4), 'arc4.key' (for ARC4), and 'aesv2.key' (for AESV2). Specify
the path to it or Browse for it. Also, specify which type of plugin it is
(or use 'guess' to have it guess via the before mentioned filenames).
The choice "UVNC SC" enables a special workaround for use with UltraVNC
Single Click and the MSRC4 plugin. It may not be needed on recent SC.
You can also specify pw=my-password instead of a keyfile.
You will need to specify the corresponding UltraVNC encryption key
(created by you using an UltraVNC server or viewer). It is usually
called 'rc4.key' (for MSRC4), 'arc4.key' (for ARC4), and 'aesv2.key'
(for AESV2). Specify the path to it or browse for it. Also, specify
which type of plugin it is (or use 'guess' to have it guess via the
before mentioned filenames).
Use the literal string 'pw=VNCPASSWD' to have the VNC password that you
entered into the 'VNC Password:' be used for the pw=...
SSL and SSH tunnels do not apply in this mode (any settings are ignored.)
......@@ -11069,11 +11411,18 @@ proc ultra_dsm_dialog {} {
vncviewer had to be modified to support it. The tight and zlib encodings
currently do not work in this mode and are disabled.
Note that this program also requires the utility tool named
'ultravnc_dsm_helper' that should be included in your SSVNC kit.
Note that this mode also requires the utility tool named 'ultravnc_dsm_helper'
that should be included in your SSVNC kit.
Select Non-Ultra DSM to use symmetric encryption to a Non-UltraVNC server
via a supported symmetric key cipher. x11vnc supports symmetric
encryption via, e.g., "x11vnc -enc aesv2:./my.key". Extra ciphers are
enabled for this mode (e.g. blowfish and 3des). You can also set the random
salt size and initialization vector size in Salt,IV for example "8,16".
See the x11vnc and 'ultravnc_dsm_helper -help' documentation for more info.
}
.ultradsm.t insert end $msg
.ultradsm.f.t insert end $msg
frame .ultradsm.path
label .ultradsm.path.l -text "Ultra DSM Keyfile:"
......@@ -11085,7 +11434,7 @@ proc ultra_dsm_dialog {} {
pack .ultradsm.path.b -side left
frame .ultradsm.key
label .ultradsm.key.l -text "Type of Key: "
label .ultradsm.key.l -text "Type of Key: "
radiobutton .ultradsm.key.guess -pady 1 -anchor w -variable ultra_dsm_type -value guess \
-text "Guess"
radiobutton .ultradsm.key.arc4 -pady 1 -anchor w -variable ultra_dsm_type -value arc4 \
......@@ -11096,13 +11445,43 @@ proc ultra_dsm_dialog {} {
radiobutton .ultradsm.key.msrc4 -pady 1 -anchor w -variable ultra_dsm_type -value msrc4 \
-text "MSRC4"
.ultradsm.key.msrc4 configure -state disabled
radiobutton .ultradsm.key.msrc4_sc -pady 1 -anchor w -variable ultra_dsm_type -value msrc4_sc \
-text "UVNC SC"
pack .ultradsm.key.l -side left
pack .ultradsm.key.guess -side left
pack .ultradsm.key.arc4 -side left
pack .ultradsm.key.aesv2 -side left
pack .ultradsm.key.msrc4 -side left
pack .ultradsm.key.msrc4_sc -side left
frame .ultradsm.nou
checkbutton .ultradsm.nou.cb -text "Non-Ultra DSM" -variable ultra_dsm_noultra -command update_no_ultra_dsm
radiobutton .ultradsm.nou.bf -pady 1 -anchor w -variable ultra_dsm_type -value blowfish \
-text "Blowfish"
radiobutton .ultradsm.nou.des3 -pady 1 -anchor w -variable ultra_dsm_type -value 3des \
-text "3DES"
radiobutton .ultradsm.nou.aes -pady 1 -anchor w -variable ultra_dsm_type -value "aes-cfb" \
-text "AES-CFB"
radiobutton .ultradsm.nou.aes256 -pady 1 -anchor w -variable ultra_dsm_type -value "aes256" \
-text "AES-256"
label .ultradsm.nou.l -text " Salt,IV"
entry .ultradsm.nou.e -width 6 -textvariable ultra_dsm_salt
pack .ultradsm.nou.cb -side left
pack .ultradsm.nou.bf -side left
pack .ultradsm.nou.des3 -side left
pack .ultradsm.nou.aes -side left
pack .ultradsm.nou.aes256 -side left
pack .ultradsm.nou.l -side left
pack .ultradsm.nou.e -side left -expand 0
update_no_ultra_dsm
button .ultradsm.cancel -text "Cancel" -command {destroy .ultradsm; set ultra_dsm 0}
bind .ultradsm <Escape> {destroy .ultradsm; set ultra_dsm 0}
......@@ -11110,7 +11489,7 @@ proc ultra_dsm_dialog {} {
button .ultradsm.done -text "Done" -command {destroy .ultradsm; catch {raise .oa}}
bind .ultradsm.path.e <Return> {destroy .ultradsm; catch {raise .oa}}
pack .ultradsm.t .ultradsm.path .ultradsm.key .ultradsm.cancel .ultradsm.done -side top -fill x
pack .ultradsm.f .ultradsm.path .ultradsm.key .ultradsm.nou .ultradsm.cancel .ultradsm.done -side top -fill x
center_win .ultradsm
wm resizable .ultradsm 1 0
......@@ -11229,6 +11608,59 @@ proc multilisten_dialog {} {
wm resizable .multil 1 0
}
proc use_grab_dialog {} {
global usg_grab
toplev .usegrb
wm title .usegrb "Use XGrabServer (for fullscreen)"
global help_font
eval text .usegrb.t -width 85 -height 29 $help_font
apply_bg .usegrb.t
set msg {
On Unix, some Window managers and some Desktops make it difficult for the
SSVNC Unix VNC viewer to go into full screen mode (F9) and/or return.
Sometimes one can go into full screen mode, but then your keystrokes or
Mouse actions do not get through. This can leave you trapped because you
cannot inject input (F9 again) to get out of full screen mode. (Tip:
press Ctrl-Alt-F2 for a console login shell; then kill your vncviewer
process, e.g. pkill vncviewer; then Alt-F7 to get back to your desktop)
We have seen this in some very old Window managers (e.g. fvwm2 circa
1998) and some very new Desktops (e.g. GNOME circa 2008). We try
to work around the problem on recent desktops by using the NEW_WM
interface, but if you use Fullscreen, you may need to use this option.
The default for the SSVNC Unix VNC viewer is '-grabkbd' mode where it will
try to exclusively grab the keyboard. This often works correctly.
However if Fullscreen is not working properly, try setting this
'Use XGrabServer' option to enable '-graball' mode where it tries to grab
the entire X server. This usually works, but can be a bit flakey.
Sometimes toggling F9 a few times gets lets the vncviewer fill the whole
screen. Sometimes tapping F9 very quickly gets it to snap in. If GNOME
(or whatever desktop) is still showing its taskbars, it is recommended
you toggle F9 until it isn't. Otherwise, it is not clear who gets the input.
Best of luck.
}
.usegrb.t insert end $msg
button .usegrb.cancel -text "Cancel" -command {set use_grab 0; destroy .usegrb}
bind .usegrb <Escape> {set use_grab 0; destroy .usegrb}
wm protocol .usegrb WM_DELETE_WINDOW {set use_grab 0; destroy .usegrb}
button .usegrb.done -text "Done" -command {destroy .usegrb}
pack .usegrb.t .usegrb.cancel .usegrb.done -side top -fill x
center_win .usegrb
wm resizable .usegrb 1 0
}
proc find_netcat {} {
global is_windows
......@@ -12013,12 +12445,12 @@ proc set_ts_options {} {
checkbutton .ot.b$i -anchor w -variable change_vncviewer -text \
"Change VNC Viewer" \
-command {if {$change_vncviewer} {change_vncviewer_dialog}}
-command change_vncviewer_dialog_wrap
incr i
checkbutton .ot.b$i -anchor w -variable use_x11_macosx -text \
"X11 viewer MacOSX" \
-command {if {$use_x11_macosx} {set darwin_cotvnc 0} else {set darwin_cotvnc 1}; catch {destroy .ot}; set_ts_options}
-command {if {$use_x11_macosx} {set darwin_cotvnc 0} else {set darwin_cotvnc 1}; set_darwin_cotvnc_buttons}
if {$uname != "Darwin"} {.ot.b$i configure -state disabled}
incr i
......@@ -12091,6 +12523,8 @@ proc set_ts_adv_options {} {
checkbutton .ot2.b$i -anchor w -variable use_bgr233 -text \
"Client 8bit Color"
if {$darwin_cotvnc} {.ot2.b$i configure -state disabled}
global darwin_cotvnc_blist
set darwin_cotvnc_blist(.ot2.b$i) 1
incr i
checkbutton .ot2.b$i -anchor w -variable choose_ncache -text \
......@@ -12120,6 +12554,18 @@ proc set_ts_adv_options {} {
-command {destroy .ot2; to_ssvnc}
incr i
}
button .ot2.b$i -anchor w -text " Unix ssvncviewer ..." \
-command {set_ssvncviewer_options}
if {$is_windows} {
.ot2.b$i configure -state disabled
}
global change_vncviewer
if {$change_vncviewer} {
.ot2.b$i configure -state disabled
}
global ts_uss_button
set ts_uss_button .ot2.b$i
incr i
for {set j 1} {$j < $i} {incr j} {
pack .ot2.b$j -side top -fill x
......@@ -12140,6 +12586,25 @@ proc set_ts_adv_options {} {
focus .ot2
}
proc change_vncviewer_dialog_wrap {} {
global change_vncviewer ts_uss_button
if {$change_vncviewer} {
change_vncviewer_dialog
catch {tkwait window .chviewer}
}
if {$change_vncviewer} {
catch {.oa.ss configure -state disabled}
} else {
catch {.oa.ss configure -state normal}
}
if [info exists ts_uss_button] {
if {$change_vncviewer} {
catch {$ts_uss_button configure -state disabled}
} else {
catch {$ts_uss_button configure -state normal}
}
}
}
proc set_advanced_options {} {
global use_cups use_sound use_smbmnt
......@@ -12204,6 +12669,14 @@ proc set_advanced_options {} {
if {$is_windows} {.oa.b$i configure -state disabled}
incr i
checkbutton .oa.b$i -anchor w -variable disable_ssl_workarounds -text \
"Disable SSL Workarounds" \
-command {if {$disable_ssl_workarounds} {disable_ssl_workarounds_dialog}}
global disable_ssl_workarounds_button
set disable_ssl_workarounds_button .oa.b$i
if {$use_ssh} {.oa.b$i configure -state disabled}
incr i
checkbutton .oa.b$i -anchor w -variable ultra_dsm -text \
"UltraVNC DSM Encryption Plugin" \
-command {if {$ultra_dsm} {ultra_dsm_dialog}}
......@@ -12212,18 +12685,9 @@ proc set_advanced_options {} {
if {$is_windows} {.oa.b$i configure -state disabled}
incr i
checkbutton .oa.b$i -anchor w -variable multiple_listen -text \
"Multiple LISTEN Connections" \
-command {if {$multiple_listen} {multilisten_dialog}}
global multiple_listen_button use_listen
set multiple_listen_button .oa.b$i
if {$is_windows} {.oa.b$i configure -state disabled}
if {!$use_listen} {.oa.b$i configure -state disabled}
incr i
checkbutton .oa.b$i -anchor w -variable change_vncviewer -text \
"Change VNC Viewer" \
-command {if {$change_vncviewer} {change_vncviewer_dialog}}
-command change_vncviewer_dialog_wrap
incr i
checkbutton .oa.b$i -anchor w -variable use_port_knocking -text \
......@@ -12231,29 +12695,6 @@ proc set_advanced_options {} {
-command {if {$use_port_knocking} {port_knocking_dialog}}
incr i
checkbutton .oa.b$i -anchor w -variable use_grab -text \
"Use XGrabServer"
if {$darwin_cotvnc} {.oa.b$i configure -state disabled}
set ix $i
incr i
checkbutton .oa.b$i -anchor w -variable use_alpha -text \
"Cursor alphablending (32bpp required)"
if {$darwin_cotvnc} {.oa.b$i configure -state disabled}
set ia $i
incr i
global ycrop_string
frame .oa.b$i
label .oa.b$i.l -text "Y Crop: "
entry .oa.b$i.e -width 10 -textvariable ycrop_string
pack .oa.b$i.l -side left
pack .oa.b$i.e -side right -expand 1 -fill x
incr i
global include_list
frame .oa.b$i
label .oa.b$i.l -text "Include:"
......@@ -12272,16 +12713,27 @@ proc set_advanced_options {} {
incr i
if {$is_windows} {
.oa.b$ix configure -state disabled
.oa.b$ia configure -state disabled
}
for {set j 1} {$j < $i} {incr j} {
pack .oa.b$j -side top -fill x
}
button .oa.sa -text "Use ssh-agent" -command ssh_agent_restart
global uname
set t1 " Unix ssvncviewer ..."
if {$uname == "Darwin" } { regsub {^ *} $t1 "" t1 }
button .oa.ss -anchor w -text $t1 -command set_ssvncviewer_options
pack .oa.ss -side top -fill x
if {$is_windows} {
.oa.ss configure -state disabled
}
global change_vncviewer
if {$change_vncviewer} {
.oa.ss configure -state disabled
}
set t2 " Use ssh-agent"
if {$uname == "Darwin" } { regsub {^ *} $t2 "" t2 }
button .oa.sa -anchor w -text $t2 -command ssh_agent_restart
pack .oa.sa -side top -fill x
if {$is_windows} {
.oa.sa configure -state disabled
......@@ -12309,6 +12761,198 @@ proc set_advanced_options {} {
focus .oa
}
proc set_ssvncviewer_options {} {
global is_windows darwin_cotvnc
global use_ssh use_sshssl use_x11cursor use_rawlocal use_popupfix use_alpha use_grab use_nobell
global ssvnc_scale
if {$is_windows} {
return
}
catch {destroy .oa}
toplev .os
wm title .os "Unix ssvncviewer Options"
set darwinlist [list]
set i 1
checkbutton .os.b$i -anchor w -variable multiple_listen -text \
"Multiple LISTEN Connections" \
-command {if {$multiple_listen} {multilisten_dialog}}
global multiple_listen_button use_listen
set multiple_listen_button .os.b$i
if {$is_windows} {.os.b$i configure -state disabled}
if {!$use_listen} {.os.b$i configure -state disabled}
lappend darwinlist .os.b$i; if {$darwin_cotvnc} {.os.b$i configure -state disabled}
incr i
checkbutton .os.b$i -anchor w -variable use_x11cursor -text \
"Use X11 Cursor"
lappend darwinlist .os.b$i; if {$darwin_cotvnc} {.os.b$i configure -state disabled}
incr i
checkbutton .os.b$i -anchor w -variable use_nobell -text \
"Disable Bell"
lappend darwinlist .os.b$i; if {$darwin_cotvnc} {.os.b$i configure -state disabled}
incr i
checkbutton .os.b$i -anchor w -variable use_rawlocal -text \
"Use Raw Local"
lappend darwinlist .os.b$i; if {$darwin_cotvnc} {.os.b$i configure -state disabled}
incr i
checkbutton .os.b$i -anchor w -variable use_popupfix -text \
"Use Popup Fix"
lappend darwinlist .os.b$i; if {$darwin_cotvnc} {.os.b$i configure -state disabled}
incr i
checkbutton .os.b$i -anchor w -variable use_grab -text \
"Use XGrabServer (for fullscreen)" \
-command {if {$use_grab} {use_grab_dialog}}
lappend darwinlist .os.b$i; if {$darwin_cotvnc} {.os.b$i configure -state disabled}
incr i
checkbutton .os.b$i -anchor w -variable use_alpha -text \
"Cursor alphablending (32bpp required)"
lappend darwinlist .os.b$i; if {$darwin_cotvnc} {.os.b$i configure -state disabled}
incr i
frame .os.b$i -height 2; incr i
set relief ridge
frame .os.b$i -relief $relief -borderwidth 2
label .os.b$i.l -font fixed -anchor w -text "Examples: '0.75', '1024x768', 'fit' (fill screen), or 'auto'";
global ssvnc_scale
frame .os.b$i.f
label .os.b$i.f.l -text "Scaling: "
lappend darwinlist .os.b$i.f.l; if {$darwin_cotvnc} {.os.b$i.f.l configure -state disabled}
entry .os.b$i.f.e -width 10 -textvariable ssvnc_scale
lappend darwinlist .os.b$i.f.e; if {$darwin_cotvnc} {.os.b$i.f.e configure -state disabled}
pack .os.b$i.f.l -side left
pack .os.b$i.f.e -side right -expand 1 -fill x
pack .os.b$i.f .os.b$i.l -side top -fill x
incr i
frame .os.b$i -height 2; incr i
frame .os.b$i -relief $relief -borderwidth 2
label .os.b$i.l -font fixed -anchor w -text "Enter the max height in pixels, e.g. '900'";
global ycrop_string
frame .os.b$i.f
label .os.b$i.f.l -text "Y Crop: "
lappend darwinlist .os.b$i.f.l; if {$darwin_cotvnc} {.os.b$i.f.l configure -state disabled}
entry .os.b$i.f.e -width 10 -textvariable ycrop_string
lappend darwinlist .os.b$i.f.e; if {$darwin_cotvnc} {.os.b$i.f.e configure -state disabled}
pack .os.b$i.f.l -side left
pack .os.b$i.f.e -side right -expand 1 -fill x
pack .os.b$i.f .os.b$i.l -side top -fill x
incr i
frame .os.b$i -height 2; incr i
frame .os.b$i -relief $relief -borderwidth 2
label .os.b$i.l -font fixed -anchor w -text "Enter the scrollbar width in pixels, e.g. '4'";
global sbwid_string
frame .os.b$i.f
label .os.b$i.f.l -text "ScrollBar Width: "
lappend darwinlist .os.b$i.f.l; if {$darwin_cotvnc} {.os.b$i.f.l configure -state disabled}
entry .os.b$i.f.e -width 10 -textvariable sbwid_string
lappend darwinlist .os.b$i.f.e; if {$darwin_cotvnc} {.os.b$i.f.e configure -state disabled}
pack .os.b$i.f.l -side left
pack .os.b$i.f.e -side right -expand 1 -fill x
pack .os.b$i.f .os.b$i.l -side top -fill x
incr i
frame .os.b$i -height 2; incr i
frame .os.b$i -relief $relief -borderwidth 2
label .os.b$i.l -font fixed -anchor w -text "Enter the RFB version to pretend to be using, e.g. '3.4'";
label .os.b$i.l2 -font fixed -anchor w -text "Sometimes needed for UltraVNC: 3.4, 3.6, 3.14, 3.16";
global rfbversion
frame .os.b$i.f
label .os.b$i.f.l -text "RFB Version: "
lappend darwinlist .os.b$i.f.l; if {$darwin_cotvnc} {.os.b$i.f.l configure -state disabled}
entry .os.b$i.f.e -width 10 -textvariable rfbversion
lappend darwinlist .os.b$i.f.e; if {$darwin_cotvnc} {.os.b$i.f.e configure -state disabled}
pack .os.b$i.f.l -side left
pack .os.b$i.f.e -side right -expand 1 -fill x
pack .os.b$i.f .os.b$i.l .os.b$i.l2 -side top -fill x
incr i
frame .os.b$i -height 2; incr i
frame .os.b$i -relief $relief -borderwidth 2
label .os.b$i.l1 -font fixed -anchor w -text "List encodings in preferred order, for example";
label .os.b$i.l2 -font fixed -anchor w -text "'copyrect zrle tight' The list of encodings is:";
label .os.b$i.l3 -font fixed -anchor w -text "copyrect tight zrle zywrle hextile zlib corre rre raw";
global ssvnc_encodings
frame .os.b$i.f
label .os.b$i.f.l -text "Encodings: "
lappend darwinlist .os.b$i.f.l; if {$darwin_cotvnc} {.os.b$i.f.l configure -state disabled}
entry .os.b$i.f.e -width 10 -textvariable ssvnc_encodings
lappend darwinlist .os.b$i.f.e; if {$darwin_cotvnc} {.os.b$i.f.e configure -state disabled}
pack .os.b$i.f.l -side left
pack .os.b$i.f.e -side right -expand 1 -fill x
pack .os.b$i.f .os.b$i.l1 .os.b$i.l2 .os.b$i.l3 -side top -fill x
incr i
frame .os.b$i -height 2; incr i
for {set j 1} {$j < $i} {incr j} {
pack .os.b$j -side top -fill x
}
frame .os.b
button .os.b.done -text "Done" -command {destroy .os}
bind .os <Escape> {destroy .os}
wm protocol .os WM_DELETE_WINDOW {destroy .os}
button .os.b.help -text "Help" -command help_ssvncviewer_opts
global use_listen
if {$use_listen} {
button .os.b.connect -text "Listen" -command launch
} else {
button .os.b.connect -text "Connect" -command launch
}
pack .os.b.help .os.b.connect .os.b.done -fill x -expand 1 -side left
pack .os.b -side top -fill x
global darwin_cotvnc_blist
foreach b $darwinlist {
set darwin_cotvnc_blist($b) 1
}
center_win .os
wm resizable .os 1 0
focus .os
}
proc in_path {cmd} {
global env
set p $env(PATH)
......@@ -12431,6 +13075,7 @@ proc adv_ssh_tog {on} {
proc adv_listen_ssl_tog {on} {
global stunnel_local_protection_button is_windows
global disable_ssl_workarounds_button
if [info exists stunnel_local_protection_button] {
if {$on} {
catch {$stunnel_local_protection_button configure -state normal}
......@@ -12438,6 +13083,13 @@ proc adv_listen_ssl_tog {on} {
catch {$stunnel_local_protection_button configure -state disabled}
}
}
if [info exists disable_ssl_workarounds_button] {
if {$on} {
catch {$disable_ssl_workarounds_button configure -state normal}
} else {
catch {$disable_ssl_workarounds_button configure -state disabled}
}
}
if {$is_windows} {
catch {$stunnel_local_protection_button configure -state disabled}
}
......@@ -12558,10 +13210,12 @@ proc listen_adjust {} {
catch {.b.conn configure -text "Listen"}
catch {.o.b.connect configure -text "Listen"}
catch {$multiple_listen_button configure -state normal}
catch {mesg "Listen :N -> Port 5500+N, i.e. :0 -> 5500, :1 -> 5501, :2 -> 5502 ..."}
} else {
catch {.b.conn configure -text "Connect"}
catch {.o.b.connect configure -text "Connect"}
catch {$multiple_listen_button configure -state disabled}
catch {mesg "Switched to Forward Connection mode."}
}
if {$is_windows} {
catch {$multiple_listen_button configure -state disabled}
......@@ -12618,6 +13272,20 @@ proc x11vnc_find_adjust {which} {
regsub -all {[ ][ ]*} $remote_ssh_cmd " " remote_ssh_cmd
}
proc set_darwin_cotvnc_buttons {} {
global darwin_cotvnc uname darwin_cotvnc_blist
if {$uname == "Darwin" && [info exists darwin_cotvnc_blist]} {
foreach b [array names darwin_cotvnc_blist] {
if {$darwin_cotvnc} {
catch {$b configure -state disabled}
} else {
catch {$b configure -state normal}
}
}
}
}
proc set_options {} {
global use_alpha use_grab use_ssh use_sshssl use_viewonly use_fullscreen use_bgr233
global use_nojpeg use_raise_on_beep use_compresslevel use_quality use_x11_macosx
......@@ -12627,6 +13295,7 @@ proc set_options {} {
global use_x11vnc_find x11vnc_find_widget
global use_x11vnc_xlogin x11vnc_xlogin_widget uvnc_bug_widget
global ts_only
global darwin_cotvnc_blist
if {$ts_only} {
set_ts_options
return
......@@ -12666,19 +13335,14 @@ proc set_options {} {
"Unix Username & Password" -command {unixpw_adjust}
if {$is_windows} {.o.b$i configure -state disabled}
if {$darwin_cotvnc} {.o.b$i configure -state disabled}
set darwin_cotvnc_blist(.o.b$i) 1
incr i
checkbutton .o.b$i -anchor w -variable use_listen -text \
"Reverse VNC Connection (-LISTEN)" -command {listen_adjust; if {$vncdisplay == ""} {set vncdisplay ":0"}; if {$use_listen} {destroy .o}}
"Reverse VNC Connection (-LISTEN)" -command {listen_adjust; if {$vncdisplay == ""} {set vncdisplay ":0"} else {set vncdisplay ""}; if {$use_listen} {destroy .o}}
#if {$is_windows} {.o.b$i configure -state disabled}
if {$darwin_cotvnc} {.o.b$i configure -state disabled}
incr i
checkbutton .o.b$i -anchor w -variable use_uvnc_ssl_bug -text \
"UltraVNC Single Click III Bug"
if {$is_windows} {.o.b$i configure -state disabled}
if {$use_ssh && !$use_sshssl} {.o.b$i configure -state disabled}
set uvnc_bug_widget ".o.b$i"
#if {$darwin_cotvnc} {.o.b$i configure -state disabled}
#set darwin_cotvnc_blist(.o.b$i) 1
incr i
checkbutton .o.b$i -anchor w -variable use_viewonly -text \
......@@ -12692,27 +13356,31 @@ proc set_options {} {
checkbutton .o.b$i -anchor w -variable use_raise_on_beep -text \
"Raise On Beep"
if {$darwin_cotvnc} {.o.b$i configure -state disabled}
set darwin_cotvnc_blist(.o.b$i) 1
incr i
checkbutton .o.b$i -anchor w -variable use_bgr233 -text \
"Use 8bit color (-bgr233)"
if {$darwin_cotvnc} {.o.b$i configure -state disabled}
set darwin_cotvnc_blist(.o.b$i) 1
incr i
checkbutton .o.b$i -anchor w -variable use_nojpeg -text \
"Do not use JPEG (-nojpeg)"
if {$darwin_cotvnc} {.o.b$i configure -state disabled}
set darwin_cotvnc_blist(.o.b$i) 1
incr i
checkbutton .o.b$i -anchor w -variable use_x11_macosx -text \
"Use X11 vncviewer on MacOSX" \
-command {if {$use_x11_macosx} {set darwin_cotvnc 0} else {set darwin_cotvnc 1}; catch {destroy .o}; set_options}
-command {if {$use_x11_macosx} {set darwin_cotvnc 0} else {set darwin_cotvnc 1}; set_darwin_cotvnc_buttons}
if {$uname != "Darwin"} {.o.b$i configure -state disabled}
incr i
menubutton .o.b$i -anchor w -menu .o.b$i.m -textvariable compresslevel_text -relief groove
set compresslevel_text "Compress Level: $use_compresslevel"
if {$darwin_cotvnc} {.o.b$i configure -state disabled}
set darwin_cotvnc_blist(.o.b$i) 1
menu .o.b$i.m -tearoff 0
for {set j -1} {$j < 10} {incr j} {
......@@ -12731,6 +13399,7 @@ proc set_options {} {
menubutton .o.b$i -anchor w -menu .o.b$i.m -textvariable quality_text -relief groove
set quality_text "Quality: $use_quality"
if {$darwin_cotvnc} {.o.b$i configure -state disabled}
set darwin_cotvnc_blist(.o.b$i) 1
menu .o.b$i.m -tearoff 0
for {set j -1} {$j < 10} {incr j} {
......@@ -12808,6 +13477,7 @@ proc set_options {} {
regsub {^ *} $t2 "" t2
regsub {^ *} $t3 "" t3
}
button .o.advanced -anchor w -text $t1 -command set_advanced_options
button .o.clear -anchor w -text $t2 -command set_defaults
button .o.delete -anchor w -text $t3 -command {destroy .o; delete_profile}
......@@ -12890,7 +13560,12 @@ proc print_help {} {
help_advanced_opts
set str [.ah.f.t get 1.0 end]
puts "${b}Advanced Options Help:\n$str"
destroy .oh
destroy .ah
help_ssvncviewer_opts
set str [.av.f.t get 1.0 end]
puts "${b}ssvncviewer Options Help:\n$str"
destroy .av
help_certs
set str [.ch.f.t get 1.0 end]
......@@ -13144,6 +13819,7 @@ if {! $is_windows} {
catch {set uname [exec uname]}
}
set darwin_cotvnc 0
if {$uname == "Darwin"} {
if {! [info exists env(DISPLAY)]} {
......@@ -13163,6 +13839,9 @@ if {$uname == "Darwin"} {
catch {option add *Button.font {System 10} widgetDefault}
}
##for testing macosx
##set uname Darwin; set darwin_cotvnc 1
set putty_pw ""
global scroll_text_focus
......@@ -13357,6 +14036,8 @@ bind . <Shift-B2-ButtonRelease> {toggle_tsonly}
bind .l <Shift-ButtonRelease> {toggle_tsonly}
bind . <Control-h> {toggle_sshonly}
bind . <Control-T> {to_ssvnc}
bind . <Control-a> {set_advanced_options}
bind . <Control-u> {set_ssvncviewer_options}
global entered_gui_top button_gui_top
set entered_gui_top 0
......
......@@ -134,14 +134,16 @@ libs="$tmp/libs"
mkdir -p $libs || exit 1
for liba in libz.a libjpeg.a libssl.a libcrypto.a
do
if [ "X$SSVNC_BUILD_NO_STATIC" != "X" ]; then
if [ "X$SSVNC_BUILD_STATIC" = "X" ]; then
break
fi
for dir in /usr/lib /lib /usr/local/lib /usr/pkg/lib /usr/sfw/lib /usr/openwin/lib
do
if [ "$name" = "Linux.x86_64" -o "$name" = "Linux.ppc64" ] ; then
dir64=`echo "$dir" | sed -e 's,lib,lib64,'`
if [ -d $dir64 ]; then
if [ "X$SSVNC_BUILD_NO_LINUX64" != "X" ]; then
:
elif [ -d $dir64 ]; then
dir=$dir64
fi
fi
......@@ -151,7 +153,7 @@ do
fi
done
done
if [ "X$SSVNC_BUILD_NO_STATIC" = "X" ]; then
if [ "X$SSVNC_BUILD_STATIC" != "X" ]; then
echo "Found these static archive libraries, will try to use them..."
ls -ld $libs
ls -l $libs
......@@ -180,7 +182,7 @@ END
fi
fi
if [ -d /var/tmp/LIBS -a "X$SSVNC_BUILD_NO_STATIC" = "X" ]; then
if [ -d /var/tmp/LIBS -a "X$SSVNC_BUILD_STATIC" != "X" ]; then
LDFLAGS_OS="$LDFLAGS_OS -L/var/tmp/LIBS"
fi
......@@ -435,6 +437,15 @@ if [ "X$SSVNC_BUILD_SKIP_VNCSTOREPW" = "X" ]; then
cd "$start"
cp -p $tmp/vncstorepw/vncstorepw $tmp/vncstorepw/lim_accept.so $dest
echo ""
cd $tmp/vncstorepw
make clean
env LD_SSL="-L$start/$libs $LDFLAGS_OS" CPP_SSL="$CPPFLAGS_OS" make ultravnc_dsm_helper
cd "$start"
cp -p $tmp/vncstorepw/ultravnc_dsm_helper $dest
echo ""
fi
......
......@@ -11,7 +11,7 @@
.\" License as specified in the file LICENCE.TXT that comes with the
.\" TightVNC distribution.
.\"
.TH ssvncviewer 1 "August 2008" "" "SSVNC"
.TH ssvncviewer 1 "October 2008" "" "SSVNC"
.SH NAME
ssvncviewer \- an X viewer client for VNC
.SH SYNOPSIS
......@@ -246,6 +246,16 @@ Use alphablending transparency for local cursors
requires: x11vnc server, both client and server
must be 32bpp and same endianness.
.TP
\fB\-scale\fR \fIstr\fR
Scale the desktop locally. The string "str" can
a floating point ratio, e.g. "0.9", or a fraction,
e.g. "3/4", or WxH, e.g. 1280x1024. Use "fit"
to fit in the current screen size.
Use "auto" to fit in the window size.
Note that scaling is done in software and can be slow
and requires more memory. "str" can also be set by
the env. var. SSVNC_SCALE.
.TP
\fB\-ycrop\fR n
Only show the top n rows of the framebuffer. For
use with x11vnc \fB\-ncache\fR client caching option
......@@ -356,6 +366,11 @@ THAT supply -ultradsm to tell THIS viewer to modify the RFB
data sent so as to work with the UltraVNC Server. For some
reason, each RFB msg type must be sent twice under DSM.
.TP
\fB\-chatonly\fR
Try to be a client that only does UltraVNC text chat. This
mode is used by x11vnc to present a chat window on the physical
X11 console (i.e. to chat with the person at the display).
.TP
\fB-env\fR \fIVAR=VALUE\fR
To save writing a shell script to set environment
variables, specify as many as you need on the command line. For example,
......@@ -386,8 +401,10 @@ XENVIRONMENT or XAPPLRESDIR.
256 colors ~ -bgr233 default # of colors.
64 colors ~ -bgr222 / -use64
8 colors ~ -bgr111 / -use8
Scale Viewer ~ -scale
Set Y Crop (y-max) ~ -ycrop
Set Scrollbar Width ~ -sbwidth
XGrabServer ~ -graball
UltraVNC Extensions:
......
#!/bin/sh
rm -rf ./src/tmp/* || exit 1
vers=1.0.20
vers=1.0.21
cd .. || exit 1
......
This source diff could not be displayed because it is too large. You can view the blob instead.
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment