summaryrefslogtreecommitdiffstats
path: root/x11vnc
diff options
context:
space:
mode:
Diffstat (limited to 'x11vnc')
-rw-r--r--x11vnc/ChangeLog6
-rw-r--r--x11vnc/README662
-rw-r--r--x11vnc/appshare.c8
-rwxr-xr-xx11vnc/misc/Xdummy3
-rwxr-xr-xx11vnc/misc/enhanced_tightvnc_viewer/bin/ssvnc16
-rwxr-xr-xx11vnc/misc/enhanced_tightvnc_viewer/bin/ssvnc_cmd22
-rwxr-xr-xx11vnc/misc/enhanced_tightvnc_viewer/bin/util/ssvnc.tcl237
-rw-r--r--x11vnc/misc/enhanced_tightvnc_viewer/man/man1/ssvnc.127
-rw-r--r--x11vnc/misc/enhanced_tightvnc_viewer/man/man1/ssvncviewer.126
-rw-r--r--x11vnc/misc/enhanced_tightvnc_viewer/src/patches/tight-vncviewer-full.patch978
-rw-r--r--x11vnc/remote.c4
-rw-r--r--x11vnc/solid.c3
-rwxr-xr-xx11vnc/tkx11vnc36
-rw-r--r--x11vnc/tkx11vnc.h36
-rw-r--r--x11vnc/unixpw.c46
-rw-r--r--x11vnc/x11vnc.12
-rw-r--r--x11vnc/x11vnc.c2
-rw-r--r--x11vnc/x11vnc_defs.c2
18 files changed, 1417 insertions, 699 deletions
diff --git a/x11vnc/ChangeLog b/x11vnc/ChangeLog
index e6188e5..e1cfed1 100644
--- a/x11vnc/ChangeLog
+++ b/x11vnc/ChangeLog
@@ -1,3 +1,9 @@
+2009-12-28 Karl Runge <runge@karlrunge.com>
+ * x11vnc: Fix problems in --without-x builds. Fix crash
+ with -QD query for dbus info. Adjust window size for
+ small screens in -gui. Improve F1 help for xdm, etc.
+ include ssvnc 1.0.25 source.
+
2009-12-24 Karl Runge <runge@karlrunge.com>
* x11vnc: prepare_x11vnc_dist.sh for 0.9.10. -xdummy_xvfb,
-svc_xdummy_xvfb and -create_x shorthand. lxde session.
diff --git a/x11vnc/README b/x11vnc/README
index 42a6f54..359f034 100644
--- a/x11vnc/README
+++ b/x11vnc/README
@@ -2,7 +2,7 @@
Copyright (C) 2002-2009 Karl J. Runge <runge@karlrunge.com>
All rights reserved.
-x11vnc README file Date: Thu Dec 24 16:08:39 EST 2009
+x11vnc README file Date: Mon Dec 28 00:07:34 EST 2009
The following information is taken from these URLs:
@@ -910,12 +910,15 @@ make
Here are some features that will appear in the 0.9.10 release:
- * Coming Soon.
+ * The [122]Xdummy wrapper script for Xorg's dummy driver is updated
+ and no longer requires being run as root. New service options are
+ provided to select Xdummy over Xvfb as the virtual X server to be
+ created.
Here are some features that appeared in the 0.9.9 release:
- * The [122]-unixpw_system_greeter option, when used in combined
- unixpw and XDMCP FINDCREATEDISPLAY mode (e.g. [123]-xdmsvc),
+ * The [123]-unixpw_system_greeter option, when used in combined
+ unixpw and XDMCP FINDCREATEDISPLAY mode (e.g. [124]-xdmsvc),
enables the user to press Escape to jump directly to the
XDM/GDM/KDM login greeter screen. This way the user avoids
entering his unix password twice at X session creation time. Also,
@@ -926,10 +929,10 @@ make
clients like Eggplant and JollysFastVNC continuously spray these
requests at VNC servers (regardless of whether they have received
any updates or not.) Under some circumstances this could lead to
- x11vnc falling behind. The [124]-extra_fbur option allows one to
+ x11vnc falling behind. The [125]-extra_fbur option allows one to
fine tune the setting. Additionally, one may also dial down
- delays: e.g. "[125]-defer 5" and "[126]-wait 5" (or to 1 or even
- 0) or [127]-nonap or [128]-allinput to keep up with these VNC
+ delays: e.g. "[126]-defer 5" and "[127]-wait 5" (or to 1 or even
+ 0) or [128]-nonap or [129]-allinput to keep up with these VNC
clients at the expense of increased system load.
* Heuristics are applied to try to determine if the X display is
currently in a Display Manager Greeter Login panel (e.g. GDM) If
@@ -941,9 +944,9 @@ make
the use of the XFIXES cursor fetching functionality; this avoids
an Xorg bug that causes Xorg to crash right after the user logs
in.
- * A new option [129]-findauth runs the FINDDISPLAY script that
+ * A new option [130]-findauth runs the FINDDISPLAY script that
applies heuristics that try to determine the XAUTHORITY file. The
- use of '[130]-auth guess' will use the XAUTHORITY that -findauth
+ use of '[131]-auth guess' will use the XAUTHORITY that -findauth
reveals. This can be handy in with the lastest GDM where the
ability to store cookies in ~/.Xauthority has been removed. If
x11vnc is running as root (e.g. inetd) and you add -env FD_XDM=1
@@ -951,28 +954,28 @@ make
the correct XAUTHORITY for the given display (this works for
XDM/GDM/KDM if the login greeter panel is up or if someone has
already logged into an X session.)
- * The FINDDISPLAY and FINDCREATEDISPLAY modes (i.e. "[131]-display
- WAIT:cmd=...", [132]-find, [133]-create) now work correctly for
- the user-supplied login program scheme "[134]-unixpw_cmd ...", as
+ * The FINDDISPLAY and FINDCREATEDISPLAY modes (i.e. "[132]-display
+ WAIT:cmd=...", [133]-find, [134]-create) now work correctly for
+ the user-supplied login program scheme "[135]-unixpw_cmd ...", as
long as the login program supports running commands specified in
the environment variable "RFB_UNIXPW_CMD_RUN" as the logged-in
- user. The mode "[135]-unixpw_nis ..." has also been made more
+ user. The mode "[136]-unixpw_nis ..." has also been made more
consistent.
- * The [136]-stunnel option (like [137]-ssl but uses stunnel as an
- external helper program) now works with the [138]-ssl "SAVE" and
- "TMP" special certificate names. The [139]-sslverify and
- [140]-sslCRL options now work correctly in [141]-stunnel mode.
+ * The [137]-stunnel option (like [138]-ssl but uses stunnel as an
+ external helper program) now works with the [139]-ssl "SAVE" and
+ "TMP" special certificate names. The [140]-sslverify and
+ [141]-sslCRL options now work correctly in [142]-stunnel mode.
Single port HTTPS connections are also supported for this mode.
* There is an experimental Application Sharing mode that improves
- upon the -id/-sid single window sharing: [142]-appshare (run
+ upon the -id/-sid single window sharing: [143]-appshare (run
"x11vnc -appshare -help" for more info.) It is still very
primitive and approximate, but at least it displays multiple
top-level windows.
- * The remote control command [143]-R can be used to instruct x11vnc
+ * The remote control command [144]-R can be used to instruct x11vnc
to resend its most recent copy of the Clipboard, Primary, or
Cutbuffer selections: "x11vnc -R resend_clipboard", "x11vnc -R
resend_primary", and "x11vnc -R resend_cutbuffer".
- * The fonts in the GUI ([144]-gui) can now by set via environment
+ * The fonts in the GUI ([145]-gui) can now by set via environment
variables, e.g. -env X11VNC_FONT_BOLD='Helvetica -16 bold' and
-env X11VNC_FONT_FIXED='Courier -14'.
* The XDAMAGE mechanism is now automatically disabled for a period
@@ -982,18 +985,18 @@ make
* There is an experimental workaround: "-env X11VNC_WATCH_DX_DY=1"
that tries to avoid problems with poorly constructed menu themes
that place the initial position of the mouse cursor inside a menu
- item's active zone. More information [145]can be found here.
+ item's active zone. More information [146]can be found here.
Here are some features that appeared in the 0.9.8 release:
- * Stability improvements to [146]-threads mode. Running x11vnc this
+ * Stability improvements to [147]-threads mode. Running x11vnc this
way is more reliable now. Threaded operation sometimes gives
better interactive response and faster updates: try it out. The
threaded mode now supports multiple VNC viewers using the same VNC
encoding. The threaded mode can also yield a performance
enhancement in the many client case (e.g. class-room broadcast.)
We have tested with 30 to 50 simultaneous clients. See also
- [147]-reflect.
+ [148]-reflect.
For simultaneous clients: the ZRLE encoding is thread safe on all
platforms, and the Tight and Zlib encodings are currently only
thread safe on Linux where thread local storage, __thread, is
@@ -1002,12 +1005,12 @@ make
connected client, all encodings are safe on all platforms. Note
that some features (e.g. scroll detection and -ncache) may be
disabled or run with reduced functionality in -threads mode.
- * Automatically tries to work around an [148]Xorg server bug
+ * Automatically tries to work around an [149]Xorg server bug
involving infinitely repeating keys when turning off key
- repeating. Use [149]-repeat if the automatic workaround fails.
+ repeating. Use [150]-repeat if the automatic workaround fails.
* Improved reliability of the Single Port SSL VNC and HTTPS java
viewer applet delivery mechanism.
- * The [150]-clip mode works under [151]-rawfb.
+ * The [151]-clip mode works under [152]-rawfb.
Here are some features that appeared in the 0.9.7 release:
@@ -1017,38 +1020,38 @@ make
case the special file /dev/vcsa2 is used to retrieve vt2's current
text. Text and colors are shown, but no graphics.
* Support for less than 8 bits per pixel framebuffers (e.g. 4 or 1
- bpp) in the [152]-rawfb mode.
+ bpp) in the [153]-rawfb mode.
* The SSL enabled UltraVNC Java viewer applet now has a [Home] entry
in the "drives" drop down menu. This menu can be configured with
the ftpDropDown applet parameter. All of the applet parameters are
documented in classes/ssl/README.
- * Experimental support for [153]VirtualGL's [154]TurboVNC (an
+ * Experimental support for [154]VirtualGL's [155]TurboVNC (an
enhanced TightVNC for fast LAN high framerate usage.)
* The CUPS Terminal Services helper mode has been improved.
- * Improvements to the [155]-ncache_cr that allows smooth opaque
+ * Improvements to the [156]-ncache_cr that allows smooth opaque
window motions using the 'copyrect' encoding when using
- [156]-ncache mode.
- * The [157]-rmflag option enables a way to indicate to other
+ [157]-ncache mode.
+ * The [158]-rmflag option enables a way to indicate to other
processes x11vnc has exited.
* Reverse connections using anonymous Diffie Hellman SSL encryption
now work.
Here are some features that appeared in the 0.9.6 release:
- * Support for [158]VeNCrypt SSL/TLS encrypted connections. It is
- enabled by default in the [159]-ssl mode. VNC Viewers like
- vinagre, gvncviewer/gtk-vnc, the vencrypt package, [160]SSVNC, and
+ * Support for [159]VeNCrypt SSL/TLS encrypted connections. It is
+ enabled by default in the [160]-ssl mode. VNC Viewers like
+ vinagre, gvncviewer/gtk-vnc, the vencrypt package, [161]SSVNC, and
others support this encryption mode. It can also be used with the
- [161]-unixpw option to enable Unix username and password
+ [162]-unixpw option to enable Unix username and password
authentication (VeNCrypt's "*Plain" modes.) A similar but older
VNC security type "ANONTLS" (used by vino) is supported as well.
- See the [162]-vencrypt and [163]-anontls options for additional
+ See the [163]-vencrypt and [164]-anontls options for additional
control. The difference between x11vnc's normal -ssl mode and
VeNCrypt is that the former wraps the entire VNC connection in SSL
(like HTTPS does for HTTP, i.e. "vncs://") while VeNCrypt switches
on the SSL/TLS at a certain point during the VNC handshake. Use
- [164]-sslonly to disable both VeNCrypt and ANONTLS (vino.)
- * The "[165]-ssl ANON" option enables Anonymous Diffie-Hellman (ADH)
+ [165]-sslonly to disable both VeNCrypt and ANONTLS (vino.)
+ * The "[166]-ssl ANON" option enables Anonymous Diffie-Hellman (ADH)
key exchange for x11vnc's normal SSL/TLS operation. Note that
Anonymous Diffie-Hellman uses encryption for privacy, but provides
no authentication and so is susceptible to Man-In-The-Middle
@@ -1056,17 +1059,17 @@ make
SAVE", etc. and have the VNC viewer verify the cert.) The ANONTLS
mode (vino) only supports ADH. VeNCrypt mode supports both ADH and
regular X509 SSL certificates modes. For these ADH is enabled by
- default. See [166]-vencrypt and [167]-anontls for how to disable
+ default. See [167]-vencrypt and [168]-anontls for how to disable
ADH.
* For x11vnc's SSL/TLS modes, one can now specify a Certificate
- Revocation List (CRL) with the [168]-sslCRL option. This will only
+ Revocation List (CRL) with the [169]-sslCRL option. This will only
be useful for wide deployments: say a company-wide x11vnc SSL
access deployment using a central Certificate Authority (CA) via
- [169]-sslGenCA and [170]-sslGenCert. This way if a user has his
+ [170]-sslGenCA and [171]-sslGenCert. This way if a user has his
laptop lost or stolen, you only have to revoke his key instead of
creating a new Certificate Authority and redeploying new keys to
all users.
- * The default SSL/TLS mode, "[171]-ssl" (no pem file parameter
+ * The default SSL/TLS mode, "[172]-ssl" (no pem file parameter
supplied), is now the same as "-ssl SAVE" and will save the
generated self-signed cert in "~/.vnc/certs/server.pem".
Previously "-ssl" would create a temporary self-signed cert that
@@ -1076,45 +1079,45 @@ make
same x11vnc server. Use "-ssl TMP" to regain the previous
behavior. Use "-ssl SAVE_NOPROMPT" to avoid being prompted about
using passphrase when the certificate is created.
- * The option [172]-http_oneport enables single-port HTTP connections
+ * The option [173]-http_oneport enables single-port HTTP connections
via the Java VNC Viewer. So, for example, the web browser URL
"http://myhost.org:5900" works the same as
"http://myhost.org:5800", but with the convenience of only
involving one port instead of two. This works for both unencrypted
- connections and for SSH tunnels (see [173]-httpsredir if the
+ connections and for SSH tunnels (see [174]-httpsredir if the
tunnel port differs.) Note that HTTPS single-port operation in
- [174]-ssl SSL encrypted mode has been available since x11vnc
+ [175]-ssl SSL encrypted mode has been available since x11vnc
version 0.8.3.
- * For the [175]-avahi/[176]-zeroconf Service Advertizing mode, if
+ * For the [176]-avahi/[177]-zeroconf Service Advertizing mode, if
x11vnc was not compiled with the avahi-client library, then an
external helper program, either avahi-publish(1) (on Unix) or
dns-sd(1) (on Mac OS X), is used instead.
- * The "[177]-rfbport PROMPT" option will prompt the user via the GUI
+ * The "[178]-rfbport PROMPT" option will prompt the user via the GUI
to select the VNC port (e.g. 5901) to listen on, and a few other
basic settings. This enables a handy GUI mode for naive users:
x11vnc -gui tray=setpass -rfbport PROMPT -logfile $HOME/.x11vnc.log.%VNCDISP
LAY
suitable for putting in a launcher or menu, e.g.
- [178]x11vnc.desktop. The [179]-logfile expansion is new too. In
+ [179]x11vnc.desktop. The [180]-logfile expansion is new too. In
the GUI, the tray=setpass Properties panel has been improved.
- * The [180]-solid solid background color option now works for the
+ * The [181]-solid solid background color option now works for the
Mac OS X console.
- * The [181]-reopen option instructs x11vnc to try to reopen the X
+ * The [182]-reopen option instructs x11vnc to try to reopen the X
display if it is prematurely closed by, say, the display manager
- (e.g. [182]GDM.)
+ (e.g. [183]GDM.)
Here are some features that appeared in the 0.9.5 release:
- * Symmetric key [183]encryption ciphers. ARC4, AES-128, AES-256,
+ * Symmetric key [184]encryption ciphers. ARC4, AES-128, AES-256,
blowfish, and 3des are supported. Salt and initialization vector
seeding is provided. These compliment the more widely used SSL and
- SSH encryption access methods. [184]SSVNC also supports these
+ SSH encryption access methods. [185]SSVNC also supports these
encryption modes.
* Scaling differently along the X- and Y-directions. E.g.
- "[185]-scale 1280x1024" or "-scale 0.8x0.75" Also,
- "[186]-geometry WxH" is an alias for "-scale WxH"
+ "[186]-scale 1280x1024" or "-scale 0.8x0.75" Also,
+ "[187]-geometry WxH" is an alias for "-scale WxH"
* By having SSVNC version 1.0.21 or later available in your $PATH,
- the [187]-chatwindow option allows a UltraVNC Text Chat window to
+ the [188]-chatwindow option allows a UltraVNC Text Chat window to
appear on the local X11 console/display (this way the remote
viewer can chat with the person at the physical display; e.g.
helpdesk mode.) This also works on the Mac OS X console if the
@@ -1126,47 +1129,47 @@ LAY
Here are some features that appeared in the 0.9.4 release:
- * Improvements to the [188]-find and [189]-create X session finding
+ * Improvements to the [189]-find and [190]-create X session finding
or creating modes: new desktop types and service redirection
options. Personal cupsd daemon and SSH port redirection helper for
- use with [190]SSVNC's Terminal Services feature.
- * Reverse VNC connections via [191]-connect work in the [192]-find,
- [193]-create and related [194]-display WAIT:... modes.
+ use with [191]SSVNC's Terminal Services feature.
+ * Reverse VNC connections via [192]-connect work in the [193]-find,
+ [194]-create and related [195]-display WAIT:... modes.
* Reverse VNC connections (either normal or SSL) can use a Web Proxy
or a SOCKS proxy, or a SSH connection, or even a CGI URL to make
- the outgoing connection. See: [195]-proxy. Forward connections can
- also use: [196]-ssh.
- * Reverse VNC connections via the [197]UltraVNC repeater proxy
+ the outgoing connection. See: [196]-proxy. Forward connections can
+ also use: [197]-ssh.
+ * Reverse VNC connections via the [198]UltraVNC repeater proxy
(either normal or SSL) are supported. Use either the
- "[198]-connect repeater=ID:NNNN+host:port" or "[199]-connect
- repeater://host:port+ID:NNNN" notation. The [200]SSVNC VNC viewer
+ "[199]-connect repeater=ID:NNNN+host:port" or "[200]-connect
+ repeater://host:port+ID:NNNN" notation. The [201]SSVNC VNC viewer
also supports the UltraVNC repeater. Also, a perl repeater
- implemention is here: [201]ultravnc_repeater.pl
+ implemention is here: [202]ultravnc_repeater.pl
* Support for indexed colormaps (PseudoColor) with depths other than
8 (from 1 to 16 now work) for non-standard hardware. Option
- "[202]-advertise_truecolor" to handle some workaround in this
+ "[203]-advertise_truecolor" to handle some workaround in this
mode.
* Support for the ZYWRLE encoding, this is the RealVNC ZRLE encoding
extended to do motion video and photo regions more efficiently by
way of a Wavelet based transformation.
- * The [203]-finddpy and [204]-listdpy utilities help to debug and
- configure the [205]-find, [206]-create, and [207]-display WAIT:...
+ * The [204]-finddpy and [205]-listdpy utilities help to debug and
+ configure the [206]-find, [207]-create, and [208]-display WAIT:...
modes.
* Some automatic detection of screen resizes are handled even if the
- [208]-xrandr option is not supplied.
- * The [209]-autoport options gives more control over the VNC port
+ [209]-xrandr option is not supplied.
+ * The [210]-autoport options gives more control over the VNC port
x11vnc chooses.
- * The [210]-ping secs can be used to help keep idle connections
+ * The [211]-ping secs can be used to help keep idle connections
alive.
* Pasting of the selection/clipboard into remote applications (e.g.
Java) has been improved.
* Fixed a bug if a client disconnects during the 'speed-estimation'
phase.
* To unset Caps_Lock, Num_Lock and raise all keys in the X server
- use [211]-clear_all.
+ use [212]-clear_all.
* Usage with dvorak keyboards has been improved. See also:
- [212]-xkb.
- * The [213]Java Viewer applet source code is now included in the
+ [213]-xkb.
+ * The [214]Java Viewer applet source code is now included in the
x11vnc-0.9.*.tar.gz tarball. This means you can now build the Java
viewer applet jar files from source. If you stopped shipping the
Java viewer applet jar files due to lack of source code, you can
@@ -1174,7 +1177,7 @@ LAY
Here are some features that appeared in the 0.9.3 release:
- * [214]Viewer-side pixmap caching. A large area of pixels (at least
+ * [215]Viewer-side pixmap caching. A large area of pixels (at least
2-3 times as big as the framebuffer itself; the bigger the
better... default is 10X) is placed below the framebuffer to act
as a buffer/cache area for pixel data. The VNC CopyRect encoding
@@ -1182,7 +1185,7 @@ LAY
Until we start modifying viewers you will be able to see the cache
area if you scroll down (this makes it easier to debug!) For
testing the default is "-ncache 10". The unix Enhanced TightVNC
- Viewer [215]ssvnc has a nice [216]-ycrop option to help hide the
+ Viewer [216]ssvnc has a nice [217]-ycrop option to help hide the
pixel cache area from view.
@@ -1195,14 +1198,14 @@ LAY
* If UltraVNC file transfer or chat is detected, then VNC clients
are "pinged" more often to prevent these side channels from
becoming serviced too infrequently.
- * In [217]-unixpw mode in the username and password dialog no text
+ * In [218]-unixpw mode in the username and password dialog no text
will be echoed if the first character sent is "Escape". This
enables a convenience feature in SSVNC to send the username and
password automatically.
Here are some features that appeared in the 0.9.1 release:
- * The [218]UltraVNC Java viewer has been enhanced to support SSL (as
+ * The [219]UltraVNC Java viewer has been enhanced to support SSL (as
the TightVNC viewer had been previously.) The UltraVNC Java
supports ultravnc filetransfer, and so can be used as a VNC viewer
on Unix that supports ultravnc filetransfer. It is in the
@@ -1213,12 +1216,12 @@ LAY
Some other bugs in the UltraVNC Java viewer were fixed and a few
improvements to the UI made.
* A new Unix username login mode for VNC Viewers authenticated via a
- Client SSL Certificate: "[219]-users sslpeer=". The emailAddress
+ Client SSL Certificate: "[220]-users sslpeer=". The emailAddress
subject field is inspected for username@hostname and then acts as
though "-users +username" has been supplied. This way the Unix
username is identified by (i.e. simply extracted from) the Client
- SSL Certificate. This could be useful with [220]-find,
- [221]-create and [222]-svc modes if you are also have set up and
+ SSL Certificate. This could be useful with [221]-find,
+ [222]-create and [223]-svc modes if you are also have set up and
use VNC Client SSL Certificate authentication.
* For external display finding/creating programs (e.g. WAIT:cmd=...)
if the VNC Viewer is authenticated via a Client SSL Certificate,
@@ -1227,41 +1230,41 @@ LAY
Here are some features that appeared in the 0.9 release:
- * [223]VNC Service advertising via mDNS / ZeroConf / BonJour with
- the [224]Avahi client library. Enable via "[225]-avahi" or
- "[226]-zeroconf".
+ * [224]VNC Service advertising via mDNS / ZeroConf / BonJour with
+ the [225]Avahi client library. Enable via "[226]-avahi" or
+ "[227]-zeroconf".
* Implementations of UltraVNC's TextChat, SingleWindow, and
- ServerInput extensions (requires ultravnc viewer or [227]ssvnc
+ ServerInput extensions (requires ultravnc viewer or [228]ssvnc
Unix viewer.) They toggle the selection of a single window
- ([228]-id), and disable (friendly) user input and viewing (monitor
+ ([229]-id), and disable (friendly) user input and viewing (monitor
blank) at the VNC server.
- * Short aliases "[229]-find", "[230]-create", "[231]-svc", and
- "[232]-xdmsvc" for commonly used FINDCREATEDISPLAY usage modes.
+ * Short aliases "[230]-find", "[231]-create", "[232]-svc", and
+ "[233]-xdmsvc" for commonly used FINDCREATEDISPLAY usage modes.
* Reverse VNC connections (viewer listening) now work in SSL
- ([233]-ssl) mode.
+ ([234]-ssl) mode.
* New options to control the Monitor power state and keyboard/mouse
- grabbing: [234]-forcedpms, [235]-clientdpms, [236]-noserverdpms,
- and [237]-grabalways.
+ grabbing: [235]-forcedpms, [236]-clientdpms, [237]-noserverdpms,
+ and [238]-grabalways.
* A simple way to emulate inetd(8) to some degree via the
- "[238]-loopbg" option.
- * Monitor the accuracy of XDAMAGE and apply "[239]-noxdamage" if it
- is not working well. OpenGL applications like like [240]beryl and
+ "[239]-loopbg" option.
+ * Monitor the accuracy of XDAMAGE and apply "[240]-noxdamage" if it
+ is not working well. OpenGL applications like like [241]beryl and
MythTv have been shown to make XDAMAGE not work properly.
* For Java SSL connections involving a router/firewall port
- redirection, an option [241]-httpsredir to spare the user from
+ redirection, an option [242]-httpsredir to spare the user from
needing to include &PORT=NNN in the browser URL.
Here are some features that appeared in the 0.8.4 release:
- * Native [242]Mac OS X Aqua/Quartz support. (i.e. OSXvnc
+ * Native [243]Mac OS X Aqua/Quartz support. (i.e. OSXvnc
alternative; some activities are faster)
- * A [243]new login mode: "-display WAIT:cmd=FINDCREATEDISPLAY
+ * A [244]new login mode: "-display WAIT:cmd=FINDCREATEDISPLAY
-unixpw ..." that will Create a new X session (either virtual or
real and with or without a display manager, e.g. kdm) for the user
if it cannot find the user's X session display via the FINDDISPLAY
- method. See the [244]-svc and the [245]-xdmsvc aliases.
- * x11vnc can act as a VNC [246]reflector/repeater using the
- "[247]-reflect host:N" option. Instead of polling an X display,
+ method. See the [245]-svc and the [246]-xdmsvc aliases.
+ * x11vnc can act as a VNC [247]reflector/repeater using the
+ "[248]-reflect host:N" option. Instead of polling an X display,
the remote VNC Server host:N is connected to and re-exported via
VNC. This is intended for use in broadcasting a display to many
(e.g. > 16; classroom or large demo) VNC viewers where bandwidth
@@ -1269,16 +1272,16 @@ LAY
number of repeaters.
* Wireframe copyrect detection for local user activity (e.g. someone
sitting at the physical display moving windows) Use
- [248]-nowireframelocal to disable.
- * The "[249]-N" option couples the VNC Display number to the X
+ [249]-nowireframelocal to disable.
+ * The "[250]-N" option couples the VNC Display number to the X
Display number. E.g. if your X DISPLAY is :2 then the VNC display
will be :2 (i.e. using port 5902.) If that port is taken x11vnc
will exit.
- * Option [250]-nodpms to avoid problems with programs like KDE's
+ * Option [251]-nodpms to avoid problems with programs like KDE's
kdesktop_lock that keep restarting the screen saver every few
seconds.
* To automatically fix the common mouse motion problem on XINERAMA
- (multi-headed) displays, the [251]-xwarppointer option is enabled
+ (multi-headed) displays, the [252]-xwarppointer option is enabled
by default when XINERAMA is active.
If you have a Mac please try out the native Mac OS X support, build
@@ -1288,62 +1291,62 @@ LAY
Here are some features that appeared in the 0.8.3 release:
- * The [252]-ssl option provides SSL encryption and authentication
- natively via the [253]www.openssl.org library. One can use from a
+ * The [253]-ssl option provides SSL encryption and authentication
+ natively via the [254]www.openssl.org library. One can use from a
simple self-signed certificate server certificate up to full CA
and client certificate authentication schemes.
- * Similar to -ssl, the [254]-stunnel option starts up a SSL tunnel
+ * Similar to -ssl, the [255]-stunnel option starts up a SSL tunnel
server stunnel (that must be installed separately on the system:
- [255]stunnel.mirt.net ) to allow only encrypted SSL connections
+ [256]stunnel.mirt.net ) to allow only encrypted SSL connections
from the network.
- * The [256]-sslverify option allows for authenticating VNC clients
+ * The [257]-sslverify option allows for authenticating VNC clients
via their certificates in either -ssl or -stunnel modes.
* Certificate creation and management tools are provide in the
- [257]-sslGenCert, [258]-sslGenCA, and [259]related options.
+ [258]-sslGenCert, [259]-sslGenCA, and [260]related options.
* An SSL enabled Java applet VNC Viewer applet is provided by x11vnc
in classes/ssl/VncViewer.jar. In addition to normal HTTP, the
applet may be loaded into the web browser via HTTPS (HTTP over
SSL.) (one can use the VNC port, e.g. https://host:5900/, or also
- the separate [260]-https port option.) A wrapper shell script
- [261]ss_vncviewer is also provided that sets up a stunnel
- client-side tunnel on Unix systems. See [262]Enhanced TightVNC
+ the separate [261]-https port option.) A wrapper shell script
+ [262]ss_vncviewer is also provided that sets up a stunnel
+ client-side tunnel on Unix systems. See [263]Enhanced TightVNC
Viewer (SSVNC) for other SSL/SSH viewer possibilities.
- * The [263]-unixpw option supports Unix username and password
- authentication (a simpler variant is the [264]-unixpw_nis option
+ * The [264]-unixpw option supports Unix username and password
+ authentication (a simpler variant is the [265]-unixpw_nis option
that works in environments where the encrypted passwords are
- readable, e.g. NIS.) The [265]-ssl or [266]-localhost +
- [267]-stunnel options are enforced in this mode to prevent
+ readable, e.g. NIS.) The [266]-ssl or [267]-localhost +
+ [268]-stunnel options are enforced in this mode to prevent
password sniffing. As a convenience, these requirements are lifted
if a SSH tunnel can be deduced (but -localhost still applies.)
- * Coupling [268]-unixpw with "[269]-display WAIT:cmd=FINDDISPLAY" or
+ * Coupling [269]-unixpw with "[270]-display WAIT:cmd=FINDDISPLAY" or
"-display WAIT:cmd=FINDCREATEDISPLAY" provides a way to allow a
user to login with their UNIX password and have their display
- connected to [270]automatically. See the [271]-svc and the
- [272]-xdmsvc aliases.
- * Hooks are provided in the [273]-unixpw_cmd and "[274]-passwdfile
+ connected to [271]automatically. See the [272]-svc and the
+ [273]-xdmsvc aliases.
+ * Hooks are provided in the [274]-unixpw_cmd and "[275]-passwdfile
cmd:,custom:..." options to allow you to supply your own
authentication and password lookup programs.
* x11vnc can be configured and built to not depend on X11 libraries
- "./configure --without-x" for [275]-rawfb only operation (e.g.
+ "./configure --without-x" for [276]-rawfb only operation (e.g.
embedded linux console devices.)
- * The [276]-rotate option enables you to rotate or reflect the
+ * The [277]-rotate option enables you to rotate or reflect the
screen before exporting via VNC. This is intended for use on
handhelds and other devices where the rotation orientation is not
"natural".
- * The "[277]-ultrafilexfer" alias is provided and improved UltraVNC
+ * The "[278]-ultrafilexfer" alias is provided and improved UltraVNC
filetransfer rates have been achieved.
- * Under the "[278]-connect_or_exit host" option x11vnc will exit
+ * Under the "[279]-connect_or_exit host" option x11vnc will exit
immediately unless the reverse connection to host succeeds. The
"-rfbport 0" option disables TCP listening for connections (useful
for this mode.)
- * The "[279]-rawfb rand" and "-rawfb none" options are useful for
+ * The "[280]-rawfb rand" and "-rawfb none" options are useful for
testing automation scripts, etc., without requiring a full
desktop.
- * Reduced spewing of information at startup, use "[280]-verbose"
+ * Reduced spewing of information at startup, use "[281]-verbose"
(also "-v") to turn it back on for debugging or if you are going
to send me a problem report.
- Here are some [281]Previous Release Notes
+ Here are some [282]Previous Release Notes
_________________________________________________________________
Some Notes:
@@ -1370,13 +1373,13 @@ LAY
protocol.) I suggest using xsetroot, dtstyle or similar utility to set
a solid background while using x11vnc. You can turn the pretty
background image back on when you are using the display directly.
- Update: As of Feb/2005 x11vnc has the [282]-solid [color] option that
+ Update: As of Feb/2005 x11vnc has the [283]-solid [color] option that
works on recent GNOME, KDE, and CDE and also on classic X (background
image is on the root window.) Update: As of Oct/2007 x11vnc has the
- [283]-ncache option that does a reasonable job caching the background
+ [284]-ncache option that does a reasonable job caching the background
(and other) pixmap data on the viewer side.
- I also find the [284]TightVNC encoding gives the best response for my
+ I also find the [285]TightVNC encoding gives the best response for my
usage (Unix <-> Unix over cable modem.) One needs a tightvnc-aware
vncviewer to take advantage of this encoding.
@@ -1388,17 +1391,17 @@ LAY
is X11's default listening port.) Had port 5900 been taken by some
other application, x11vnc would have next tried 5901. That would mean
the viewer command above should be changed to vncviewer
- far-away.east:1. You can force the port with the "[285]-rfbport NNNN"
+ far-away.east:1. You can force the port with the "[286]-rfbport NNNN"
option where NNNN is the desired port number. If that port is already
- taken, x11vnc will exit immediately. The "[286]-N" option will try to
+ taken, x11vnc will exit immediately. The "[287]-N" option will try to
match the VNC display number to the X display. (also see the "SunRay
Gotcha" note below)
Options: x11vnc has (far too) many features that may be activated
- via its [287]command line options. Useful options are, e.g., -scale to
+ via its [288]command line options. Useful options are, e.g., -scale to
do server-side scaling, and -rfbauth passwd-file to use VNC password
protection (the vncpasswd or storepasswd programs, or the x11vnc
- [288]-storepasswd option can be used to create the password file.)
+ [289]-storepasswd option can be used to create the password file.)
Algorithm: How does x11vnc do it? Rather brute-forcedly: it
continuously polls the X11 framebuffer for changes using
@@ -1426,7 +1429,7 @@ LAY
first testing out the programs. You get an interesting
recursive/feedback effect where vncviewer images keep popping up each
one contained in the previous one and slightly shifted a bit by the
- window manager decorations. There will be an [289]even more
+ window manager decorations. There will be an [290]even more
interesting effect if -scale is used. Also, if the XKEYBOARD is
supported and the XBell "beeps" once, you get an infinite loop of
beeps going off. Although all of this is mildly exciting it is not
@@ -1436,8 +1439,8 @@ LAY
Sun Ray Notes:
- You can run x11vnc on your (connected or disconnected) [290]SunRay
- session. Here are some [291]notes on SunRay usage with x11vnc.
+ You can run x11vnc on your (connected or disconnected) [291]SunRay
+ session. Here are some [292]notes on SunRay usage with x11vnc.
_________________________________________________________________
@@ -1449,7 +1452,7 @@ LAY
than you normally do to minimize the effects (e.g. do fullpage
paging rather than line-by-line scrolling, and move windows in a
single, quick motion.) Recent work has provided the
- [292]-scrollcopyrect and [293]-wireframe speedups using the
+ [293]-scrollcopyrect and [294]-wireframe speedups using the
CopyRect VNC encoding and other things, but they only speed up
some activities, not all.
* A rate limiting factor for x11vnc performance is that graphics
@@ -1508,18 +1511,18 @@ LAY
but we mention it because it may be of use for special purpose
applications. You may need to use the "-cc 4" option to force Xvfb
to use a TrueColor visual instead of DirectColor. See also the
- description of the [294]-create option that does all of this
+ description of the [295]-create option that does all of this
automatically for you.
Also, a faster and more accurate way is to use the "dummy"
Xorg/XFree86 device driver (or our Xdummy wrapper script.) See
- [295]this FAQ for details.
+ [296]this FAQ for details.
* Somewhat surprisingly, the X11 mouse (cursor) shape is write-only
and cannot be queried from the X server. So traditionally in
x11vnc the cursor shape stays fixed at an arrow. (see the "-cursor
- X" and "-cursor some" [296]options, however, for a partial hack
+ X" and "-cursor some" [297]options, however, for a partial hack
for the root window, etc.) However, on Solaris using the SUN_OVL
overlay extension, x11vnc can show the correct mouse cursor when
- the [297]-overlay option is also supplied. A similar thing is done
+ the [298]-overlay option is also supplied. A similar thing is done
on IRIX as well when -overlay is supplied.
More generally, as of Dec/2004 x11vnc supports the new XFIXES
extension (in Xorg and Solaris 10) to query the X server for the
@@ -1527,18 +1530,18 @@ LAY
with transparency (alpha channel) need to approximated to solid
RGB values (some cursors look worse than others.)
* Audio from applications is of course not redirected (separate
- redirectors do exist, e.g. esd, see [298]the FAQ on this below.)
+ redirectors do exist, e.g. esd, see [299]the FAQ on this below.)
The XBell() "beeps" will work if the X server supports the
XKEYBOARD extension. (Note that on Solaris XKEYBOARD is disabled
by default. Passing +kb to Xsun enables it.)
- * The scroll detection algorithm for the [299]-scrollcopyrect option
+ * The scroll detection algorithm for the [300]-scrollcopyrect option
can give choppy or bunched up transient output and occasionally
painting errors.
* Using -threads can expose some bugs/crashes in libvncserver.
- Please feel free to [300]contact me if you have any questions,
+ Please feel free to [301]contact me if you have any questions,
problems, or comments about x11vnc, etc.
- Also, some people ask if they can make a donation, see [301]this link
+ Also, some people ask if they can make a donation, see [302]this link
for that.
References
@@ -1664,186 +1667,187 @@ References
119. http://www.karlrunge.com/x11vnc/faq.html#faq-ssl-tunnel-ext
120. http://www.karlrunge.com/x11vnc/ssvnc.html
121. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-enc
- 122. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-unixpw_system_greeter
- 123. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-xdmsvc
- 124. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-extra_fbur
- 125. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-defer
- 126. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-wait
- 127. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-nonap
- 128. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-allinput
- 129. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-findauth
- 130. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-auth
- 131. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-display_WAIT
- 132. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-find
- 133. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-create
- 134. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-unixpw_cmd
- 135. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-unixpw_nis
- 136. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-stunnel
- 137. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-ssl
+ 122. http://www.karlrunge.com/x11vnc/Xdummy
+ 123. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-unixpw_system_greeter
+ 124. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-xdmsvc
+ 125. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-extra_fbur
+ 126. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-defer
+ 127. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-wait
+ 128. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-nonap
+ 129. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-allinput
+ 130. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-findauth
+ 131. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-auth
+ 132. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-display_WAIT
+ 133. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-find
+ 134. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-create
+ 135. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-unixpw_cmd
+ 136. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-unixpw_nis
+ 137. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-stunnel
138. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-ssl
- 139. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-sslverify
- 140. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-sslCRL
- 141. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-stunnel
- 142. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-appshare
- 143. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-remote
- 144. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-gui
- 145. http://ubuntuforums.org/showthread.php?t=1223490
- 146. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-threads
- 147. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-reflect
- 148. http://bugs.freedesktop.org/show_bug.cgi?id=21454
- 149. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-repeat
- 150. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-clip
- 151. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-rawfb
+ 139. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-ssl
+ 140. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-sslverify
+ 141. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-sslCRL
+ 142. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-stunnel
+ 143. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-appshare
+ 144. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-remote
+ 145. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-gui
+ 146. http://ubuntuforums.org/showthread.php?t=1223490
+ 147. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-threads
+ 148. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-reflect
+ 149. http://bugs.freedesktop.org/show_bug.cgi?id=21454
+ 150. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-repeat
+ 151. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-clip
152. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-rawfb
- 153. http://www.virtualgl.org/
- 154. http://www.karlrunge.com/x11vnc/faq.html#faq-turbovnc
- 155. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-ncache_cr
- 156. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-ncache
- 157. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-rmflag
- 158. http://sourceforge.net/projects/vencrypt/
- 159. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-ssl
- 160. http://www.karlrunge.com/x11vnc/ssvnc.html
- 161. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-unixpw
- 162. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-vencrypt
- 163. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-anontls
- 164. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-sslonly
- 165. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-ssl
- 166. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-vencrypt
- 167. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-anontls
- 168. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-sslCRL
- 169. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-sslGenCA
- 170. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-sslGenCert
- 171. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-ssl
- 172. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-http_oneport
- 173. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-httpsredir
- 174. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-ssl
- 175. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-avahi
- 176. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-zeroconf
- 177. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-rfbport
- 178. http://www.karlrunge.com/x11vnc/x11vnc.desktop
- 179. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-o
- 180. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-solid
- 181. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-reopen
- 182. http://www.karlrunge.com/x11vnc/faq.html#infaq_gdm
- 183. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-enc
- 184. http://www.karlrunge.com/x11vnc/ssvnc.html
- 185. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-scale
- 186. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-geometry
- 187. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-chatwindow
- 188. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-find
- 189. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-create
- 190. http://www.karlrunge.com/x11vnc/ssvnc.html
- 191. http://www.karlrunge.com/x11vnc/faq.html#faq-reverse-connect
- 192. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-find
- 193. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-create
- 194. http://www.karlrunge.com/x11vnc/faq.html#infaq_findcreatedisplay
- 195. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-proxy
- 196. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-ssh
- 197. http://www.uvnc.com/addons/repeater.html
- 198. http://www.karlrunge.com/x11vnc/faq.html#faq-reverse-connect
- 199. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-connect
- 200. http://www.karlrunge.com/x11vnc/ssvnc.html
- 201. http://www.karlrunge.com/x11vnc/ultravnc_repeater.pl
- 202. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-advertise_truecolor
- 203. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-finddpy
- 204. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-listdpy
- 205. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-find
- 206. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-create
- 207. http://www.karlrunge.com/x11vnc/faq.html#infaq_findcreatedisplay
- 208. http://www.karlrunge.com/x11vnc/faq.html#faq-xrandr
- 209. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-autoport
- 210. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-ping
- 211. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-clear_all
- 212. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-xkb
- 213. http://www.karlrunge.com/x11vnc/faq.html#faq-ssl-tunnel-viewers
- 214. http://www.karlrunge.com/x11vnc/faq.html#faq-client-caching
- 215. http://www.karlrunge.com/x11vnc/ssvnc.html
- 216. http://www.karlrunge.com/x11vnc/ssvnc.html#ycrop
- 217. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-unixpw
- 218. http://www.ultravnc.com/
- 219. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-users
- 220. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-create
+ 153. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-rawfb
+ 154. http://www.virtualgl.org/
+ 155. http://www.karlrunge.com/x11vnc/faq.html#faq-turbovnc
+ 156. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-ncache_cr
+ 157. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-ncache
+ 158. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-rmflag
+ 159. http://sourceforge.net/projects/vencrypt/
+ 160. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-ssl
+ 161. http://www.karlrunge.com/x11vnc/ssvnc.html
+ 162. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-unixpw
+ 163. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-vencrypt
+ 164. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-anontls
+ 165. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-sslonly
+ 166. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-ssl
+ 167. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-vencrypt
+ 168. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-anontls
+ 169. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-sslCRL
+ 170. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-sslGenCA
+ 171. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-sslGenCert
+ 172. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-ssl
+ 173. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-http_oneport
+ 174. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-httpsredir
+ 175. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-ssl
+ 176. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-avahi
+ 177. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-zeroconf
+ 178. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-rfbport
+ 179. http://www.karlrunge.com/x11vnc/x11vnc.desktop
+ 180. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-o
+ 181. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-solid
+ 182. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-reopen
+ 183. http://www.karlrunge.com/x11vnc/faq.html#infaq_gdm
+ 184. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-enc
+ 185. http://www.karlrunge.com/x11vnc/ssvnc.html
+ 186. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-scale
+ 187. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-geometry
+ 188. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-chatwindow
+ 189. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-find
+ 190. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-create
+ 191. http://www.karlrunge.com/x11vnc/ssvnc.html
+ 192. http://www.karlrunge.com/x11vnc/faq.html#faq-reverse-connect
+ 193. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-find
+ 194. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-create
+ 195. http://www.karlrunge.com/x11vnc/faq.html#infaq_findcreatedisplay
+ 196. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-proxy
+ 197. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-ssh
+ 198. http://www.uvnc.com/addons/repeater.html
+ 199. http://www.karlrunge.com/x11vnc/faq.html#faq-reverse-connect
+ 200. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-connect
+ 201. http://www.karlrunge.com/x11vnc/ssvnc.html
+ 202. http://www.karlrunge.com/x11vnc/ultravnc_repeater.pl
+ 203. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-advertise_truecolor
+ 204. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-finddpy
+ 205. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-listdpy
+ 206. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-find
+ 207. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-create
+ 208. http://www.karlrunge.com/x11vnc/faq.html#infaq_findcreatedisplay
+ 209. http://www.karlrunge.com/x11vnc/faq.html#faq-xrandr
+ 210. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-autoport
+ 211. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-ping
+ 212. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-clear_all
+ 213. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-xkb
+ 214. http://www.karlrunge.com/x11vnc/faq.html#faq-ssl-tunnel-viewers
+ 215. http://www.karlrunge.com/x11vnc/faq.html#faq-client-caching
+ 216. http://www.karlrunge.com/x11vnc/ssvnc.html
+ 217. http://www.karlrunge.com/x11vnc/ssvnc.html#ycrop
+ 218. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-unixpw
+ 219. http://www.ultravnc.com/
+ 220. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-users
221. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-create
222. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-create
- 223. http://www.karlrunge.com/x11vnc/faq.html#faq-avahi
- 224. http://www.avahi.org/
- 225. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-avahi
- 226. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-zeroconf
- 227. http://www.karlrunge.com/x11vnc/ssvnc.html
- 228. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-id
- 229. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-find
- 230. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-create
- 231. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-svc
- 232. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-xdmsvc
- 233. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-ssl
- 234. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-forcedpms
- 235. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-clientdpms
- 236. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-noserverdpms
- 237. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-grabalways
- 238. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-loop
- 239. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-noxdamage
- 240. http://www.karlrunge.com/x11vnc/faq.html#faq-beryl
- 241. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-httpsredir
- 242. http://www.karlrunge.com/x11vnc/faq.html#faq-macosx
- 243. http://www.karlrunge.com/x11vnc/faq.html#infaq_findcreatedisplay
- 244. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-svc
- 245. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-xdmsvc
- 246. http://www.karlrunge.com/x11vnc/faq.html#faq-reflect
- 247. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-reflect
- 248. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-nowireframelocal
- 249. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-N
- 250. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-nodpms
- 251. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-xwarppointer
- 252. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-ssl
- 253. http://www.openssl.org/
- 254. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-stunnel
- 255. http://stunnel.mirt.net/
- 256. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-sslverify
- 257. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-sslGenCert
- 258. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-sslGenCA
- 259. http://www.karlrunge.com/x11vnc/ssl.html
- 260. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-https
- 261. http://www.karlrunge.com/x11vnc/faq.html#infaq_ss_vncviewer
- 262. http://www.karlrunge.com/x11vnc/ssvnc.html
- 263. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-unixpw
- 264. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-unixpw_nis
- 265. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-ssl
- 266. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-localhost
- 267. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-stunnel
- 268. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-unixpw
- 269. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-display_WAIT
- 270. http://www.karlrunge.com/x11vnc/faq.html#faq-userlogin
- 271. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-svc
- 272. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-xdmsvc
- 273. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-unixpw_cmd
- 274. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-passwdfile
- 275. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-rawfb
- 276. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-rotate
- 277. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-ultrafilexfer
- 278. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-connect_or_exit
- 279. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-rawfb
- 280. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-v,
- 281. http://www.karlrunge.com/x11vnc/prevrels.html
- 282. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-solid
- 283. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-ncache
- 284. http://www.tightvnc.com/
- 285. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-rfbport
- 286. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-N
- 287. http://www.karlrunge.com/x11vnc/x11vnc_opts.html
- 288. http://www.karlrunge.com/x11vnc/faq.html#faq-passwd
- 289. http://www.karlrunge.com/x11vnc/recurse_x11vnc.jpg
- 290. http://www.sun.com/sunray/index.html
- 291. http://www.karlrunge.com/x11vnc/sunray.html
- 292. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-scrollcopyrect
- 293. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-wireframe
- 294. http://www.karlrunge.com/x11vnc/faq.html#infaq_findcreatedisplay
- 295. http://www.karlrunge.com/x11vnc/faq.html#faq-xvfb
- 296. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-cursor
- 297. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-overlay
- 298. http://www.karlrunge.com/x11vnc/faq.html#faq-sound
- 299. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-scrollcopyrect
- 300. mailto:xvml@karlrunge.com
- 301. http://www.karlrunge.com/x11vnc/faq.html#faq-thanks
+ 223. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-create
+ 224. http://www.karlrunge.com/x11vnc/faq.html#faq-avahi
+ 225. http://www.avahi.org/
+ 226. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-avahi
+ 227. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-zeroconf
+ 228. http://www.karlrunge.com/x11vnc/ssvnc.html
+ 229. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-id
+ 230. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-find
+ 231. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-create
+ 232. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-svc
+ 233. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-xdmsvc
+ 234. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-ssl
+ 235. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-forcedpms
+ 236. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-clientdpms
+ 237. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-noserverdpms
+ 238. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-grabalways
+ 239. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-loop
+ 240. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-noxdamage
+ 241. http://www.karlrunge.com/x11vnc/faq.html#faq-beryl
+ 242. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-httpsredir
+ 243. http://www.karlrunge.com/x11vnc/faq.html#faq-macosx
+ 244. http://www.karlrunge.com/x11vnc/faq.html#infaq_findcreatedisplay
+ 245. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-svc
+ 246. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-xdmsvc
+ 247. http://www.karlrunge.com/x11vnc/faq.html#faq-reflect
+ 248. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-reflect
+ 249. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-nowireframelocal
+ 250. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-N
+ 251. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-nodpms
+ 252. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-xwarppointer
+ 253. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-ssl
+ 254. http://www.openssl.org/
+ 255. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-stunnel
+ 256. http://stunnel.mirt.net/
+ 257. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-sslverify
+ 258. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-sslGenCert
+ 259. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-sslGenCA
+ 260. http://www.karlrunge.com/x11vnc/ssl.html
+ 261. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-https
+ 262. http://www.karlrunge.com/x11vnc/faq.html#infaq_ss_vncviewer
+ 263. http://www.karlrunge.com/x11vnc/ssvnc.html
+ 264. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-unixpw
+ 265. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-unixpw_nis
+ 266. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-ssl
+ 267. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-localhost
+ 268. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-stunnel
+ 269. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-unixpw
+ 270. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-display_WAIT
+ 271. http://www.karlrunge.com/x11vnc/faq.html#faq-userlogin
+ 272. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-svc
+ 273. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-xdmsvc
+ 274. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-unixpw_cmd
+ 275. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-passwdfile
+ 276. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-rawfb
+ 277. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-rotate
+ 278. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-ultrafilexfer
+ 279. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-connect_or_exit
+ 280. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-rawfb
+ 281. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-v,
+ 282. http://www.karlrunge.com/x11vnc/prevrels.html
+ 283. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-solid
+ 284. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-ncache
+ 285. http://www.tightvnc.com/
+ 286. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-rfbport
+ 287. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-N
+ 288. http://www.karlrunge.com/x11vnc/x11vnc_opts.html
+ 289. http://www.karlrunge.com/x11vnc/faq.html#faq-passwd
+ 290. http://www.karlrunge.com/x11vnc/recurse_x11vnc.jpg
+ 291. http://www.sun.com/sunray/index.html
+ 292. http://www.karlrunge.com/x11vnc/sunray.html
+ 293. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-scrollcopyrect
+ 294. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-wireframe
+ 295. http://www.karlrunge.com/x11vnc/faq.html#infaq_findcreatedisplay
+ 296. http://www.karlrunge.com/x11vnc/faq.html#faq-xvfb
+ 297. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-cursor
+ 298. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-overlay
+ 299. http://www.karlrunge.com/x11vnc/faq.html#faq-sound
+ 300. http://www.karlrunge.com/x11vnc/x11vnc_opts.html#opt-scrollcopyrect
+ 301. mailto:xvml@karlrunge.com
+ 302. http://www.karlrunge.com/x11vnc/faq.html#faq-thanks
=======================================================================
http://www.karlrunge.com/x11vnc/faq.html:
@@ -2655,7 +2659,7 @@ typedef unsigned int in_addr_t;
up the Java VNC Viewer jar file (either SSL enabled or regular one),
then you will need to extract the classes subdirectory from the source
tarball and point x11vnc to it via the [161]-httpdir option. E.g.:
- x11vnc -httpdir /path/to/x11vnc-0.8.3/classes/ssl ...
+ x11vnc -httpdir /path/to/x11vnc-0.9.9/classes/ssl ...
Q-6: Where can I get a VNC Viewer binary (or source code) for the
@@ -9279,8 +9283,8 @@ References
143. http://www.karlrunge.com/x11vnc/index.html#building
144. http://www.karlrunge.com/x11vnc/faq.html#faq-build
145. http://www.linuxpackages.net/search_view.php?by=name&name=x11vnc
- 146. http://software.opensuse.org/search?baseproject=openSUSE%3A11.1&p=1&q=x11vnc
- 147. http://gentoo-wiki.com/HOWTO_Use_VNC_to_connect_to_existing_X_Sessions
+ 146. http://software.opensuse.org/search?baseproject=openSUSE%3A11.2&p=1&q=x11vnc
+ 147. http://en.gentoo-wiki.com/wiki/X11VNC
148. http://gentoo-portage.com/x11-misc/x11vnc
149. http://www.freebsd.org/cgi/ports.cgi?query=x11vnc&stype=all
150. http://www.freshports.org/net/x11vnc
@@ -12919,7 +12923,7 @@ x11vnc: a VNC server for real X displays
Here are all of x11vnc command line options:
% x11vnc -opts (see below for -help long descriptions)
-x11vnc: allow VNC connections to real X11 displays. 0.9.10 lastmod: 2009-12-24
+x11vnc: allow VNC connections to real X11 displays. 0.9.10 lastmod: 2009-12-27
x11vnc options:
-display disp -auth file -N
@@ -13047,7 +13051,7 @@ libvncserver-tight-extension options:
% x11vnc -help
-x11vnc: allow VNC connections to real X11 displays. 0.9.10 lastmod: 2009-12-24
+x11vnc: allow VNC connections to real X11 displays. 0.9.10 lastmod: 2009-12-27
(type "x11vnc -opts" to just list the options.)
diff --git a/x11vnc/appshare.c b/x11vnc/appshare.c
index 81d9949..f9cc8f3 100644
--- a/x11vnc/appshare.c
+++ b/x11vnc/appshare.c
@@ -563,6 +563,9 @@ static void be_helper_pid(char *dpy_str) {
if (ms < 50) ms = 50;
+#if NO_X11
+ fprintf(stderr, "be_helper_pid: not compiled with X11.\n");
+#else
dpy = XOpenDisplay(dpy_str);
ticker_atom = XInternAtom(dpy, ticker_atom_str, False);
@@ -583,6 +586,7 @@ static void be_helper_pid(char *dpy_str) {
}
}
}
+#endif
exit(0);
}
@@ -895,7 +899,7 @@ static void delete_win(Window win) {
static void recurse_search(int level, int level_max, Window top, Window app, int *nw) {
Window w, r, parent, *list = NULL;
unsigned int nchild;
- int ok;
+ int ok = 0;
if (appshare_debug > 1) {
fprintf(stderr, "level: %d level_max: %d top: 0x%lx app: 0x%lx\n", level, level_max, top, app);
@@ -904,6 +908,7 @@ static void recurse_search(int level, int level_max, Window top, Window app, int
return;
}
+#if !NO_X11
ok = XQueryTree(dpy, top, &r, &parent, &list, &nchild);
if (ok) {
int i;
@@ -930,6 +935,7 @@ static void recurse_search(int level, int level_max, Window top, Window app, int
if (list) {
XFree(list);
}
+#endif
}
static void add_app(Window app) {
diff --git a/x11vnc/misc/Xdummy b/x11vnc/misc/Xdummy
index 84e77a3..3abc199 100755
--- a/x11vnc/misc/Xdummy
+++ b/x11vnc/misc/Xdummy
@@ -652,7 +652,8 @@ if [ -e "$xserver_path" -a "X$root" = "X" -a "X$runit" != "X" ]; then
warn ""
warn "Please restart Xdummy now."
exit 0
- elif [ ! -O $new ]; then
+ fi
+ if [ ! -O $new ]; then
warn "file \"$new\" not owned by us!"
ls -l $new
exit 1
diff --git a/x11vnc/misc/enhanced_tightvnc_viewer/bin/ssvnc b/x11vnc/misc/enhanced_tightvnc_viewer/bin/ssvnc
index f592ef1..9cd636b 100755
--- a/x11vnc/misc/enhanced_tightvnc_viewer/bin/ssvnc
+++ b/x11vnc/misc/enhanced_tightvnc_viewer/bin/ssvnc
@@ -17,6 +17,7 @@ SYNOPSIS
ssvnc [host][:display]
ssvnc [saved-profile-name]
ssvnc [options] [host-or-profile]
+ ssvnc -cmd [ssvnc_cmd-args]
ssvnc --help
DESCRIPTION
@@ -33,6 +34,12 @@ OPTIONS
--help Starts up the GUI as though the 'Help' button was pressed to
show the main Help panel.
+ -cmd [ssvnc_cmd-args]
+ Launch the ssvnc_cmd utility command directly (no GUI) with the
+ given arguments (for use when ssvnc_cmd is not in one's PATH.)
+ If neither ssvnc_cmd nor ssvncviewer is in PATH, one can launch
+ the viewer directly via: ssvnc -cmd -viewer [viewer-args]
+
-profiles
List the saved SSVNC profiles you have created. A profile is a
destination host with specific parameter settings.
@@ -63,11 +70,12 @@ OPTIONS
Make the Profile Selection Dialog window bigger. Same as
SSVNC_BIGGER_DIALOG=1.
- -noenc Start off in a mode where a 'No Encryption' check button is
+ -noenc Start off in a mode where a 'No Encryption' check button is
present. You can toggle the mode with Ctrl-E. Same as
SSVNC_DISABLE_ENCRYPTION_BUTTON=1. Or noenc=1 in ~/.ssvncrc.
- Selecting no encryption is the same as the vnc:// and Vnc://
- prefixes described below. -enc implies the opposite.
+ Selecting no encryption is the same as the vnc:// and Vnc://
+ prefixes described below. The -noenc mode is now the default,
+ use -enc or noenc=0 for the opposite behavior.
-killstunnel
On Windows, automatically terminate the STUNNEL process when the
@@ -271,7 +279,7 @@ if [ -f "$dir/util/ultraftp.jar" ]; then
export SSVNC_ULTRA_FTP_JAR
fi
-if [ "X$1" = "X-cmd" ]; then
+if [ "X$1" = "X-cmd" -o "X$1" = "X--cmd" ]; then
shift
exec ssvnc_cmd "$@"
elif [ "X$WISH" = "Xwish" ]; then
diff --git a/x11vnc/misc/enhanced_tightvnc_viewer/bin/ssvnc_cmd b/x11vnc/misc/enhanced_tightvnc_viewer/bin/ssvnc_cmd
index 7b5e62b..f84eb58 100755
--- a/x11vnc/misc/enhanced_tightvnc_viewer/bin/ssvnc_cmd
+++ b/x11vnc/misc/enhanced_tightvnc_viewer/bin/ssvnc_cmd
@@ -25,13 +25,16 @@
#
# ssvnc_cmd [ss_vncviewer-args] hostname:N [vncviewer-args]
#
-# if, instead, this script is named "tightvncviewer" it calls the
-# vncviewer directly and must be invoked as:
+# 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
+# e.g. snoopy:0. (-listen N and -appshare N modes works too.)
#
# See the script util/ss_vncviewer for details about its arguments:
#
@@ -240,6 +243,15 @@ if [ "X$1" = "X-ssl" ]; then
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:
#
@@ -260,13 +272,13 @@ if [ $use_ours = 1 ]; then
fi
fi
- if [ "X$base" = "Xtightvncviewer" ]; then
+ 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$base" = "Xtightvncviewer" ]; then
+ if [ "X$do_viewer_directly" = "X1" ]; then
$VNCVIEWERCMD "$@"
else
ss_vncviewer "$@"
diff --git a/x11vnc/misc/enhanced_tightvnc_viewer/bin/util/ssvnc.tcl b/x11vnc/misc/enhanced_tightvnc_viewer/bin/util/ssvnc.tcl
index 533b477..3e63ba5 100755
--- a/x11vnc/misc/enhanced_tightvnc_viewer/bin/util/ssvnc.tcl
+++ b/x11vnc/misc/enhanced_tightvnc_viewer/bin/util/ssvnc.tcl
@@ -33,6 +33,15 @@ proc center_win {w} {
update
}
+proc small_height {} {
+ set H [winfo screenheight .]
+ if {$H < 700} {
+ return 1
+ } else {
+ return 0
+ }
+}
+
proc mac_raise {} {
global uname
if {$uname == "Darwin"} {
@@ -67,6 +76,9 @@ proc line_count {{str ""} {pad 0}} {
proc scroll_text {fr {w 80} {h 35}} {
global help_font is_windows scroll_text_focus
+ if {$h == 35 && [small_height]} {
+ set h 28
+ }
catch {destroy $fr}
frame $fr -bd 0
@@ -88,6 +100,9 @@ proc scroll_text {fr {w 80} {h 35}} {
proc scroll_text_dismiss {fr {w 80} {h 35}} {
global help_font
+ if {$h == 35 && [small_height]} {
+ set h 28
+ }
scroll_text $fr $w $h
set up $fr
@@ -354,7 +369,11 @@ proc help {} {
}
toplev .h
- scroll_text_dismiss .h.f 82 37
+ set h 37
+ if [small_height] {
+ set h 26
+ }
+ scroll_text_dismiss .h.f 82 $h
center_win .h
wm title .h "SSL/SSH VNC Viewer Help"
@@ -1693,7 +1712,11 @@ proc ssvnc_escape_help {} {
proc help_certs {} {
toplev .ch
- scroll_text_dismiss .ch.f 87 33
+ set h 33
+ if [small_height] {
+ set h 28
+ }
+ scroll_text_dismiss .ch.f 87 $h
center_win .ch
wm resizable .ch 1 0
@@ -2506,7 +2529,11 @@ set msg {
proc help_fetch_cert {{selfsigned 1}} {
toplev .fh
- scroll_text_dismiss .fh.f 85 35
+ set h 35
+ if [small_height] {
+ set h 28
+ }
+ scroll_text_dismiss .fh.f 85 $h
center_win .fh
wm resizable .fh 1 0
@@ -3566,7 +3593,11 @@ proc check_debug_netstat {port str wn} {
toplev .dbns
- scroll_text_dismiss .dbns.f 82 35
+ set h 35
+ if [small_height] {
+ set h 28
+ }
+ scroll_text_dismiss .dbns.f 82 $h
center_win .dbns
.dbns.f.t insert end "LOOKING FOR PORT: $port\n\n$str"
jiggle_text .dbns.f.t
@@ -5189,6 +5220,10 @@ proc skip_non_self_signed {w hp} {
proc fetch_dialog {cert_text hp hpnew ok n} {
toplev .fetch
+ if [small_height] {
+ set n 28
+ }
+
scroll_text_dismiss .fetch.f 90 $n
if {$ok} {
@@ -5868,6 +5903,11 @@ proc check_accepted_certs {{probe_only 0}} {
} else {
set n [expr $n + 1]
}
+ if [small_height] {
+ if {$n > 26} {
+ set n 26
+ }
+ }
toplev .acert
scroll_text .acert.f 83 $n
@@ -9005,11 +9045,13 @@ proc create_cert {{name ""}} {
wm title .ccrt "Create SSL Certificate"
global uname
- if {$uname == "Darwin"} {
- scroll_text .ccrt.f 80 20
- } else {
- scroll_text .ccrt.f 80 30
+ set h 27
+ if [small_height] {
+ set h 14
+ } elseif {$uname == "Darwin"} {
+ set h 20
}
+ scroll_text .ccrt.f 80 $h
set msg {
This dialog helps you to create a simple Self-Signed SSL certificate.
@@ -9451,11 +9493,13 @@ proc import_cert {} {
global scroll_text_focus
set scroll_text_focus 0
global uname
- if {$uname == "Darwin"} {
- scroll_text .icrt.f 90 16
- } else {
- scroll_text .icrt.f 90 20
+ set h 19
+ if [small_height] {
+ set h 12
+ } elseif {$uname == "Darwin"} {
+ set h 16
}
+ scroll_text .icrt.f 90 $h
set scroll_text_focus 1
set msg {
@@ -9530,11 +9574,13 @@ TCQ+tbQ/DOiTXGKx1nlcKoPdkG+QVQVJthlQcpam
$w.e configure -state disabled
label .icrt.plab -anchor w -text "Paste Certificate here: (extra blank lines above or below are OK)"
- if {$uname == "Darwin"} {
- scroll_text .icrt.paste 90 11
- } else {
- scroll_text .icrt.paste 90 22
+ set h 22
+ if [small_height] {
+ set h 11
+ } elseif {$uname == "Darwin"} {
+ set h 11
}
+ scroll_text .icrt.paste 90 $h
button .icrt.cancel -text "Cancel" -command {destroy .icrt; catch {raise .c}}
bind .icrt <Escape> {destroy .icrt; catch {raise .c}}
@@ -9577,20 +9623,29 @@ proc save_cert {hp} {
global cert_text
toplev .scrt
- wm title .scrt "Import SSL Certificate"
+ wm title .scrt "Import/Save SSL Certificate"
global scroll_text_focus
set scroll_text_focus 0
global uname
global accepted_cert_dialog_in_progress
+ set h 20
if {$accepted_cert_dialog_in_progress} {
set mode "accepted"
- scroll_text .scrt.f 90 15
+ set h 15
+ if [small_height] {
+ set h 11
+ }
} else {
set mode "normal"
- scroll_text .scrt.f 90 20
+ set h 20
+ if [small_height] {
+ set h 16
+ }
}
+ scroll_text .scrt.f 90 $h
+
set scroll_text_focus 1
set msg1 {
@@ -9647,7 +9702,11 @@ proc save_cert {hp} {
set import_file ""
entry $w.e -width 40 -textvariable import_file
- scroll_text .scrt.paste 90 23
+ set h 22
+ if [small_height] {
+ set h 10
+ }
+ scroll_text .scrt.paste 90 $h
button .scrt.cancel -text "Cancel" -command {destroy .scrt; catch {raise .c}}
bind .scrt <Escape> {destroy .scrt; catch {raise .c}}
@@ -11358,7 +11417,11 @@ proc ts_xlogin_dialog {} {
toplev .xlog
wm title .xlog "X Login Greeter"
- scroll_text .xlog.f 80 33
+ set h 33
+ if [small_height] {
+ set h 28
+ }
+ scroll_text .xlog.f 80 $h
global ts_xlogin
@@ -11569,7 +11632,11 @@ proc ts_x11vnc_opts_dialog {} {
toplev .x11v
wm title .x11v "x11vnc Options"
- scroll_text .x11v.f 80 23
+ set h 23
+ if [small_height] {
+ set h 21
+ }
+ scroll_text .x11v.f 80 $h
global ts_x11vnc_opts ts_x11vnc_path ts_x11vnc_autoport choose_x11vnc_opts
global additional_port_redirs_list
@@ -11699,7 +11766,11 @@ proc ts_cups_dialog {} {
global cups_local_server cups_remote_port cups_manage_rcfile ts_cups_manage_rcfile cups_x11vnc
global cups_local_smb_server cups_remote_smb_port
- scroll_text .cups.f 80 30
+ set h 30
+ if [small_height] {
+ set h 24
+ }
+ scroll_text .cups.f 80 $h
set msg {
@@ -11844,11 +11915,13 @@ proc cups_dialog {} {
}
global uname
- if {$uname == "Darwin"} {
- scroll_text .cups.f 80 25
- } else {
- scroll_text .cups.f
+ set h 33
+ if [small_height] {
+ set h 17
+ } elseif {$uname == "Darwin"} {
+ set h 24
}
+ scroll_text .cups.f 80 $h
set msg {
@@ -12210,11 +12283,13 @@ proc sound_dialog {} {
wm title .snd "ESD/ARTSD Sound Tunnelling"
global uname
- if {$uname == "Darwin"} {
- scroll_text .snd.f 80 20
- } else {
- scroll_text .snd.f 80 30
+ set h 28
+ if [small_height] {
+ set h 14
+ } elseif {$uname == "Darwin"} {
+ set h 20
}
+ scroll_text .snd.f 80 $h
set msg {
Sound tunnelling to a sound daemon requires SSH be used to set up the
@@ -12765,7 +12840,11 @@ proc smb_help_me_decide {} {
wm title .smbwiz $title
set id " "
- scroll_text .smbwiz.f 100 40
+ set h 40
+ if [small_height] {
+ set h 30
+ }
+ scroll_text .smbwiz.f 100 $h
set msg {
For now you will have to verify the following information manually.
@@ -12979,11 +13058,13 @@ proc smb_dialog {} {
global help_font
global uname
- if {$uname == "Darwin"} {
- scroll_text .smb.f 80 25
- } else {
- scroll_text .smb.f
+ set h 33
+ if [small_height] {
+ set h 17
+ } elseif {$uname == "Darwin"} {
+ set h 24
}
+ scroll_text .smb.f 80 $h
set msg {
Windows/Samba Filesystem mounting requires SSH be used to set up the SMB
@@ -13679,7 +13760,11 @@ proc help_ssvncviewer_opts {} {
proc show_viewer_help {} {
toplev .vhlp
- scroll_text_dismiss .vhlp.f 83 35
+ set h 35
+ if [small_height] {
+ set h 30
+ }
+ scroll_text_dismiss .vhlp.f 83 $h
center_win .vhlp
wm resizable .vhlp 1 0
@@ -13710,9 +13795,9 @@ proc change_vncviewer_dialog {} {
global help_font
if {$ts_only} {
- eval text .chviewer.t -width 90 -height 18 $help_font
+ eval text .chviewer.t -width 90 -height 16 $help_font
} else {
- eval text .chviewer.t -width 90 -height 29 $help_font
+ eval text .chviewer.t -width 90 -height 27 $help_font
}
apply_bg .chviewer.t
@@ -13726,8 +13811,7 @@ proc change_vncviewer_dialog {} {
You can specify your own command line options below if you like (and try to
avoid setting any others in this GUI under "Options").
- If the path to the program name has any spaces it in, please surround it with
- double quotes, e.g.
+ If the path to the program name has spaces it in, surround it with double quotes:
"C:\Program Files\My Vnc Viewer\VNCVIEWER.EXE"
@@ -13739,11 +13823,10 @@ proc change_vncviewer_dialog {} {
Since the command line options differ between them greatly, if you know it
is of the RealVNC 4.x flavor, indicate on the check box. Otherwise we guess.
- To have SSVNC act as a general STUNNEL redirector (no VNC) set the viewer to
- be "xmessage OK" or "xmessage <port>" or "sleep n" or "sleep n <port>" (or
- "NOTEPAD" on Windows). The default listen port is 5930. The destination is
- set in "VNC Host:Display" (for a remote port less then 200 use the negative
- of the port value).
+ To have SSVNC act as a general STUNNEL redirector (no VNC) set the viewer to be
+ "xmessage OK" or "xmessage <port>" or "sleep n" or "sleep n <port>" (or "NOTEPAD"
+ on Windows). The default listen port is 5930. The destination is set in "VNC
+ Host:Display" (for a remote port less than 200 use the negative of the port value).
}
if {$ts_only} {
@@ -13785,11 +13868,11 @@ proc port_redir_dialog {} {
wm title .redirs "Additional Port Redirections (via SSH)"
global help_font uname
- if {$uname == "Darwin"} {
- eval text .redirs.t -width 80 -height 35 $help_font
- } else {
- eval text .redirs.t -width 80 -height 35 $help_font
+ set h 35
+ if [small_height] {
+ set h 27
}
+ eval text .redirs.t -width 80 -height $h $help_font
apply_bg .redirs.t
set msg {
@@ -13856,11 +13939,12 @@ proc stunnel_sec_dialog {} {
wm title .stlsec "STUNNEL Local Port Protections"
global help_font uname
- if {$uname == "Darwin"} {
- scroll_text .stlsec.f 82 37
- } else {
- scroll_text .stlsec.f 82 37
+
+ set h 37
+ if [small_height] {
+ set h 26
}
+ scroll_text .stlsec.f 82 $h
apply_bg .stlsec.f
@@ -13924,7 +14008,11 @@ proc disable_ssl_workarounds_dialog {} {
wm title .sslwrk "Disable SSL Workarounds"
global help_font uname
- scroll_text .sslwrk.f 86 36
+ set h 36
+ if [small_height] {
+ set h 24
+ }
+ scroll_text .sslwrk.f 86 $h
apply_bg .sslwrk.f
@@ -14020,7 +14108,11 @@ proc ultra_dsm_dialog {} {
wm title .ultradsm "UltraVNC DSM Encryption Plugin"
global help_font
- scroll_text .ultradsm.f 85 40
+ set h 40
+ if [small_height] {
+ set h 22
+ }
+ scroll_text .ultradsm.f 85 $h
set msg {
On Unix and MacOSX with the provided SSVNC vncviewer, you can connect to an
@@ -14200,7 +14292,11 @@ proc ssh_known_hosts_dialog {} {
wm title .sshknownhosts "Private SSH KnownHosts file"
global help_font
- scroll_text .sshknownhosts.f 80 31
+ set h 31
+ if [small_height] {
+ set h 23
+ }
+ scroll_text .sshknownhosts.f 80 $h
set msg {
Private SSH KnownHosts file:
@@ -14318,7 +14414,11 @@ proc multilisten_dialog {} {
wm title .multil "Multiple LISTEN Connections"
global help_font
- eval text .multil.t -width 84 -height 35 $help_font
+ set h 35
+ if [small_height] {
+ set h 30
+ }
+ eval text .multil.t -width 84 -height $h $help_font
apply_bg .multil.t
@@ -14805,11 +14905,14 @@ proc port_knocking_dialog {} {
global help_font
global uname
- if {$uname == "Darwin"} {
- scroll_text .pk.f 85 25
- } else {
- scroll_text .pk.f 85
+
+ set h 35
+ if [small_height] {
+ set h 22
+ } elseif {$uname == "Darwin"} {
+ set h 25
}
+ scroll_text .pk.f 85 $h
set msg {
Description:
@@ -15355,18 +15458,18 @@ proc set_ts_adv_options {} {
}
proc change_vncviewer_dialog_wrap {} {
- global change_vncviewer ts_uss_button
+ global change_vncviewer ts_uss_button is_windows
if {$change_vncviewer} {
change_vncviewer_dialog
catch {tkwait window .chviewer}
}
- if {$change_vncviewer} {
+ if {$change_vncviewer || $is_windows} {
catch {.oa.ss configure -state disabled}
} else {
catch {.oa.ss configure -state normal}
}
if [info exists ts_uss_button] {
- if {$change_vncviewer} {
+ if {$change_vncviewer || $is_windows} {
catch {$ts_uss_button configure -state disabled}
} else {
catch {$ts_uss_button configure -state normal}
@@ -15529,7 +15632,7 @@ proc set_advanced_options {} {
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
+ pack .oa.ss -side top -fill x
if {$is_windows} {
.oa.ss configure -state disabled
}
@@ -15817,7 +15920,7 @@ proc set_ssvncviewer_options {} {
frame $fr.b$j -relief $relief -borderwidth 2
label $fr.b$j.l1 -font $ffont -anchor w -text "Add any extra options for ssvncviewer that you want.";
- label $fr.b$j.l2 -font $ffont -anchor w -text "For example: -16bpp -noshm etc. See Help for a list.";
+ label $fr.b$j.l2 -font $ffont -anchor w -text "For example: -16bpp -appshare -noshm etc. See Help for a list.";
global ssvnc_extra_opts
frame $fr.b$j.f
diff --git a/x11vnc/misc/enhanced_tightvnc_viewer/man/man1/ssvnc.1 b/x11vnc/misc/enhanced_tightvnc_viewer/man/man1/ssvnc.1
index fa506ca..46bea26 100644
--- a/x11vnc/misc/enhanced_tightvnc_viewer/man/man1/ssvnc.1
+++ b/x11vnc/misc/enhanced_tightvnc_viewer/man/man1/ssvnc.1
@@ -2,13 +2,13 @@
.\" ** The above line should force tbl to be a preprocessor **
.\" Man page for the SSVNC vncviewer
.\"
-.\" Copyright (C) 2006-2008 Karl J. Runge <runge@karlrunge.com>
+.\" Copyright (C) 2006-2009 Karl J. Runge <runge@karlrunge.com>
.\"
.\" You may distribute under the terms of the GNU General Public
.\" License as specified in the file LICENCE.TXT that comes with the
.\" TightVNC distribution.
.\"
-.TH ssvnc 1 "September 2009" "" "SSVNC"
+.TH ssvnc 1 "December 2009" "" "SSVNC"
.SH NAME
ssvnc \- a GUI wrapper for SSL and SSH VNC connections.
.SH SYNOPSIS
@@ -24,6 +24,10 @@ ssvnc \- a GUI wrapper for SSL and SSH VNC connections.
.RI [\| options \|]\ [\| host-or-profile \]
.br
.B ssvnc
+.IR \-cmd
+.RI [\| ssvnc_cmd-args \|]
+.br
+.B ssvnc
.IR \--help
.br
.SH DESCRIPTION
@@ -47,10 +51,10 @@ Or supply user@hostname:display and click on the "Use SSH" option, then
press the "Connect" button to connect to the server via an SSH tunnel.
E.g. "fred@far-away.east:0".
-As an easter egg, we note it is also possible to disable the use of SSL/SSH
+Note it is also possible to disable the use of SSL/SSH
encryption tunnels by using a vnc:// or Vnc:// prefix before
host:display. Shift+Ctrl-E is a short-cut to add/remove it.
-See also the \fB-noenc\fR option below.
+See also the \fB-noenc\fR option below for the 'No Encryption' button.
Normally you do not specify any command line options. You simply
run \fBssvnc\fR and use the GUI that starts up.
@@ -70,6 +74,12 @@ See below and the application Help for more information on the modes.
You can also place certain settings in your ~/.ssvncrc, see the
SSVNC Help panel ('Tips') for more info.
+The \fB-cmd\fR option does not start the GUI, it runs the command
+line utility \fBssvnc_cmd\fR directly with the given arguments.
+\fBssvnc_cmd\fR can launch the viewer directly (\fB-viewer ...\fR)
+or, by default, the \fBss_vncviewer\fR SSL/SSH tunnel wrapper script.
+See its help output for more information.
+
There are also some command line options described as follows.
.SH OPTIONS
.TP
@@ -80,6 +90,12 @@ Prints out to the terminal a brief description and the options.
Starts up the GUI as though the 'Help' button was pressed to show the
main Help panel.
.TP
+\fB\-cmd\fR \fI[ssvnc_cmd-args]\fR
+Launch the ssvnc_cmd utility command directly (no GUI) with the given
+arguments (for use when ssvnc_cmd is not in one's PATH.) If neither
+ssvnc_cmd nor ssvncviewer is in PATH, one can launch the viewer
+directly via: ssvnc -cmd -viewer [viewer-args]
+.TP
\fB\-profiles\fR
List the saved SSVNC profiles you have created. A profile
is a destination host with specific parameter settings.
@@ -122,7 +138,8 @@ Start off in a mode where a 'No Encryption' check button is present.
You can toggle the mode with Ctrl-E.
Same as SSVNC_DISABLE_ENCRYPTION_BUTTON=1. Or \fInoenc=1\fR in ~/.ssvncrc.
Selecting no encryption is the same as the vnc:// and Vnc:// prefixes
-described below. \fB-enc\fR implies the opposite.
+described below. The \fB\-noenc\fR mode is now the default, use \fB-enc\fR
+or \fInoenc=0\fR for the opposite behavior.
.TP
\fB\-killstunnel\fR
On Windows, automatically terminate the STUNNEL process when the viewer
diff --git a/x11vnc/misc/enhanced_tightvnc_viewer/man/man1/ssvncviewer.1 b/x11vnc/misc/enhanced_tightvnc_viewer/man/man1/ssvncviewer.1
index 12e7bca..a9dd71f 100644
--- a/x11vnc/misc/enhanced_tightvnc_viewer/man/man1/ssvncviewer.1
+++ b/x11vnc/misc/enhanced_tightvnc_viewer/man/man1/ssvncviewer.1
@@ -11,7 +11,7 @@
.\" License as specified in the file LICENCE.TXT that comes with the
.\" TightVNC distribution.
.\"
-.TH ssvncviewer 1 "September 2009" "" "SSVNC"
+.TH ssvncviewer 1 "December 2009" "" "SSVNC"
.SH NAME
ssvncviewer \- an X viewer client for VNC
.SH SYNOPSIS
@@ -465,6 +465,18 @@ as possible instead of waiting until the end of the current
framebuffer update coming in. Helps 'pipeline' the updates.
This is currently the default, use \fB-nopipeline\fR to disable.
.TP
+\fB\-appshare\fR
+Enable features for use with x11vnc's \fB\-appshare\fR mode where
+instead of sharing the full desktop only the application's
+windows are shared. Viewer multilisten mode is used to
+create the multiple windows: \fB\-multilisten\fR is implied.
+See 'x11vnc \fB\-appshare\fR \fB\-help\fR' more information on the mode.
+Features enabled in the viewer under \fB\-appshare\fR are:
+Minimum extra text in the title, auto \fB\-ycrop\fR is disabled,
+x11vnc \fB\-remote_prefix\fR X11VNC_APPSHARE_CMD: message channel,
+x11vnc initial window position hints. See also Escape Keys
+below for additional key and mouse bindings.
+.TP
\fB\-escape \fR\fIstr\fR
This sets the 'Escape Keys' modifier sequence and enables
escape keys mode. When the modifier keys escape sequence
@@ -511,6 +523,18 @@ Clicking Mouse Button3 brings up the Popup Menu.
The above mappings are \fBalways\fR active in ViewOnly mode, unless you set
the Escape Keys value to 'never'.
+x11vnc -appshare hot-keys: x11vnc has a simple application sharing mode
+that enables the viewer-side to move, resize, or raise the remote toplevel
+windows. To enable it, hold down Shift + the Escape Keys and press these:
+
+Arrow keys: move the remote window around in its desktop.
+
+PageUp/PageDn/Home/End: resize the remote window.
+
++/-: raise or lower the remote window.
+
+M or Button1 move win to local position; D or Button3: delete remote win.
+
If the Escape Keys value below is set to 'default' then a default list of
of modifier keys is used. For Unix it is: Alt_L,Super_L and for MacOSX it
is Control_L,Meta_L. Note: the Super_L key usually has a Windows(TM) Flag
diff --git a/x11vnc/misc/enhanced_tightvnc_viewer/src/patches/tight-vncviewer-full.patch b/x11vnc/misc/enhanced_tightvnc_viewer/src/patches/tight-vncviewer-full.patch
index ea9c6fd..a511c03 100644
--- a/x11vnc/misc/enhanced_tightvnc_viewer/src/patches/tight-vncviewer-full.patch
+++ b/x11vnc/misc/enhanced_tightvnc_viewer/src/patches/tight-vncviewer-full.patch
@@ -664,7 +664,7 @@ diff -Naur -X ./exclude vnc_unixsrc.orig/vncviewer/Vncviewer vnc_unixsrc/vncview
+
diff -Naur -X ./exclude vnc_unixsrc.orig/vncviewer/argsresources.c vnc_unixsrc/vncviewer/argsresources.c
--- vnc_unixsrc.orig/vncviewer/argsresources.c 2007-02-04 17:10:31.000000000 -0500
-+++ vnc_unixsrc/vncviewer/argsresources.c 2009-10-26 23:26:12.000000000 -0400
++++ vnc_unixsrc/vncviewer/argsresources.c 2009-11-25 00:02:42.000000000 -0500
@@ -31,9 +31,9 @@
char *fallback_resources[] = {
@@ -739,7 +739,7 @@ diff -Naur -X ./exclude vnc_unixsrc.orig/vncviewer/argsresources.c vnc_unixsrc/v
<ButtonPress>: SendRFBEvent()\\n\
<ButtonRelease>: SendRFBEvent()\\n\
<Motion>: SendRFBEvent()\\n\
-@@ -55,26 +107,129 @@
+@@ -55,26 +107,137 @@
"*serverDialog.dialog.label: VNC server:",
"*serverDialog.dialog.value:",
@@ -785,11 +785,19 @@ diff -Naur -X ./exclude vnc_unixsrc.orig/vncviewer/argsresources.c vnc_unixsrc/v
+ "The above mappings are *always* active in ViewOnly mode, unless you set the\\n"
+ "Escape Keys value to 'never'.\\n"
+ "\\n"
-+ "If the Escape Keys value below is set to 'default' then a default list of\\n"
-+ "of modifier keys is used. For Unix it is: Alt_L,Super_L and for MacOSX it\\n"
-+ "is Control_L,Meta_L. Note: the Super_L key usually has a Windows(TM) Flag\\n"
-+ "on it. Also note the _L and _R mean the key is on the LEFT or RIGHT side\\n"
-+ "of the keyboard.\\n"
++ "x11vnc -appshare hot-keys: x11vnc has a simple application sharing mode\\n"
++ "that enables the viewer-side to move, resize, or raise the remote toplevel\\n"
++ "windows. To enable it, hold down Shift + the Escape Keys and press these:\\n"
++ "\\n"
++ " Arrow keys: move the remote window around in its desktop.\\n"
++ " PageUp/PageDn/Home/End: resize the remote window.\\n"
++ " +/- raise or lower the remote window.\\n"
++ " M or Button1 move win to local position; D or Button3: delete remote win.\\n"
++ "\\n"
++ "If the Escape Keys value below is set to 'default' then a fixed list of\\n"
++ "modifier keys is used. For Unix it is: Alt_L,Super_L and for MacOSX it is\\n"
++ "Control_L,Meta_L. Note: the Super_L key usually has a Windows(TM) Flag.\\n"
++ "Also note the _L and _R mean the key is on the LEFT or RIGHT side of keyboard.\\n"
+ "\\n"
+ "On Unix the default is Alt and Windows keys on Left side of keyboard.\\n"
+ "On MacOSX the default is Control and Command keys on Left side of keyboard.\\n"
@@ -804,7 +812,7 @@ diff -Naur -X ./exclude vnc_unixsrc.orig/vncviewer/argsresources.c vnc_unixsrc/v
+ "\\n"
+ "Current Escape Keys Value:",
+ "*escapeDialog.dialog.value:",
-+ "*escapeDialog.dialog.value.width: 275",
++ "*escapeDialog.dialog.value.width: 280",
+ "*escapeDialog.dialog.value.translations: #override\\n\
+ <KeyRelease>Return: EscapeDialogDone()",
+
@@ -875,7 +883,7 @@ diff -Naur -X ./exclude vnc_unixsrc.orig/vncviewer/argsresources.c vnc_unixsrc/v
"*popup*button1.label: Dismiss popup",
"*popup*button1.translations: #override\\n\
-@@ -84,7 +239,7 @@
+@@ -84,7 +247,7 @@
"*popup*button2.translations: #override\\n\
<Btn1Down>,<Btn1Up>: Quit()",
@@ -884,7 +892,7 @@ diff -Naur -X ./exclude vnc_unixsrc.orig/vncviewer/argsresources.c vnc_unixsrc/v
"*popup*button3.type: toggle",
"*popup*button3.translations: #override\\n\
<Visible>: SetFullScreenState()\\n\
-@@ -105,16 +260,426 @@
+@@ -105,16 +268,426 @@
"*popup*button7.label: Send ctrl-alt-del",
"*popup*button7.translations: #override\\n\
<Btn1Down>,<Btn1Up>: SendRFBEvent(keydown,Control_L)\
@@ -1316,7 +1324,7 @@ diff -Naur -X ./exclude vnc_unixsrc.orig/vncviewer/argsresources.c vnc_unixsrc/v
NULL
};
-@@ -124,7 +689,7 @@
+@@ -124,7 +697,7 @@
* from a dialog box.
*/
@@ -1325,7 +1333,7 @@ diff -Naur -X ./exclude vnc_unixsrc.orig/vncviewer/argsresources.c vnc_unixsrc/v
int vncServerPort = 0;
-@@ -135,6 +700,7 @@
+@@ -135,6 +708,7 @@
*/
AppData appData;
@@ -1333,7 +1341,7 @@ diff -Naur -X ./exclude vnc_unixsrc.orig/vncviewer/argsresources.c vnc_unixsrc/v
static XtResource appDataResourceList[] = {
{"shareDesktop", "ShareDesktop", XtRBool, sizeof(Bool),
-@@ -155,14 +721,44 @@
+@@ -155,14 +729,44 @@
{"userLogin", "UserLogin", XtRString, sizeof(String),
XtOffsetOf(AppData, userLogin), XtRImmediate, (XtPointer) 0},
@@ -1380,7 +1388,7 @@ diff -Naur -X ./exclude vnc_unixsrc.orig/vncviewer/argsresources.c vnc_unixsrc/v
{"nColours", "NColours", XtRInt, sizeof(int),
XtOffsetOf(AppData, nColours), XtRImmediate, (XtPointer) 256},
-@@ -179,9 +775,12 @@
+@@ -179,9 +783,12 @@
{"requestedDepth", "RequestedDepth", XtRInt, sizeof(int),
XtOffsetOf(AppData, requestedDepth), XtRImmediate, (XtPointer) 0},
@@ -1394,7 +1402,7 @@ diff -Naur -X ./exclude vnc_unixsrc.orig/vncviewer/argsresources.c vnc_unixsrc/v
{"wmDecorationWidth", "WmDecorationWidth", XtRInt, sizeof(int),
XtOffsetOf(AppData, wmDecorationWidth), XtRImmediate, (XtPointer) 4},
-@@ -191,6 +790,9 @@
+@@ -191,6 +798,9 @@
{"popupButtonCount", "PopupButtonCount", XtRInt, sizeof(int),
XtOffsetOf(AppData, popupButtonCount), XtRImmediate, (XtPointer) 0},
@@ -1404,7 +1412,7 @@ diff -Naur -X ./exclude vnc_unixsrc.orig/vncviewer/argsresources.c vnc_unixsrc/v
{"debug", "Debug", XtRBool, sizeof(Bool),
XtOffsetOf(AppData, debug), XtRImmediate, (XtPointer) False},
-@@ -206,11 +808,13 @@
+@@ -206,11 +816,13 @@
{"bumpScrollPixels", "BumpScrollPixels", XtRInt, sizeof(int),
XtOffsetOf(AppData, bumpScrollPixels), XtRImmediate, (XtPointer) 20},
@@ -1419,7 +1427,7 @@ diff -Naur -X ./exclude vnc_unixsrc.orig/vncviewer/argsresources.c vnc_unixsrc/v
{"enableJPEG", "EnableJPEG", XtRBool, sizeof(Bool),
XtOffsetOf(AppData, enableJPEG), XtRImmediate, (XtPointer) True},
-@@ -218,14 +822,88 @@
+@@ -218,14 +830,91 @@
{"useRemoteCursor", "UseRemoteCursor", XtRBool, sizeof(Bool),
XtOffsetOf(AppData, useRemoteCursor), XtRImmediate, (XtPointer) True},
@@ -1500,6 +1508,9 @@ diff -Naur -X ./exclude vnc_unixsrc.orig/vncviewer/argsresources.c vnc_unixsrc/v
+ {"recvText", "RecvText", XtRString, sizeof(String),
+ XtOffsetOf(AppData, recvText), XtRImmediate, (XtPointer) 0},
+
++ {"appShare", "AppShare", XtRBool, sizeof(Bool),
++ XtOffsetOf(AppData, appShare), XtRImmediate, (XtPointer) False},
++
+ {"escapeKeys", "EscapeKeys", XtRString, sizeof(String),
+ XtOffsetOf(AppData, escapeKeys), XtRImmediate, (XtPointer) 0},
+
@@ -1510,7 +1521,7 @@ diff -Naur -X ./exclude vnc_unixsrc.orig/vncviewer/argsresources.c vnc_unixsrc/v
};
-@@ -242,8 +920,29 @@
+@@ -242,8 +931,29 @@
{"-noraiseonbeep", "*raiseOnBeep", XrmoptionNoArg, "False"},
{"-passwd", "*passwordFile", XrmoptionSepArg, 0},
{"-user", "*userLogin", XrmoptionSepArg, 0},
@@ -1541,7 +1552,7 @@ diff -Naur -X ./exclude vnc_unixsrc.orig/vncviewer/argsresources.c vnc_unixsrc/v
{"-owncmap", "*forceOwnCmap", XrmoptionNoArg, "True"},
{"-truecolor", "*forceTrueColour", XrmoptionNoArg, "True"},
{"-truecolour", "*forceTrueColour", XrmoptionNoArg, "True"},
-@@ -253,8 +952,27 @@
+@@ -253,8 +963,28 @@
{"-nojpeg", "*enableJPEG", XrmoptionNoArg, "False"},
{"-nocursorshape", "*useRemoteCursor", XrmoptionNoArg, "False"},
{"-x11cursor", "*useX11Cursor", XrmoptionNoArg, "True"},
@@ -1562,6 +1573,7 @@ diff -Naur -X ./exclude vnc_unixsrc.orig/vncviewer/argsresources.c vnc_unixsrc/v
+ {"-termchat", "*termChat", XrmoptionNoArg, "True"},
+ {"-chatonly", "*chatOnly", XrmoptionNoArg, "True"},
+ {"-scale", "*scale", XrmoptionSepArg, 0},
++ {"-appshare", "*appShare", XrmoptionNoArg, "True"},
+ {"-escape", "*escapeKeys", XrmoptionSepArg, 0},
+ {"-sendclipboard", "*sendClipboard", XrmoptionNoArg, "True"},
+ {"-sendalways", "*sendAlways", XrmoptionNoArg, "True"},
@@ -1571,7 +1583,7 @@ diff -Naur -X ./exclude vnc_unixsrc.orig/vncviewer/argsresources.c vnc_unixsrc/v
};
int numCmdLineOptions = XtNumber(cmdLineOptions);
-@@ -267,16 +985,100 @@
+@@ -267,16 +997,100 @@
static XtActionsRec actions[] = {
{"SendRFBEvent", SendRFBEvent},
{"ShowPopup", ShowPopup},
@@ -1672,7 +1684,7 @@ diff -Naur -X ./exclude vnc_unixsrc.orig/vncviewer/argsresources.c vnc_unixsrc/v
};
-@@ -302,11 +1104,14 @@
+@@ -302,11 +1116,14 @@
void
usage(void)
{
@@ -1689,7 +1701,7 @@ diff -Naur -X ./exclude vnc_unixsrc.orig/vncviewer/argsresources.c vnc_unixsrc/v
" %s [<OPTIONS>] -listen [<DISPLAY#>]\n"
" %s -help\n"
"\n"
-@@ -319,7 +1124,7 @@
+@@ -319,7 +1136,7 @@
" -noraiseonbeep\n"
" -passwd <PASSWD-FILENAME> (standard VNC authentication)\n"
" -user <USERNAME> (Unix login authentication)\n"
@@ -1698,7 +1710,7 @@ diff -Naur -X ./exclude vnc_unixsrc.orig/vncviewer/argsresources.c vnc_unixsrc/v
" -bgr233\n"
" -owncmap\n"
" -truecolour\n"
-@@ -332,10 +1137,374 @@
+@@ -332,10 +1149,386 @@
" -autopass\n"
"\n"
"Option names may be abbreviated, e.g. -bgr instead of -bgr233.\n"
@@ -1966,6 +1978,18 @@ diff -Naur -X ./exclude vnc_unixsrc.orig/vncviewer/argsresources.c vnc_unixsrc/v
+ " framebuffer update coming in. Helps 'pipeline' the updates.\n"
+ " This is currently the default, use -nopipeline to disable.\n"
+ "\n"
++ " -appshare Enable features for use with x11vnc's -appshare mode where\n"
++ " instead of sharing the full desktop only the application's\n"
++ " windows are shared. Viewer multilisten mode is used to\n"
++ " create the multiple windows: -multilisten is implied.\n"
++ " See 'x11vnc -appshare -help' more information on the mode.\n"
++ "\n"
++ " Features enabled in the viewer under -appshare are:\n"
++ " Minimum extra text in the title, auto -ycrop is disabled,\n"
++ " x11vnc -remote_prefix X11VNC_APPSHARE_CMD: message channel,\n"
++ " x11vnc initial window position hints. See also Escape Keys\n"
++ " below for additional key and mouse bindings.\n"
++ "\n"
+ " -escape str This sets the 'Escape Keys' modifier sequence and enables\n"
+ " escape keys mode. When the modifier keys escape sequence\n"
+ " is held down, the next keystroke is interpreted locally\n"
@@ -2075,7 +2099,12 @@ diff -Naur -X ./exclude vnc_unixsrc.orig/vncviewer/argsresources.c vnc_unixsrc/v
/*
-@@ -347,73 +1516,223 @@
+@@ -343,77 +1536,234 @@
+ * not already processed by XtVaAppInitialize(). It sets vncServerHost and
+ * vncServerPort and all the fields in appData.
+ */
++extern int saw_appshare;
+
void
GetArgsAndResources(int argc, char **argv)
{
@@ -2163,6 +2192,12 @@ diff -Naur -X ./exclude vnc_unixsrc.orig/vncviewer/argsresources.c vnc_unixsrc/v
+ appData.escapeKeys = strdup(getenv("VNCVIEWER_ESCAPE"));
+ }
+ }
++ if (saw_appshare) {
++ appData.appShare = True;
++ }
++ if (appData.appShare && appData.escapeKeys == NULL) {
++ appData.escapeKeys = strdup("default");
++ }
+ if (appData.escapeKeys != NULL) {
+ appData.escapeActive = True;
+ }
@@ -2356,7 +2391,7 @@ diff -Naur -X ./exclude vnc_unixsrc.orig/vncviewer/argsresources.c vnc_unixsrc/v
}
diff -Naur -X ./exclude vnc_unixsrc.orig/vncviewer/colour.c vnc_unixsrc/vncviewer/colour.c
--- vnc_unixsrc.orig/vncviewer/colour.c 2002-04-30 09:07:31.000000000 -0400
-+++ vnc_unixsrc/vncviewer/colour.c 2007-03-22 21:36:12.000000000 -0400
++++ vnc_unixsrc/vncviewer/colour.c 2009-11-29 22:31:14.000000000 -0500
@@ -31,9 +31,12 @@
#define BGR233_SIZE 256
unsigned long BGR233ToPixel[BGR233_SIZE];
@@ -2375,7 +2410,7 @@ diff -Naur -X ./exclude vnc_unixsrc.orig/vncviewer/colour.c vnc_unixsrc/vncviewe
static void AllocateExactBGR233Colours();
static Bool AllocateBGR233Colour(int r, int g, int b);
-+static void SetupBGR565Map();
++static void SetupBGR565Map(unsigned long red_mask, unsigned long green_mask, unsigned long blue_mask);
+
/*
@@ -2417,7 +2452,7 @@ diff -Naur -X ./exclude vnc_unixsrc.orig/vncviewer/colour.c vnc_unixsrc/vncviewe
+ fprintf(stderr, "Using default colormap and translating from BGR565 (65536 colors). Pixel format:\n");
+ PrintPixelFormat(&myFormat);
+
-+ SetupBGR565Map();
++ SetupBGR565Map(vis->red_mask, vis->green_mask, vis->blue_mask);
+ return;
+ }
+ }
@@ -2547,12 +2582,12 @@ diff -Naur -X ./exclude vnc_unixsrc.orig/vncviewer/colour.c vnc_unixsrc/vncviewe
if (shared[nearestPixel] && !usedAsNearest[nearestPixel])
nSharedUsed++;
usedAsNearest[nearestPixel] = True;
-@@ -433,6 +528,53 @@
+@@ -433,6 +528,57 @@
}
}
+static void
-+SetupBGR565Map()
++SetupBGR565Map(unsigned long red_mask, unsigned long green_mask, unsigned long blue_mask)
+{
+ int r, g, b;
+ int r2, g2, b2;
@@ -2588,7 +2623,11 @@ diff -Naur -X ./exclude vnc_unixsrc.orig/vncviewer/colour.c vnc_unixsrc/vncviewe
+ pixel = (r2 << 16) | (g2 << 8) | (b2 << 0);
+ }
+
-+ idx = (b<<bs) | (g<<gs) | (r<<rs);
++ if (red_mask == 0xff) {
++ idx = (r<<bs) | (g<<gs) | (b<<rs);
++ } else {
++ idx = (b<<bs) | (g<<gs) | (r<<rs);
++ }
+ if (0) fprintf(stderr, "cnt: %5d idx: %5d pixel: 0x%08x\n", cnt, idx, pixel);
+ BGR565ToPixel[idx] = pixel;
+ cnt++;
@@ -2601,7 +2640,7 @@ diff -Naur -X ./exclude vnc_unixsrc.orig/vncviewer/colour.c vnc_unixsrc/vncviewe
/*
* AllocateExactBGR233Colours() attempts to allocate each of the colours in the
-@@ -484,8 +626,13 @@
+@@ -484,8 +630,13 @@
ri = rn;
for (gi = 0; gi < gn; gi++) {
for (bi = 0; bi < bn; bi++) {
@@ -2617,7 +2656,7 @@ diff -Naur -X ./exclude vnc_unixsrc.orig/vncviewer/colour.c vnc_unixsrc/vncviewe
}
}
rn++;
-@@ -496,8 +643,13 @@
+@@ -496,8 +647,13 @@
gi = gn;
for (ri = 0; ri < rn; ri++) {
for (bi = 0; bi < bn; bi++) {
@@ -2633,7 +2672,7 @@ diff -Naur -X ./exclude vnc_unixsrc.orig/vncviewer/colour.c vnc_unixsrc/vncviewe
}
}
gn++;
-@@ -507,8 +659,13 @@
+@@ -507,8 +663,13 @@
bi = bn;
for (ri = 0; ri < rn; ri++) {
for (gi = 0; gi < gn; gi++) {
@@ -2649,7 +2688,7 @@ diff -Naur -X ./exclude vnc_unixsrc.orig/vncviewer/colour.c vnc_unixsrc/vncviewe
}
}
bn++;
-@@ -529,18 +686,36 @@
+@@ -529,18 +690,36 @@
AllocateBGR233Colour(int r, int g, int b)
{
XColor c;
@@ -3687,8 +3726,8 @@ diff -Naur -X ./exclude vnc_unixsrc.orig/vncviewer/cursor.c vnc_unixsrc/vncviewe
-
diff -Naur -X ./exclude vnc_unixsrc.orig/vncviewer/desktop.c vnc_unixsrc/vncviewer/desktop.c
--- vnc_unixsrc.orig/vncviewer/desktop.c 2004-05-28 13:29:29.000000000 -0400
-+++ vnc_unixsrc/vncviewer/desktop.c 2009-10-16 22:04:39.000000000 -0400
-@@ -28,28 +28,487 @@
++++ vnc_unixsrc/vncviewer/desktop.c 2009-11-29 22:05:55.000000000 -0500
+@@ -28,28 +28,498 @@
#include <X11/extensions/XShm.h>
#endif
@@ -3704,6 +3743,10 @@ diff -Naur -X ./exclude vnc_unixsrc.orig/vncviewer/desktop.c vnc_unixsrc/vncview
+Cursor waitCursor = None;
Widget form, viewport, desktop;
++int appshare_0_hint = -10000;
++int appshare_x_hint = -10000;
++int appshare_y_hint = -10000;
++
static Bool modifierPressed[256];
-static XImage *image = NULL;
@@ -3914,10 +3957,13 @@ diff -Naur -X ./exclude vnc_unixsrc.orig/vncviewer/desktop.c vnc_unixsrc/vncview
+ /* now destroy image */
+ if (image && image->data) {
+ if (UsingShm()) {
-+ ShmCleanup();
++ ShmDetach();
+ }
+ XDestroyImage(image);
+ fprintf(stderr, "rescale_image: destroyed 'image'\n");
++ if (UsingShm()) {
++ ShmCleanup();
++ }
+ image = NULL;
+ }
+ if (image_ycrop && image_ycrop->data) {
@@ -4056,6 +4102,7 @@ diff -Naur -X ./exclude vnc_unixsrc.orig/vncviewer/desktop.c vnc_unixsrc/vncview
+ fprintf(stderr, "try_create_image: created *non-shm* image: %dx%d\n", image->width, image->height);
+ }
+ }
++ fprintf(stderr, "try_create_image: image->bytes_per_line: %d\n", image->bytes_per_line);
+}
+
+void create_image() {
@@ -4167,6 +4214,9 @@ diff -Naur -X ./exclude vnc_unixsrc.orig/vncviewer/desktop.c vnc_unixsrc/vncview
+}
+
+void check_tall(void) {
++ if (appData.appShare) {
++ return;
++ }
+ if (! appData.yCrop) {
+ int w = si.framebufferWidth;
+ int h = si.framebufferHeight;
@@ -4180,7 +4230,7 @@ diff -Naur -X ./exclude vnc_unixsrc.orig/vncviewer/desktop.c vnc_unixsrc/vncview
/*
* DesktopInitBeforeRealization creates the "desktop" widget and the viewport
-@@ -59,91 +518,1016 @@
+@@ -59,92 +529,1017 @@
void
DesktopInitBeforeRealization()
{
@@ -4300,8 +4350,8 @@ diff -Naur -X ./exclude vnc_unixsrc.orig/vncviewer/desktop.c vnc_unixsrc/vncview
+ float t = 0.0;
+ XtVaSetValues(w, XtNtopOfThumb, &t, NULL);
+ }
-+}
-+
+ }
+
+static XtCallbackProc Jumped(Widget w, XtPointer closure, XtPointer call_data) {
+ float top = *((float *) call_data);
+ Position x, y;
@@ -4319,8 +4369,8 @@ diff -Naur -X ./exclude vnc_unixsrc.orig/vncviewer/desktop.c vnc_unixsrc/vncview
+ XtVaSetValues(w, XtNtopOfThumb, *(XtArgVal*)&t, XtNshown, *(XtArgVal*)&s, NULL);
+ }
+ }
- }
-
++}
++
+extern double dnow(void);
+
+void check_things() {
@@ -4512,7 +4562,8 @@ diff -Naur -X ./exclude vnc_unixsrc.orig/vncviewer/desktop.c vnc_unixsrc/vncview
+ appData.useXserverBackingStore = False;
+ }
+ }
-+
+
+- XChangeWindowAttributes(dpy, desktopWin, valuemask, &attr);
+ if (appData.useXserverBackingStore) {
+ XtVaGetApplicationResources(desktop, (XtPointer)&attr.backing_store,
+ desktopBackingStoreResources, 1, NULL);
@@ -4564,9 +4615,9 @@ diff -Naur -X ./exclude vnc_unixsrc.orig/vncviewer/desktop.c vnc_unixsrc/vncview
+ }
+ FreeX11Cursor();
+ FreeSoftCursor();
-+}
-+
-+
+ }
+
+
+#define CEIL(x) ( (double) ((int) (x)) == (x) ? \
+ (double) ((int) (x)) : (double) ((int) (x) + 1) )
+#define FLOOR(x) ( (double) ((int) (x)) )
@@ -4586,15 +4637,14 @@ diff -Naur -X ./exclude vnc_unixsrc.orig/vncviewer/desktop.c vnc_unixsrc/vncview
+
+int scale_round(int len, double fac) {
+ double eps = 0.000001;
-
-- XChangeWindowAttributes(dpy, desktopWin, valuemask, &attr);
++
+ len = (int) (len * fac + eps);
+ if (len < 1) {
+ len = 1;
+ }
+ return len;
- }
-
++}
++
+static void scale_rect(double factor_x, double factor_y, int blend, int interpolate,
+ int *px, int *py, int *pw, int *ph, int solid) {
+
@@ -5256,10 +5306,11 @@ diff -Naur -X ./exclude vnc_unixsrc.orig/vncviewer/desktop.c vnc_unixsrc/vncview
+}
+
+#define PR_EXPOSE fprintf(stderr, "Expose: %04dx%04d+%04d+%04d %04d/%04d/%04d now: %8.4f rescale: %8.4f fullscreen: %8.4f\n", width, height, x, y, si.framebufferWidth, appData.yCrop, si.framebufferHeight, now - start_time, now - last_rescale, now - last_fullscreen);
-
++
/*
* HandleBasicDesktopEvent - deal with expose and leave events.
-@@ -152,41 +1536,404 @@
+ */
+@@ -152,42 +1547,528 @@
static void
HandleBasicDesktopEvent(Widget w, XtPointer ptr, XEvent *ev, Boolean *cont)
{
@@ -5301,13 +5352,6 @@ diff -Naur -X ./exclude vnc_unixsrc.orig/vncviewer/desktop.c vnc_unixsrc/vncview
+ if (y + height < si.framebufferHeight) height++;
+ }
+ }
-+
-+ if (x + width > si.framebufferWidth) {
-+ width = si.framebufferWidth - x;
-+ if (width <= 0) {
-+ break;
-+ }
-+ }
- if (ev->xexpose.x + ev->xexpose.width > si.framebufferWidth) {
- ev->xexpose.width = si.framebufferWidth - ev->xexpose.x;
@@ -5322,6 +5366,13 @@ diff -Naur -X ./exclude vnc_unixsrc.orig/vncviewer/desktop.c vnc_unixsrc/vncview
- SendFramebufferUpdateRequest(ev->xexpose.x, ev->xexpose.y,
- ev->xexpose.width, ev->xexpose.height, False);
- break;
++ if (x + width > si.framebufferWidth) {
++ width = si.framebufferWidth - x;
++ if (width <= 0) {
++ break;
++ }
++ }
++
+ if (y + height > si.framebufferHeight) {
+ height = si.framebufferHeight - y;
+ if (height <= 0) {
@@ -5405,6 +5456,79 @@ diff -Naur -X ./exclude vnc_unixsrc.orig/vncviewer/desktop.c vnc_unixsrc/vncview
+extern Position desktopX, desktopY;
+
++void x11vnc_appshare(char *cmd) {
++ char send[200], str[100];
++ char *id = "cmd=id_cmd";
++ int m_big = 80, m_fine = 15;
++ int resize = 100, db = 0;
++
++ if (getenv("X11VNC_APPSHARE_DEBUG")) {
++ db = atoi(getenv("X11VNC_APPSHARE_DEBUG"));
++ }
++
++ if (db) fprintf(stderr, "x11vnc_appshare: cmd=%s\n", cmd);
++
++ str[0] = '\0';
++
++ if (!strcmp(cmd, "left")) {
++ sprintf(str, "%s:move:-%d+0", id, m_big);
++ } else if (!strcmp(cmd, "right")) {
++ sprintf(str, "%s:move:+%d+0", id, m_big);
++ } else if (!strcmp(cmd, "up")) {
++ sprintf(str, "%s:move:+0-%d", id, m_big);
++ } else if (!strcmp(cmd, "down")) {
++ sprintf(str, "%s:move:+0+%d", id, m_big);
++ } else if (!strcmp(cmd, "left-fine")) {
++ sprintf(str, "%s:move:-%d+0", id, m_fine);
++ } else if (!strcmp(cmd, "right-fine")) {
++ sprintf(str, "%s:move:+%d+0", id, m_fine);
++ } else if (!strcmp(cmd, "up-fine")) {
++ sprintf(str, "%s:move:+0-%d", id, m_fine);
++ } else if (!strcmp(cmd, "down-fine")) {
++ sprintf(str, "%s:move:+0+%d", id, m_fine);
++ } else if (!strcmp(cmd, "taller")) {
++ sprintf(str, "%s:resize:+0+%d", id, resize);
++ } else if (!strcmp(cmd, "shorter")) {
++ sprintf(str, "%s:resize:+0-%d", id, resize);
++ } else if (!strcmp(cmd, "wider")) {
++ sprintf(str, "%s:resize:+%d+0", id, resize);
++ } else if (!strcmp(cmd, "narrower")) {
++ sprintf(str, "%s:resize:-%d+0", id, resize);
++ } else if (!strcmp(cmd, "lower")) {
++ sprintf(str, "%s:lower", id);
++ } else if (!strcmp(cmd, "raise")) {
++ sprintf(str, "%s:raise", id);
++ } else if (!strcmp(cmd, "delete")) {
++ sprintf(str, "%s:wm_delete", id);
++ } else if (!strcmp(cmd, "position")) {
++ Position x, y;
++ int xi, yi;
++
++ XtVaGetValues(toplevel, XtNx, &x, XtNy, &y, NULL);
++ xi = (int) x;
++ yi = (int) y;
++ if (appData.scale) {
++ double fx = 1.0, fy = 1.0;
++ get_scale_values(&fx, &fy);
++ if (fx > 0.0 && fy > 0.0) {
++ xi /= fx;
++ yi /= fx;
++ }
++ }
++ sprintf(str, "%s:geom:0x0+%d+%d", id, xi, yi);
++ fprintf(stderr, "str=%s\n", str);
++ }
++ if (strcmp(str, "")) {
++ Bool vo = appData.viewOnly;
++ strcpy(send, "X11VNC_APPSHARE_CMD:");
++ strcat(send, str);
++ if (db) fprintf(stderr, "x11vnc_appshare: send=%s\n", send);
++ if (vo) appData.viewOnly = False;
++ SendClientCutText(send, strlen(send));
++ if (vo) appData.viewOnly = True;
++ }
++}
++
+void scroll_desktop(int horiz, int vert, double amount) {
+ Dimension h, w;
+ Position x, y;
@@ -5424,7 +5548,7 @@ diff -Naur -X ./exclude vnc_unixsrc.orig/vncviewer/desktop.c vnc_unixsrc/vncview
+
+ x2 = -x;
+ y2 = -y;
-+
+
+ if (amount == -1.0) {
+ int dx = horiz;
+ int dy = vert;
@@ -5591,6 +5715,9 @@ diff -Naur -X ./exclude vnc_unixsrc.orig/vncviewer/desktop.c vnc_unixsrc/vncview
+ p = strtok(s, ",+ ");
+ while (p) {
+ ks = XStringToKeysym(p);
++ if (ks == XK_Shift_L || ks == XK_Shift_R) {
++ putenv("NO_X11VNC_APPSHARE=1");
++ }
+ if (k >= 8) {
+ fprintf(stderr, "EscapeKeys: more than 8 modifier keys.\n");
+ failed = 1;
@@ -5683,10 +5810,58 @@ diff -Naur -X ./exclude vnc_unixsrc.orig/vncviewer/desktop.c vnc_unixsrc/vncview
+
+ return pressed;
+}
-
++
++static int shift_is_down(void) {
++ int shift_down = 0;
++ KeyCode kc;
++
++ if (appData.viewOnly) {
++ int i, k;
++ char keys[32];
++ int keystate[256];
++
++ XQueryKeymap(dpy, keys);
++ for (i=0; i<32; i++) {
++ char c = keys[i];
++
++ for (k=0; k < 8; k++) {
++ if (c & 0x1) {
++ keystate[8*i + k] = 1;
++ } else {
++ keystate[8*i + k] = 0;
++ }
++ c = c >> 1;
++ }
++ }
++
++ kc = XKeysymToKeycode(dpy, XK_Shift_L);
++ if (kc != NoSymbol && keystate[kc]) {
++ shift_down = 1;
++ } else {
++ kc = XKeysymToKeycode(dpy, XK_Shift_R);
++ if (kc != NoSymbol && keystate[kc]) {
++ shift_down = 1;
++ }
++ }
++ return shift_down;
++ } else {
++ kc = XKeysymToKeycode(dpy, XK_Shift_L);
++ if (kc != NoSymbol && modifierPressed[kc]) {
++ shift_down = 1;
++ } else {
++ kc = XKeysymToKeycode(dpy, XK_Shift_R);
++ if (kc != NoSymbol && modifierPressed[kc]) {
++ shift_down = 1;
++ }
++ }
++ return shift_down;
++ }
++}
++
/*
* SendRFBEvent is an action which sends an RFB event. It can be used in two
-@@ -201,127 +1948,324 @@
+ * ways. Without any parameters it simply sends an RFB event corresponding to
+@@ -201,127 +2082,406 @@
* button2 down, 3 for both, etc).
*/
@@ -5713,6 +5888,7 @@ diff -Naur -X ./exclude vnc_unixsrc.orig/vncviewer/desktop.c vnc_unixsrc/vncview
+ int buttonMask, x, y;
+ int do_escape;
+ static int db = -1;
++ char *ek = appData.escapeKeys;
+
+ if (db < 0) {
+ if (getenv("SSVNC_DEBUG_ESCAPE_KEYS")) {
@@ -5749,7 +5925,7 @@ diff -Naur -X ./exclude vnc_unixsrc.orig/vncviewer/desktop.c vnc_unixsrc/vncview
+ }
+
+ do_escape = 0;
-+ if (appData.escapeKeys != NULL && !strcasecmp(appData.escapeKeys, "never")) {
++ if (ek != NULL && (ek[0] == 'n' || ek[0] == 'N') && !strcasecmp(ek, "never")) {
+ ;
+ } else if (appData.viewOnly) {
+ do_escape = 1;
@@ -5783,11 +5959,18 @@ diff -Naur -X ./exclude vnc_unixsrc.orig/vncviewer/desktop.c vnc_unixsrc/vncview
+ if (!do_escape) {
+ escape_drag_in_progress = 0;
+ }
-
-- if (appData.viewOnly) return;
++ if (db) fprintf(stderr, "do_escape: %d\n", do_escape);
++
+ if (do_escape) {
+ int W = si.framebufferWidth;
+ int H = si.framebufferHeight;
++ int shift_down = 0;
++
++ if (!getenv("NO_X11VNC_APPSHARE")) {
++ shift_down = shift_is_down();
++ }
++ if (db) fprintf(stderr, "shift_down: %d\n", shift_down);
++
+ if (*num_params != 0) {
+ if (strcasecmp(params[0],"fbupdate") == 0) {
+ SendFramebufferUpdateRequest(0, 0, W, H, False);
@@ -5797,7 +5980,11 @@ diff -Naur -X ./exclude vnc_unixsrc.orig/vncviewer/desktop.c vnc_unixsrc/vncview
+ XButtonEvent *b = (XButtonEvent *) ev;
+ if (db) fprintf(stderr, "ButtonRelease: %d %d %d\n", b->x_root, b->y_root, b->state);
+ if (b->button == 3) {
-+ ShowPopup(w, ev, params, num_params);
++ if (shift_down) {
++ x11vnc_appshare("delete");
++ } else {
++ ShowPopup(w, ev, params, num_params);
++ }
+ } else if (escape_drag_in_progress && b->button == 1) {
+ escape_drag_in_progress = 0;
+ }
@@ -5805,9 +5992,13 @@ diff -Naur -X ./exclude vnc_unixsrc.orig/vncviewer/desktop.c vnc_unixsrc/vncview
+ XButtonEvent *b = (XButtonEvent *) ev;
+ if (db) fprintf(stderr, "ButtonPress: %d %d %d\n", b->x_root, b->y_root, b->state);
+ if (b->button == 1) {
-+ escape_drag_in_progress = 1;
-+ last_x = b->x_root;
-+ last_y = b->y_root;
++ if (shift_down) {
++ x11vnc_appshare("position");
++ } else {
++ escape_drag_in_progress = 1;
++ last_x = b->x_root;
++ last_y = b->y_root;
++ }
+ } else {
+ escape_drag_in_progress = 0;
+ }
@@ -5821,6 +6012,7 @@ diff -Naur -X ./exclude vnc_unixsrc.orig/vncviewer/desktop.c vnc_unixsrc/vncview
+ }
+ } else if (ev->type == KeyRelease) {
+ int did = 1;
++
+ XLookupString(&ev->xkey, keyname, 256, &ks, NULL);
+ if (ks == XK_1 || ks == XK_KP_1) {
+ set_server_scale(1);
@@ -5864,34 +6056,98 @@ diff -Naur -X ./exclude vnc_unixsrc.orig/vncviewer/desktop.c vnc_unixsrc/vncview
+ SetEscapeKeys(w, ev, params, num_params);
+ } else if (ks == XK_g || ks == XK_G) {
+ ToggleXGrab(w, ev, params, num_params);
++ } else if (ks == XK_D) {
++ if (shift_down || appData.appShare) {
++ x11vnc_appshare("delete");
++ }
++ } else if (ks == XK_M) {
++ if (shift_down || appData.appShare) {
++ x11vnc_appshare("position");
++ }
+ } else if (ks == XK_Left) {
-+ scroll_desktop(-1, 0, 0.1);
++ if (shift_down) {
++ x11vnc_appshare("left");
++ } else {
++ scroll_desktop(-1, 0, 0.1);
++ }
+ } else if (ks == XK_Right) {
-+ scroll_desktop(+1, 0, 0.1);
++ if (shift_down) {
++ x11vnc_appshare("right");
++ } else {
++ scroll_desktop(+1, 0, 0.1);
++ }
+ } else if (ks == XK_Up) {
-+ scroll_desktop(0, +1, 0.1);
++ if (shift_down) {
++ x11vnc_appshare("up");
++ } else {
++ scroll_desktop(0, +1, 0.1);
++ }
+ } else if (ks == XK_Down) {
-+ scroll_desktop(0, -1, 0.1);
++ if (shift_down) {
++ x11vnc_appshare("down");
++ } else {
++ scroll_desktop(0, -1, 0.1);
++ }
+ } else if (ks == XK_KP_Left) {
-+ scroll_desktop(-1, 0, 0.0);
++ if (shift_down) {
++ x11vnc_appshare("left-fine");
++ } else {
++ scroll_desktop(-1, 0, 0.0);
++ }
+ } else if (ks == XK_KP_Right) {
-+ scroll_desktop(+1, 0, 0.0);
++ if (shift_down) {
++ x11vnc_appshare("right-fine");
++ } else {
++ scroll_desktop(+1, 0, 0.0);
++ }
+ } else if (ks == XK_KP_Up) {
-+ scroll_desktop(0, +1, 0.0);
++ if (shift_down) {
++ x11vnc_appshare("up-fine");
++ } else {
++ scroll_desktop(0, +1, 0.0);
++ }
+ } else if (ks == XK_KP_Down) {
-+ scroll_desktop(0, -1, 0.0);
++ if (shift_down) {
++ x11vnc_appshare("down-fine");
++ } else {
++ scroll_desktop(0, -1, 0.0);
++ }
+ } else if (ks == XK_Next || ks == XK_KP_Next) {
-+ scroll_desktop(0, -1, 1.0);
++ if (shift_down && ks == XK_Next) {
++ x11vnc_appshare("shorter");
++ } else {
++ scroll_desktop(0, -1, 1.0);
++ }
+ } else if (ks == XK_Prior || ks == XK_KP_Prior) {
-+ scroll_desktop(0, +1, 1.0);
++ if (shift_down && ks == XK_Prior) {
++ x11vnc_appshare("taller");
++ } else {
++ scroll_desktop(0, +1, 1.0);
++ }
+ } else if (ks == XK_End || ks == XK_KP_End) {
-+ scroll_desktop(+1, 0, 1.0);
++ if (shift_down && ks == XK_End) {
++ x11vnc_appshare("narrower");
++ } else {
++ scroll_desktop(+1, 0, 1.0);
++ }
+ } else if (ks == XK_Home || ks == XK_KP_Home) {
-+ scroll_desktop(-1, 0, 1.0);
++ if (shift_down && ks == XK_Home) {
++ x11vnc_appshare("wider");
++ } else {
++ scroll_desktop(-1, 0, 1.0);
++ }
+ } else if (ks == XK_equal || ks == XK_plus) {
-+ scale_desktop(1, 0.1);
++ if (shift_down) {
++ x11vnc_appshare("raise");
++ } else {
++ scale_desktop(1, 0.1);
++ }
+ } else if (ks == XK_underscore || ks == XK_minus) {
-+ scale_desktop(0, 0.1);
++ if (shift_down) {
++ x11vnc_appshare("lower");
++ } else {
++ scale_desktop(0, 0.1);
++ }
+ } else {
+ did = 0;
+ }
@@ -5907,7 +6163,8 @@ diff -Naur -X ./exclude vnc_unixsrc.orig/vncviewer/desktop.c vnc_unixsrc/vncview
+ if (appData.viewOnly) {
+ return;
+ }
-+
+
+- if (appData.viewOnly) return;
+ if (*num_params != 0) {
+ if (strncasecmp(params[0],"key",3) == 0) {
+ if (*num_params != 2) {
@@ -6068,10 +6325,10 @@ diff -Naur -X ./exclude vnc_unixsrc.orig/vncviewer/desktop.c vnc_unixsrc/vncview
- }
- return;
- }
+-
+- switch (ev->type) {
+ XLookupString(&ev->xkey, keyname, 256, &ks, NULL);
-- switch (ev->type) {
--
- case MotionNotify:
- while (XCheckTypedWindowEvent(dpy, desktopWin, MotionNotify, ev))
- ; /* discard all queued motion notify events */
@@ -6119,7 +6376,7 @@ diff -Naur -X ./exclude vnc_unixsrc.orig/vncviewer/desktop.c vnc_unixsrc/vncview
}
-@@ -329,26 +2273,207 @@
+@@ -329,26 +2489,207 @@
* CreateDotCursor.
*/
@@ -6186,8 +6443,7 @@ diff -Naur -X ./exclude vnc_unixsrc.orig/vncviewer/desktop.c vnc_unixsrc/vncview
+ cursor = XCreatePixmapCursor(dpy, src, msk, &fg, &bg, 1, 1);
+ XFreePixmap(dpy, src);
+ XFreePixmap(dpy, msk);
-
-- return cursor;
++
+ return cursor;
+}
+#endif
@@ -6254,7 +6510,8 @@ diff -Naur -X ./exclude vnc_unixsrc.orig/vncviewer/desktop.c vnc_unixsrc/vncview
+ if (appData.chatOnly) {
+ return;
+ }
-+
+
+- return cursor;
+ if (widthInBytes > buflen || !buf) {
+ if (buf) {
+ free(buf);
@@ -6343,7 +6600,7 @@ diff -Naur -X ./exclude vnc_unixsrc.orig/vncviewer/desktop.c vnc_unixsrc/vncview
}
-@@ -359,38 +2484,37 @@
+@@ -359,38 +2700,39 @@
void
CopyDataToScreen(char *buf, int x, int y, int width, int height)
{
@@ -6389,6 +6646,8 @@ diff -Naur -X ./exclude vnc_unixsrc.orig/vncviewer/desktop.c vnc_unixsrc/vncview
+ int scrWidthInBytes = si.framebufferWidth * myFormat.bitsPerPixel / 8;
+ XImage *im = image_scale ? image_scale : image;
+
++ if (scrWidthInBytes != im->bytes_per_line) scrWidthInBytes = im->bytes_per_line;
++
+ char *scr = (im->data + y * scrWidthInBytes
+ + x * myFormat.bitsPerPixel / 8);
+
@@ -6411,7 +6670,7 @@ diff -Naur -X ./exclude vnc_unixsrc.orig/vncviewer/desktop.c vnc_unixsrc/vncview
}
-@@ -401,62 +2525,297 @@
+@@ -401,62 +2743,339 @@
static void
CopyBGR233ToScreen(CARD8 *buf, int x, int y, int width, int height)
{
@@ -6424,16 +6683,19 @@ diff -Naur -X ./exclude vnc_unixsrc.orig/vncviewer/desktop.c vnc_unixsrc/vncview
- CARD8 *scr8 = ((CARD8 *)image->data) + y * si.framebufferWidth + x;
- CARD16 *scr16 = ((CARD16 *)image->data) + y * si.framebufferWidth + x;
- CARD32 *scr32 = ((CARD32 *)image->data) + y * si.framebufferWidth + x;
++ XImage *im = image_scale ? image_scale : image;
+ int p, q;
+ int xoff = 7 - (x & 7);
+ int xcur;
+ int fbwb = si.framebufferWidth / 8;
-+ XImage *im = image_scale ? image_scale : image;
-+ CARD8 *scr1 = ((CARD8 *)im->data) + y * fbwb + x / 8;
-+ CARD8 *scrt;
-+ CARD8 *scr8 = ( (CARD8 *)im->data) + y * si.framebufferWidth + x;
-+ CARD16 *scr16 = ((CARD16 *)im->data) + y * si.framebufferWidth + x;
-+ CARD32 *scr32 = ((CARD32 *)im->data) + y * si.framebufferWidth + x;
++ int src_width8 = im->bytes_per_line/1;
++ int src_width16 = im->bytes_per_line/2;
++ int src_width32 = im->bytes_per_line/4;
++ CARD8 *src1 = ((CARD8 *)im->data) + y * fbwb + x / 8;
++ CARD8 *srct;
++ CARD8 *src8 = ( (CARD8 *)im->data) + y * src_width8 + x;
++ CARD16 *src16 = ((CARD16 *)im->data) + y * src_width16 + x;
++ CARD32 *src32 = ((CARD32 *)im->data) + y * src_width32 + x;
+ int b0, b1, b2;
- switch (visbpp) {
@@ -6488,35 +6750,35 @@ diff -Naur -X ./exclude vnc_unixsrc.orig/vncviewer/desktop.c vnc_unixsrc/vncview
+ case 1:
+ for (q = 0; q < height; q++) {
+ xcur = xoff;
-+ scrt = scr1;
++ srct = src1;
+ for (p = 0; p < width; p++) {
-+ *scrt = ((*scrt & ~(1 << xcur))
++ *srct = ((*srct & ~(1 << xcur))
+ | (BGR233ToPixel[*(buf++)] << xcur));
+
+ if (xcur-- == 0) {
+ xcur = 7;
-+ scrt++;
++ srct++;
+ }
+ }
-+ scr1 += fbwb;
++ src1 += fbwb;
+ }
+ break;
+
+ case 8:
+ for (q = 0; q < height; q++) {
+ for (p = 0; p < width; p++) {
-+ *(scr8++) = BGR233ToPixel[*(buf++)];
++ *(src8++) = BGR233ToPixel[*(buf++)];
+ }
-+ scr8 += si.framebufferWidth - width;
++ src8 += src_width8 - width;
+ }
+ break;
+
+ case 16:
+ for (q = 0; q < height; q++) {
+ for (p = 0; p < width; p++) {
-+ *(scr16++) = BGR233ToPixel[*(buf++)];
++ *(src16++) = BGR233ToPixel[*(buf++)];
+ }
-+ scr16 += si.framebufferWidth - width;
++ src16 += src_width16 - width;
+ }
+ break;
+
@@ -6526,25 +6788,25 @@ diff -Naur -X ./exclude vnc_unixsrc.orig/vncviewer/desktop.c vnc_unixsrc/vncview
+ } else {
+ b0 = 2; b1 = 1; b2 = 0;
+ }
-+ scr8 = ((CARD8 *)im->data) + (y * si.framebufferWidth + x) * 3;
++ src8 = ((CARD8 *)im->data) + (y * si.framebufferWidth + x) * 3;
+ for (q = 0; q < height; q++) {
+ for (p = 0; p < width; p++) {
+ CARD32 v = BGR233ToPixel[*(buf++)];
-+ *(scr8 + b0) = (unsigned char) ((v & 0x0000ff) >> 0);
-+ *(scr8 + b1) = (unsigned char) ((v & 0x00ff00) >> 8);
-+ *(scr8 + b2) = (unsigned char) ((v & 0xff0000) >> 16);
-+ scr8 += 3;
++ *(src8 + b0) = (unsigned char) ((v & 0x0000ff) >> 0);
++ *(src8 + b1) = (unsigned char) ((v & 0x00ff00) >> 8);
++ *(src8 + b2) = (unsigned char) ((v & 0xff0000) >> 16);
++ src8 += 3;
+ }
-+ scr8 += (si.framebufferWidth - width) * 3;
++ src8 += (si.framebufferWidth - width) * 3;
+ }
+ break;
+
+ case 32:
+ for (q = 0; q < height; q++) {
+ for (p = 0; p < width; p++) {
-+ *(scr32++) = BGR233ToPixel[*(buf++)];
++ *(src32++) = BGR233ToPixel[*(buf++)];
+ }
-+ scr32 += si.framebufferWidth - width;
++ src32 += src_width32 - width;
+ }
+ break;
+ }
@@ -6556,7 +6818,7 @@ diff -Naur -X ./exclude vnc_unixsrc.orig/vncviewer/desktop.c vnc_unixsrc/vncview
+ int p, q;
+ int b0, b1, b2;
+ XImage *im = image_scale ? image_scale : image;
-+ unsigned char *scr= (unsigned char *)im->data + (y * si.framebufferWidth + x) * 3;
++ unsigned char *src= (unsigned char *)im->data + (y * si.framebufferWidth + x) * 3;
+
+ if (isLSB) {
+ b0 = 0; b1 = 1; b2 = 2;
@@ -6568,12 +6830,12 @@ diff -Naur -X ./exclude vnc_unixsrc.orig/vncviewer/desktop.c vnc_unixsrc/vncview
+ for (q = 0; q < height; q++) {
+ for (p = 0; p < width; p++) {
+ CARD32 v = BGR565ToPixel[*(buf++)];
-+ *(scr + b0) = (unsigned char) ((v & 0x0000ff) >> 0);
-+ *(scr + b1) = (unsigned char) ((v & 0x00ff00) >> 8);
-+ *(scr + b2) = (unsigned char) ((v & 0xff0000) >> 16);
-+ scr += 3;
++ *(src + b0) = (unsigned char) ((v & 0x0000ff) >> 0);
++ *(src + b1) = (unsigned char) ((v & 0x00ff00) >> 8);
++ *(src + b2) = (unsigned char) ((v & 0xff0000) >> 16);
++ src += 3;
+ }
-+ scr += (si.framebufferWidth - width) * 3;
++ src += (si.framebufferWidth - width) * 3;
+ }
+}
+
@@ -6582,7 +6844,8 @@ diff -Naur -X ./exclude vnc_unixsrc.orig/vncviewer/desktop.c vnc_unixsrc/vncview
+{
+ int p, q;
+ XImage *im = image_scale ? image_scale : image;
-+ CARD32 *scr32 = ((CARD32 *)im->data) + y * si.framebufferWidth + x;
++ int src_width32 = im->bytes_per_line/4;
++ CARD32 *src32 = ((CARD32 *)im->data) + y * src_width32 + x;
+
+ if (visbpp == 24) {
+ BGR565_24bpp(buf, x, y, width, height);
@@ -6592,15 +6855,15 @@ diff -Naur -X ./exclude vnc_unixsrc.orig/vncviewer/desktop.c vnc_unixsrc/vncview
+ /* case 32: */
+ for (q = 0; q < height; q++) {
+ for (p = 0; p < width; p++) {
-+ *(scr32++) = BGR565ToPixel[*(buf++)];
++ *(src32++) = BGR565ToPixel[*(buf++)];
+ }
-+ scr32 += si.framebufferWidth - width;
++ src32 += src_width32 - width;
+ }
+}
+
+static void reset_image(void) {
+ if (UsingShm()) {
-+ ShmCleanup();
++ ShmDetach();
+ }
+ if (image && image->data) {
+ XDestroyImage(image);
@@ -6618,6 +6881,9 @@ diff -Naur -X ./exclude vnc_unixsrc.orig/vncviewer/desktop.c vnc_unixsrc/vncview
+ }
+ image_scale = NULL;
+
++ if (UsingShm()) {
++ ShmCleanup();
++ }
+ create_image();
+ XFlush(dpy);
+}
@@ -6626,6 +6892,8 @@ diff -Naur -X ./exclude vnc_unixsrc.orig/vncviewer/desktop.c vnc_unixsrc/vncview
+ int w, w0, h, h0, x, y, dw, dh;
+ int fs = 0;
+ int autoscale = 0;
++ Position x_orig, y_orig;
++ Dimension w_orig, h_orig;
+
+ if (!appData.fullScreen && appData.scale != NULL && !strcmp(appData.scale, "auto")) {
+ autoscale = 1;
@@ -6633,6 +6901,9 @@ diff -Naur -X ./exclude vnc_unixsrc.orig/vncviewer/desktop.c vnc_unixsrc/vncview
+
+ fprintf(stderr, "ReDoDesktop: ycrop: %d\n", appData.yCrop);
+
++ XtVaGetValues(toplevel, XtNx, &x_orig, XtNy, &y_orig, NULL);
++ XtVaGetValues(toplevel, XtNheight, &h_orig, XtNwidth, &w_orig, NULL);
++
+ check_tall();
+
+ if (appData.yCrop) {
@@ -6739,9 +7010,6 @@ diff -Naur -X ./exclude vnc_unixsrc.orig/vncviewer/desktop.c vnc_unixsrc/vncview
+
+ XtVaSetValues(desktop, XtNwidth, w0, XtNheight, h0, NULL);
+
-+ x = (dpyWidth - w - dw)/2;
-+ y = (dpyHeight - h - dh)/2;
-+
+ XtResizeWidget(desktop, w0, h0, 0);
+
+ if (appData.yCrop > 0) {
@@ -6753,7 +7021,40 @@ diff -Naur -X ./exclude vnc_unixsrc.orig/vncviewer/desktop.c vnc_unixsrc/vncview
+ XtVaSetValues(form, XtNmaxHeight, ycrop, NULL);
+ }
+
++ x = (dpyWidth - w - dw)/2;
++ y = (dpyHeight - h - dh)/2;
++
+ if (!autoscale) {
++
++ if (!getenv("VNCVIEWER_ALWAYS_RECENTER")) {
++ int x_cm_old, y_cm_old;
++ int x_cm_new, y_cm_new;
++ int x_try, y_try;
++
++ x_cm_old = (int) x_orig + ((int) w_orig)/2;
++ y_cm_old = (int) y_orig + ((int) h_orig)/2;
++
++ x_cm_new = dpyWidth/2;
++ y_cm_new = dpyHeight/2;
++
++ x_try = x + (x_cm_old - x_cm_new);
++ y_try = y + (y_cm_old - y_cm_new);
++ if (x_try < 0) {
++ x_try = 0;
++ }
++ if (y_try < 0) {
++ y_try = 0;
++ }
++ if (x_try + w + dw > dpyWidth) {
++ x_try = dpyWidth - w - dw;
++ }
++ if (y_try + h + dh > dpyHeight) {
++ y_try = dpyHeight - h - dh;
++ }
++ x = x_try;
++ y = y_try;
++ }
++
+ XtConfigureWidget(toplevel, x + dw, y + dh, w, h, 0);
+ }
+
@@ -8557,7 +8858,7 @@ diff -Naur -X ./exclude vnc_unixsrc.orig/vncviewer/hextile.c vnc_unixsrc/vncview
+#undef FillRectangle
diff -Naur -X ./exclude vnc_unixsrc.orig/vncviewer/listen.c vnc_unixsrc/vncviewer/listen.c
--- vnc_unixsrc.orig/vncviewer/listen.c 2001-01-16 03:07:57.000000000 -0500
-+++ vnc_unixsrc/vncviewer/listen.c 2009-10-23 11:48:38.000000000 -0400
++++ vnc_unixsrc/vncviewer/listen.c 2009-11-24 18:26:13.000000000 -0500
@@ -32,6 +32,7 @@
#define FLASHDELAY 1 /* seconds */
@@ -8878,7 +9179,7 @@ diff -Naur -X ./exclude vnc_unixsrc.orig/vncviewer/listen.c vnc_unixsrc/vncviewe
/*
diff -Naur -X ./exclude vnc_unixsrc.orig/vncviewer/misc.c vnc_unixsrc/vncviewer/misc.c
--- vnc_unixsrc.orig/vncviewer/misc.c 2003-01-15 02:58:32.000000000 -0500
-+++ vnc_unixsrc/vncviewer/misc.c 2009-07-25 19:39:44.000000000 -0400
++++ vnc_unixsrc/vncviewer/misc.c 2009-11-28 00:44:24.000000000 -0500
@@ -33,12 +33,14 @@
Dimension dpyWidth, dpyHeight;
@@ -8894,7 +9195,7 @@ diff -Naur -X ./exclude vnc_unixsrc.orig/vncviewer/misc.c vnc_unixsrc/vncviewer/
/*
* ToplevelInitBeforeRealization sets the title, geometry and other resources
-@@ -48,87 +50,103 @@
+@@ -48,87 +50,122 @@
void
ToplevelInitBeforeRealization()
{
@@ -9018,6 +9319,25 @@ diff -Naur -X ./exclude vnc_unixsrc.orig/vncviewer/misc.c vnc_unixsrc/vncviewer/
+ toplevelX = (dpyWidth - toplevelWidth - appData.wmDecorationWidth) / 2;
+ toplevelY = (dpyHeight - toplevelHeight - appData.wmDecorationHeight) /2;
+
++ if (appData.appShare) {
++ int X = appshare_x_hint;
++ int Y = appshare_y_hint;
++ if (appData.scale) {
++ double fx = 1.0, fy = 1.0;
++ get_scale_values(&fx, &fy);
++ if (fx > 0.0 && fy > 0.0) {
++ X *= fx;
++ Y *= fy;
++ }
++ }
++ if (appshare_x_hint != appshare_0_hint) {
++ toplevelX = X;
++ }
++ if (appshare_y_hint != appshare_0_hint) {
++ toplevelY = Y;
++ }
++ }
++
+ /* set position via "geometry" so that window manager thinks it's a
+ user-specified position and therefore honours it */
+
@@ -9075,7 +9395,7 @@ diff -Naur -X ./exclude vnc_unixsrc.orig/vncviewer/misc.c vnc_unixsrc/vncviewer/
}
-@@ -141,14 +159,22 @@
+@@ -141,14 +178,22 @@
void
ToplevelInitAfterRealization()
{
@@ -9106,7 +9426,7 @@ diff -Naur -X ./exclude vnc_unixsrc.orig/vncviewer/misc.c vnc_unixsrc/vncviewer/
}
-@@ -157,9 +183,7 @@
+@@ -157,9 +202,7 @@
* CurrentTime if the event has no time field.
*/
@@ -9117,7 +9437,7 @@ diff -Naur -X ./exclude vnc_unixsrc.orig/vncviewer/misc.c vnc_unixsrc/vncviewer/
switch (ev->type) {
case KeyPress:
case KeyRelease:
-@@ -192,18 +216,15 @@
+@@ -192,18 +235,15 @@
* generated by SendRFBEvent.
*/
@@ -9144,7 +9464,7 @@ diff -Naur -X ./exclude vnc_unixsrc.orig/vncviewer/misc.c vnc_unixsrc/vncviewer/
}
-@@ -264,11 +285,9 @@
+@@ -264,11 +304,9 @@
* Quit action - called when we get a "delete window" message.
*/
@@ -9159,7 +9479,7 @@ diff -Naur -X ./exclude vnc_unixsrc.orig/vncviewer/misc.c vnc_unixsrc/vncviewer/
}
-@@ -276,49 +295,90 @@
+@@ -276,49 +314,93 @@
* Cleanup - perform any cleanup operations prior to exiting.
*/
@@ -9187,6 +9507,9 @@ diff -Naur -X ./exclude vnc_unixsrc.orig/vncviewer/misc.c vnc_unixsrc/vncviewer/
- if (appData.useShm)
- ShmCleanup();
+ if (appData.useShm) {
++ if (UsingShm()) {
++ ShmDetach();
++ }
+ ShmCleanup();
+ }
#endif
@@ -10170,7 +10493,7 @@ diff -Naur -X ./exclude vnc_unixsrc.orig/vncviewer/popup_ad vnc_unixsrc/vncviewe
+}
diff -Naur -X ./exclude vnc_unixsrc.orig/vncviewer/rfbproto.c vnc_unixsrc/vncviewer/rfbproto.c
--- vnc_unixsrc.orig/vncviewer/rfbproto.c 2008-09-05 19:51:24.000000000 -0400
-+++ vnc_unixsrc/vncviewer/rfbproto.c 2009-11-02 10:02:00.000000000 -0500
++++ vnc_unixsrc/vncviewer/rfbproto.c 2009-11-27 11:50:35.000000000 -0500
@@ -23,6 +23,7 @@
* rfbproto.c - functions to deal with client side of RFB protocol.
*/
@@ -10340,7 +10663,7 @@ diff -Naur -X ./exclude vnc_unixsrc.orig/vncviewer/rfbproto.c vnc_unixsrc/vncvie
+ pid_t pid;
+
+ q = strstr(cmd2, "pw=");
-+ if (q) {
++ if (q && !getenv("SSVNC_SHOW_ULTRAVNC_DSM_PASSWORD")) {
+ q += strlen("pw=");
+ while (*q != '\0' && !isspace(*q)) {
+ *q = '*';
@@ -10479,7 +10802,7 @@ diff -Naur -X ./exclude vnc_unixsrc.orig/vncviewer/rfbproto.c vnc_unixsrc/vncvie
/*
* InitialiseRFBConnection.
*/
-@@ -212,211 +439,620 @@
+@@ -212,211 +439,649 @@
Bool
InitialiseRFBConnection(void)
{
@@ -10791,7 +11114,9 @@ diff -Naur -X ./exclude vnc_unixsrc.orig/vncviewer/rfbproto.c vnc_unixsrc/vncvie
+ sprintf(pv, rfbProtocolVersionFormat, viewer_major, viewer_minor);
- fprintf(stderr,"Desktop name \"%s\"\n",desktopName);
-+ usleep(100*1000);
++ if (!appData.appShare) {
++ usleep(100*1000);
++ }
+ dt = dnow();
+ if (!WriteExact(rfbsock, pv, sz_rfbProtocolVersionMsg)) {
+ return False;
@@ -11049,6 +11374,33 @@ diff -Naur -X ./exclude vnc_unixsrc.orig/vncviewer/rfbproto.c vnc_unixsrc/vncvie
+
+ desktopName[si.nameLength] = 0;
+
++ if (appData.appShare) {
++ int x_hint, y_hint;
++ char *p, *q = NULL;
++ p = desktopName;
++ while (*p != '\0') {
++ char *t = strstr(p, " XY=");
++ if (t) q = t;
++ p++;
++ }
++ if (q) {
++ int ok = 1;
++ p = q + strlen(" XY=");
++ while (*p != '\0') {
++ if (!strpbrk(p, "0123456789,+-")) {
++ ok = 0;
++ }
++ p++;
++ }
++ if (ok && sscanf(q+1, "XY=%d,%d", &x_hint, &y_hint) == 2) {
++ fprintf(stderr,"Using x11vnc appshare position: %s\n\n", q);
++ *q = '\0';
++ appshare_x_hint = x_hint;
++ appshare_y_hint = y_hint;
++ }
++ }
++ }
++
+ fprintf(stderr,"Desktop name \"%s\"\n\n", desktopName);
+
+ fprintf(stderr,"VNC server default format:\n");
@@ -11223,8 +11575,7 @@ diff -Naur -X ./exclude vnc_unixsrc.orig/vncviewer/rfbproto.c vnc_unixsrc/vncvie
+ return rfbSecTypeTight;
+ }
+ }
-
-- return (int)secType;
++
+ /* Find first supported security type */
+ for (j = 0; j < (int)nSecTypes; j++) {
+ for (i = 0; i < nKnownSecTypes; i++) {
@@ -11250,12 +11601,13 @@ diff -Naur -X ./exclude vnc_unixsrc.orig/vncviewer/rfbproto.c vnc_unixsrc/vncvie
+ }
+
+ free(secTypes);
-+
+
+- return (int)secType;
+ return (int)secType;
}
-@@ -451,6 +1087,9 @@
+@@ -451,6 +1116,9 @@
return True;
}
@@ -11265,7 +11617,7 @@ diff -Naur -X ./exclude vnc_unixsrc.orig/vncviewer/rfbproto.c vnc_unixsrc/vncvie
/*
* Negotiate authentication scheme (protocol version 3.7t)
-@@ -459,58 +1098,388 @@
+@@ -459,58 +1127,388 @@
static Bool
PerformAuthenticationTight(void)
{
@@ -11430,7 +11782,9 @@ diff -Naur -X ./exclude vnc_unixsrc.orig/vncviewer/rfbproto.c vnc_unixsrc/vncvie
+ }
+}
+#endif
-+
+
+- fprintf(stderr, "No suitable authentication schemes offered by server\n");
+- return False;
+static void hexprint(char *label, char *data, int len) {
+ int i;
+ fprintf(stderr, "%s: ", label);
@@ -11450,16 +11804,14 @@ diff -Naur -X ./exclude vnc_unixsrc.orig/vncviewer/rfbproto.c vnc_unixsrc/vncvie
+static unsigned long long bytes_to_uint64(char *bytes) {
+ unsigned long long result = 0;
+ int i;
-
-- fprintf(stderr, "No suitable authentication schemes offered by server\n");
-- return False;
++
+ for (i=0; i < 8; i++) {
+ result <<= 8;
+ result += (unsigned char) bytes[i];
+ }
+ return result;
- }
-
++}
++
+static void uint64_to_bytes(unsigned long long n, char *bytes) {
+ int i;
+
@@ -11485,8 +11837,8 @@ diff -Naur -X ./exclude vnc_unixsrc.orig/vncviewer/rfbproto.c vnc_unixsrc/vncvie
+ }
+ }
+ return result;
-+}
-+
+ }
+
+/*
+ * UltraVNC MS-Logon authentication (for v1.0.5 and later.)
+ */
@@ -11696,7 +12048,7 @@ diff -Naur -X ./exclude vnc_unixsrc.orig/vncviewer/rfbproto.c vnc_unixsrc/vncvie
/*
* Standard VNC authentication.
-@@ -519,80 +1488,115 @@
+@@ -519,80 +1517,115 @@
static Bool
AuthenticateVNC(void)
{
@@ -11875,7 +12227,7 @@ diff -Naur -X ./exclude vnc_unixsrc.orig/vncviewer/rfbproto.c vnc_unixsrc/vncvie
}
/*
-@@ -602,68 +1606,75 @@
+@@ -602,68 +1635,75 @@
static Bool
AuthenticateUnixLogin(void)
{
@@ -12003,7 +12355,7 @@ diff -Naur -X ./exclude vnc_unixsrc.orig/vncviewer/rfbproto.c vnc_unixsrc/vncvie
}
-@@ -675,19 +1686,20 @@
+@@ -675,19 +1715,20 @@
static Bool
ReadInteractionCaps(void)
{
@@ -12036,7 +12388,7 @@ diff -Naur -X ./exclude vnc_unixsrc.orig/vncviewer/rfbproto.c vnc_unixsrc/vncvie
}
-@@ -700,19 +1712,67 @@
+@@ -700,19 +1741,67 @@
static Bool
ReadCapabilityList(CapsContainer *caps, int count)
{
@@ -12113,7 +12465,7 @@ diff -Naur -X ./exclude vnc_unixsrc.orig/vncviewer/rfbproto.c vnc_unixsrc/vncvie
/*
* SetFormatAndEncodings.
-@@ -729,6 +1789,17 @@
+@@ -729,6 +1818,17 @@
Bool requestCompressLevel = False;
Bool requestQualityLevel = False;
Bool requestLastRectEncoding = False;
@@ -12131,7 +12483,7 @@ diff -Naur -X ./exclude vnc_unixsrc.orig/vncviewer/rfbproto.c vnc_unixsrc/vncvie
spf.type = rfbSetPixelFormat;
spf.format = myFormat;
-@@ -736,15 +1807,32 @@
+@@ -736,15 +1836,32 @@
spf.format.greenMax = Swap16IfLE(spf.format.greenMax);
spf.format.blueMax = Swap16IfLE(spf.format.blueMax);
@@ -12164,7 +12516,7 @@ diff -Naur -X ./exclude vnc_unixsrc.orig/vncviewer/rfbproto.c vnc_unixsrc/vncvie
do {
char *nextEncStr = strchr(encStr, ' ');
if (nextEncStr) {
-@@ -754,50 +1842,102 @@
+@@ -754,50 +1871,102 @@
encStrLen = strlen(encStr);
}
@@ -12283,7 +12635,7 @@ diff -Naur -X ./exclude vnc_unixsrc.orig/vncviewer/rfbproto.c vnc_unixsrc/vncvie
encs[se->nEncodings++] = Swap32IfLE(rfbEncodingRichCursor);
if (se->nEncodings < MAX_ENCODINGS)
encs[se->nEncodings++] = Swap32IfLE(rfbEncodingPointerPos);
-@@ -806,10 +1946,16 @@
+@@ -806,10 +1975,16 @@
if (se->nEncodings < MAX_ENCODINGS && requestLastRectEncoding) {
encs[se->nEncodings++] = Swap32IfLE(rfbEncodingLastRect);
}
@@ -12303,7 +12655,7 @@ diff -Naur -X ./exclude vnc_unixsrc.orig/vncviewer/rfbproto.c vnc_unixsrc/vncvie
fprintf(stderr,"Same machine: preferring raw encoding\n");
encs[se->nEncodings++] = Swap32IfLE(rfbEncodingRaw);
} else {
-@@ -818,44 +1964,84 @@
+@@ -818,44 +1993,84 @@
}
encs[se->nEncodings++] = Swap32IfLE(rfbEncodingCopyRect);
@@ -12410,7 +12762,7 @@ diff -Naur -X ./exclude vnc_unixsrc.orig/vncviewer/rfbproto.c vnc_unixsrc/vncvie
return True;
}
-@@ -868,31 +2054,86 @@
+@@ -868,31 +2083,86 @@
Bool
SendIncrementalFramebufferUpdateRequest()
{
@@ -12510,7 +12862,7 @@ diff -Naur -X ./exclude vnc_unixsrc.orig/vncviewer/rfbproto.c vnc_unixsrc/vncvie
}
-@@ -903,19 +2144,36 @@
+@@ -903,19 +2173,36 @@
Bool
SendPointerEvent(int x, int y, int buttonMask)
{
@@ -12559,7 +12911,7 @@ diff -Naur -X ./exclude vnc_unixsrc.orig/vncviewer/rfbproto.c vnc_unixsrc/vncvie
}
-@@ -926,12 +2184,20 @@
+@@ -926,12 +2213,20 @@
Bool
SendKeyEvent(CARD32 key, Bool down)
{
@@ -12585,7 +12937,7 @@ diff -Naur -X ./exclude vnc_unixsrc.orig/vncviewer/rfbproto.c vnc_unixsrc/vncvie
}
-@@ -942,281 +2208,1024 @@
+@@ -942,281 +2237,1024 @@
Bool
SendClientCutText(char *str, int len)
{
@@ -13832,7 +14184,7 @@ diff -Naur -X ./exclude vnc_unixsrc.orig/vncviewer/rfbproto.c vnc_unixsrc/vncvie
#ifdef MITSHM
/* if using shared memory PutImage, make sure that the X server has
-@@ -1224,59 +3233,168 @@
+@@ -1224,59 +3262,168 @@
mainly to avoid copyrect using invalid screen contents - not sure
if we'd need it otherwise. */
@@ -14034,7 +14386,7 @@ diff -Naur -X ./exclude vnc_unixsrc.orig/vncviewer/rfbproto.c vnc_unixsrc/vncvie
}
-@@ -1296,26 +3414,93 @@
+@@ -1296,26 +3443,93 @@
#define CONCAT2(a,b) a##b
#define CONCAT2E(a,b) CONCAT2(a,b)
@@ -14128,7 +14480,7 @@ diff -Naur -X ./exclude vnc_unixsrc.orig/vncviewer/rfbproto.c vnc_unixsrc/vncvie
#undef BPP
/*
-@@ -1325,23 +3510,27 @@
+@@ -1325,23 +3539,27 @@
static void
ReadConnFailedReason(void)
{
@@ -14170,7 +14522,7 @@ diff -Naur -X ./exclude vnc_unixsrc.orig/vncviewer/rfbproto.c vnc_unixsrc/vncvie
}
/*
-@@ -1358,9 +3547,9 @@
+@@ -1358,9 +3576,9 @@
" %s significant bit in each byte is leftmost on the screen.\n",
(format->bigEndian ? "Most" : "Least"));
} else {
@@ -14182,7 +14534,7 @@ diff -Naur -X ./exclude vnc_unixsrc.orig/vncviewer/rfbproto.c vnc_unixsrc/vncvie
(format->bigEndian ? "Most" : "Least"));
}
if (format->trueColour) {
-@@ -1462,4 +3651,3 @@
+@@ -1462,4 +3680,3 @@
cinfo->src = &jpegSrcManager;
}
@@ -14255,7 +14607,7 @@ diff -Naur -X ./exclude vnc_unixsrc.orig/vncviewer/rre.c vnc_unixsrc/vncviewer/r
+#undef FillRectangle
diff -Naur -X ./exclude vnc_unixsrc.orig/vncviewer/selection.c vnc_unixsrc/vncviewer/selection.c
--- vnc_unixsrc.orig/vncviewer/selection.c 2004-03-03 04:11:52.000000000 -0500
-+++ vnc_unixsrc/vncviewer/selection.c 2009-05-31 18:35:25.000000000 -0400
++++ vnc_unixsrc/vncviewer/selection.c 2009-11-24 13:34:03.000000000 -0500
@@ -43,13 +43,16 @@
unsigned long* length, int* format);
static void LoseSelection(Widget w, Atom *selection);
@@ -14485,7 +14837,7 @@ diff -Naur -X ./exclude vnc_unixsrc.orig/vncviewer/selection.c vnc_unixsrc/vncvi
}
-@@ -249,36 +264,61 @@
+@@ -249,36 +264,68 @@
void
SelectionFromVNC(Widget w, XEvent *event, String *params, Cardinal *num_params)
{
@@ -14549,6 +14901,13 @@ diff -Naur -X ./exclude vnc_unixsrc.orig/vncviewer/selection.c vnc_unixsrc/vncvi
+
+ newServerCutText = False;
+
++ if (appData.appShare) {
++ if (strstr(serverCutText, "X11VNC_APPSHARE_CMD:") == serverCutText) {
++ /* do something with it? */
++ return;
++ }
++ }
++
+ XStoreBytes(dpy, serverCutText, strlen(serverCutText));
+
+ if (appData.recvText == NULL) {
@@ -14577,7 +14936,7 @@ diff -Naur -X ./exclude vnc_unixsrc.orig/vncviewer/selection.c vnc_unixsrc/vncvi
}
-@@ -293,37 +333,36 @@
+@@ -293,37 +340,36 @@
XtPointer* value, unsigned long* length, int* format)
{
@@ -14643,7 +15002,7 @@ diff -Naur -X ./exclude vnc_unixsrc.orig/vncviewer/selection.c vnc_unixsrc/vncvi
}
-@@ -332,7 +371,12 @@
+@@ -332,7 +378,12 @@
*/
static void
@@ -14661,46 +15020,43 @@ diff -Naur -X ./exclude vnc_unixsrc.orig/vncviewer/selection.c vnc_unixsrc/vncvi
}
diff -Naur -X ./exclude vnc_unixsrc.orig/vncviewer/shm.c vnc_unixsrc/vncviewer/shm.c
--- vnc_unixsrc.orig/vncviewer/shm.c 2000-06-11 08:00:53.000000000 -0400
-+++ vnc_unixsrc/vncviewer/shm.c 2008-10-10 12:26:07.000000000 -0400
-@@ -33,68 +33,97 @@
- void
- ShmCleanup()
- {
++++ vnc_unixsrc/vncviewer/shm.c 2009-11-28 02:25:03.000000000 -0500
+@@ -30,71 +30,108 @@
+ static Bool caughtShmError = False;
+ static Bool needShmCleanup = False;
+
+-void
+-ShmCleanup()
+-{
- fprintf(stderr,"ShmCleanup called\n");
- if (needShmCleanup) {
- shmdt(shminfo.shmaddr);
- shmctl(shminfo.shmid, IPC_RMID, 0);
- needShmCleanup = False;
- }
-+ fprintf(stderr,"ShmCleanup called\n");
-+ if (needShmCleanup) {
-+ shmdt(shminfo.shmaddr);
-+ shmctl(shminfo.shmid, IPC_RMID, 0);
-+ needShmCleanup = False;
-+ }
-+}
-+
-+Bool UsingShm() {
-+ return needShmCleanup;
++static int ShmCreationXErrorHandler(Display *dpy, XErrorEvent *error) {
++ caughtShmError = True;
++ return 0;
}
- static int
- ShmCreationXErrorHandler(Display *dpy, XErrorEvent *error)
- {
+-static int
+-ShmCreationXErrorHandler(Display *dpy, XErrorEvent *error)
+-{
- caughtShmError = True;
- return 0;
-+ caughtShmError = True;
-+ return 0;
++void ShmDetach() {
++ if (needShmCleanup) {
++ XErrorHandler oldXErrorHandler = XSetErrorHandler(ShmCreationXErrorHandler);
++ fprintf(stderr,"ShmDetach called.\n");
++ XShmDetach(dpy, &shminfo);
++ XSync(dpy, False);
++ XSetErrorHandler(oldXErrorHandler);
++ }
}
-+int scale_round(int len, double fac);
-+extern int scale_x, scale_y;
-+extern double scale_factor_x, scale_factor_y;
-+
- XImage *
+-XImage *
-CreateShmImage()
-+CreateShmImage(int do_ycrop)
- {
+-{
- XImage *image;
- XErrorHandler oldXErrorHandler;
-
@@ -14714,7 +15070,13 @@ diff -Naur -X ./exclude vnc_unixsrc.orig/vncviewer/shm.c vnc_unixsrc/vncviewer/s
- shminfo.shmid = shmget(IPC_PRIVATE,
- image->bytes_per_line * image->height,
- IPC_CREAT|0777);
--
++void ShmCleanup() {
++ if (needShmCleanup) {
++ fprintf(stderr,"ShmCleanup called.\n");
++ XSync(dpy, False);
++ shmdt(shminfo.shmaddr);
++ shmctl(shminfo.shmid, IPC_RMID, 0);
+
- if (shminfo.shmid == -1) {
- XDestroyImage(image);
- return NULL;
@@ -14727,20 +15089,32 @@ diff -Naur -X ./exclude vnc_unixsrc.orig/vncviewer/shm.c vnc_unixsrc/vncviewer/s
- shmctl(shminfo.shmid, IPC_RMID, 0);
- return NULL;
- }
--
++ needShmCleanup = False;
++ }
++}
+
- shminfo.readOnly = True;
--
++Bool UsingShm() {
++ return needShmCleanup;
++}
+
- oldXErrorHandler = XSetErrorHandler(ShmCreationXErrorHandler);
- XShmAttach(dpy, &shminfo);
- XSync(dpy, False);
- XSetErrorHandler(oldXErrorHandler);
--
++int scale_round(int len, double fac);
++extern int scale_x, scale_y;
++extern double scale_factor_x, scale_factor_y;
+
- if (caughtShmError) {
- XDestroyImage(image);
- shmdt(shminfo.shmaddr);
- shmctl(shminfo.shmid, IPC_RMID, 0);
- return NULL;
- }
++XImage *
++CreateShmImage(int do_ycrop)
++{
+ XImage *image;
+ XErrorHandler oldXErrorHandler;
+ int ymax = si.framebufferHeight;
@@ -14829,7 +15203,7 @@ diff -Naur -X ./exclude vnc_unixsrc.orig/vncviewer/smake vnc_unixsrc/vncviewer/s
+fi
diff -Naur -X ./exclude vnc_unixsrc.orig/vncviewer/sockets.c vnc_unixsrc/vncviewer/sockets.c
--- vnc_unixsrc.orig/vncviewer/sockets.c 2001-01-14 22:54:18.000000000 -0500
-+++ vnc_unixsrc/vncviewer/sockets.c 2009-08-01 19:05:47.000000000 -0400
++++ vnc_unixsrc/vncviewer/sockets.c 2009-11-27 13:55:46.000000000 -0500
@@ -27,11 +27,17 @@
#include <netinet/in.h>
#include <netinet/tcp.h>
@@ -15435,6 +15809,15 @@ diff -Naur -X ./exclude vnc_unixsrc.orig/vncviewer/sockets.c vnc_unixsrc/vncview
sock = socket(AF_INET, SOCK_STREAM, 0);
if (sock < 0) {
fprintf(stderr,programName);
+@@ -305,7 +731,7 @@
+ return -1;
+ }
+
+- if (listen(sock, 5) < 0) {
++ if (listen(sock, 32) < 0) {
+ fprintf(stderr,programName);
+ perror(": ListenAtTcpPort: listen");
+ close(sock);
@@ -392,6 +818,42 @@
return False;
}
@@ -16406,8 +16789,8 @@ diff -Naur -X ./exclude vnc_unixsrc.orig/vncviewer/turbovnc/turbojpeg.h vnc_unix
+#endif
diff -Naur -X ./exclude vnc_unixsrc.orig/vncviewer/vncviewer._man vnc_unixsrc/vncviewer/vncviewer._man
--- vnc_unixsrc.orig/vncviewer/vncviewer._man 1969-12-31 19:00:00.000000000 -0500
-+++ vnc_unixsrc/vncviewer/vncviewer._man 2009-10-23 12:24:51.000000000 -0400
-@@ -0,0 +1,799 @@
++++ vnc_unixsrc/vncviewer/vncviewer._man 2009-11-25 00:03:28.000000000 -0500
+@@ -0,0 +1,823 @@
+'\" t
+.\" ** The above line should force tbl to be a preprocessor **
+.\" Man page for X vncviewer
@@ -16875,6 +17258,18 @@ diff -Naur -X ./exclude vnc_unixsrc.orig/vncviewer/vncviewer._man vnc_unixsrc/vn
+framebuffer update coming in. Helps 'pipeline' the updates.
+This is currently the default, use \fB-nopipeline\fR to disable.
+.TP
++\fB\-appshare\fR
++Enable features for use with x11vnc's \fB\-appshare\fR mode where
++instead of sharing the full desktop only the application's
++windows are shared. Viewer multilisten mode is used to
++create the multiple windows: \fB\-multilisten\fR is implied.
++See 'x11vnc \fB\-appshare\fR \fB\-help\fR' more information on the mode.
++Features enabled in the viewer under \fB\-appshare\fR are:
++Minimum extra text in the title, auto \fB\-ycrop\fR is disabled,
++x11vnc \fB\-remote_prefix\fR X11VNC_APPSHARE_CMD: message channel,
++x11vnc initial window position hints. See also Escape Keys
++below for additional key and mouse bindings.
++.TP
+\fB\-escape \fR\fIstr\fR
+This sets the 'Escape Keys' modifier sequence and enables
+escape keys mode. When the modifier keys escape sequence
@@ -16921,6 +17316,18 @@ diff -Naur -X ./exclude vnc_unixsrc.orig/vncviewer/vncviewer._man vnc_unixsrc/vn
+The above mappings are \fBalways\fR active in ViewOnly mode, unless you set
+the Escape Keys value to 'never'.
+
++x11vnc -appshare hot-keys: x11vnc has a simple application sharing mode
++that enables the viewer-side to move, resize, or raise the remote toplevel
++windows. To enable it, hold down Shift + the Escape Keys and press these:
++
++Arrow keys: move the remote window around in its desktop.
++
++PageUp/PageDn/Home/End: resize the remote window.
++
+++/-: raise or lower the remote window.
++
++M or Button1 move win to local position; D or Button3: delete remote win.
++
+If the Escape Keys value below is set to 'default' then a default list of
+of modifier keys is used. For Unix it is: Alt_L,Super_L and for MacOSX it
+is Control_L,Meta_L. Note: the Super_L key usually has a Windows(TM) Flag
@@ -17209,7 +17616,7 @@ diff -Naur -X ./exclude vnc_unixsrc.orig/vncviewer/vncviewer._man vnc_unixsrc/vn
+Karl J. Runge <runge@karlrunge.com>
diff -Naur -X ./exclude vnc_unixsrc.orig/vncviewer/vncviewer.c vnc_unixsrc/vncviewer/vncviewer.c
--- vnc_unixsrc.orig/vncviewer/vncviewer.c 2004-01-13 09:22:05.000000000 -0500
-+++ vnc_unixsrc/vncviewer/vncviewer.c 2009-10-23 11:53:44.000000000 -0400
++++ vnc_unixsrc/vncviewer/vncviewer.c 2009-11-24 19:41:33.000000000 -0500
@@ -22,6 +22,7 @@
*/
@@ -17218,7 +17625,7 @@ diff -Naur -X ./exclude vnc_unixsrc.orig/vncviewer/vncviewer.c vnc_unixsrc/vncvi
char *programName;
XtAppContext appContext;
-@@ -29,11 +30,241 @@
+@@ -29,11 +30,258 @@
Widget toplevel;
@@ -17260,6 +17667,21 @@ diff -Naur -X ./exclude vnc_unixsrc.orig/vncviewer/vncviewer.c vnc_unixsrc/vncvi
+ }
+}
+
++void min_title(void) {
++ char *q, *p;
++ int i, k, N = 4;
++ int db = 0;
++
++ k = 0;
++ while (fallback_resources[k] != NULL) {
++ q = strstr(fallback_resources[k], "Ssvnc.title: ");
++ if (q) {
++ fallback_resources[k] = strdup("Ssvnc.title: %s");
++ }
++ k++;
++ }
++}
++
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <unistd.h>
@@ -17440,17 +17862,19 @@ diff -Naur -X ./exclude vnc_unixsrc.orig/vncviewer/vncviewer.c vnc_unixsrc/vncvi
+ }
+}
+
++int saw_appshare = 0;
++
int
main(int argc, char **argv)
{
- int i;
- programName = argv[0];
-+ int i, save_sbw;
++ int i, save_sbw, saw_listen = 0;
+ char *pw_loc = NULL;
+ programName = argv[0];
+
+ for (i = 1; i < argc; i++) {
-+ if (strcmp(argv[i], "-env") == 0) {
++ if (!strcmp(argv[i], "-env")) {
+ if (i+1 < argc) {
+ char *estr = argv[i+1];
+ if (strchr(estr, '=')) {
@@ -17462,7 +17886,7 @@ diff -Naur -X ./exclude vnc_unixsrc.orig/vncviewer/vncviewer.c vnc_unixsrc/vncvi
/* The -listen option is used to make us a daemon process which listens for
incoming connections from servers, rather than actively connecting to a
-@@ -45,89 +276,1647 @@
+@@ -45,89 +293,1667 @@
listenForIncomingConnections() returns, setting the listenSpecified
flag. */
@@ -17478,36 +17902,49 @@ diff -Naur -X ./exclude vnc_unixsrc.orig/vncviewer/vncviewer.c vnc_unixsrc/vncvi
- }
- }
+ for (i = 1; i < argc; i++) {
++ if (!strcmp(argv[i], "-appshare")) {
++ putenv("SSVNC_MULTIPLE_LISTEN=1");
++ fprintf(stderr, "Enabling -multilisten mode for 'x11vnc -appshare' usage.\n\n");
++ saw_appshare = 1;
++ }
++ if (!strcmp(argv[i], "-multilisten")) {
++ putenv("SSVNC_MULTIPLE_LISTEN=1");
++ saw_listen = 2;
++ }
++ if (!strcmp(argv[i], "-listen")) {
++ saw_listen = 1;
++ }
++ if (!strcmp(argv[i], "-acceptpopup")) {
++ putenv("SSVNC_ACCEPT_POPUP=1");
++ }
++ if (!strcmp(argv[i], "-acceptpopupsc")) {
++ putenv("SSVNC_ACCEPT_POPUP_SC=1");
++ }
+ if (strstr(argv[i], " pw=") != NULL) {
+ pw_loc = strstr(argv[i], " pw=") + 1;
+ }
+ }
+
+ for (i = 1; i < argc; i++) {
-+ if (strcmp(argv[i], "-acceptpopup") == 0) {
-+ putenv("SSVNC_ACCEPT_POPUP=1");
-+ continue;
-+ }
-+ if (strcmp(argv[i], "-acceptpopupsc") == 0) {
-+ putenv("SSVNC_ACCEPT_POPUP_SC=1");
-+ continue;
++ if (!strcmp(argv[i], "-appshare") && !saw_listen) {
++ listenForIncomingConnections(&argc, argv, i);
++ break;
+ }
-+ if (strcmp(argv[i], "-listen") == 0) {
++ if (!strcmp(argv[i], "-multilisten")) {
+ listenForIncomingConnections(&argc, argv, i);
+ break;
+ }
-+ if (strcmp(argv[i], "-multilisten") == 0) {
-+ putenv("SSVNC_MULTIPLE_LISTEN=1");
++ if (!strcmp(argv[i], "-listen")) {
+ listenForIncomingConnections(&argc, argv, i);
+ break;
+ }
-+ if (strcmp(argv[i], "-tunnel") == 0 || strcmp(argv[i], "-via") == 0) {
++ if (!strcmp(argv[i], "-tunnel") || !strcmp(argv[i], "-via")) {
+ if (!createTunnel(&argc, argv, i)) {
+ exit(1);
+ }
+ break;
+ }
-+ if (strcmp(argv[i], "-printres") == 0 || strcmp(argv[i], "-res") == 0) {
++ if (!strcmp(argv[i], "-printres") || !strcmp(argv[i], "-res")) {
+ int j = 0;
+ fprintf(stdout, "\n! Ssvnc fallback X resources:\n\n");
+ while (1) {
@@ -17541,6 +17978,9 @@ diff -Naur -X ./exclude vnc_unixsrc.orig/vncviewer/vncviewer.c vnc_unixsrc/vncvi
- cmdLineOptions, numCmdLineOptions,
- &argc, argv, fallback_resources,
- XtNborderWidth, 0, NULL);
++ if (saw_appshare || getenv("VNCVIEWER_MIN_TITLE")) {
++ min_title();
++ }
+ appData.sbWidth = 0;
+ if (getenv("VNCVIEWER_SBWIDTH")) {
+ int sbw = atoi(getenv("VNCVIEWER_SBWIDTH"));
@@ -17581,6 +18021,10 @@ diff -Naur -X ./exclude vnc_unixsrc.orig/vncviewer/vncviewer.c vnc_unixsrc/vncvi
- GetArgsAndResources(argc, argv);
+ GetArgsAndResources(argc, argv);
+
++ if (saw_appshare) {
++ appData.appShare = True;
++ }
++
+ if (save_sbw) {
+ appData.sbWidth = save_sbw;
+ }
@@ -18379,8 +18823,7 @@ diff -Naur -X ./exclude vnc_unixsrc.orig/vncviewer/vncviewer.c vnc_unixsrc/vncvi
+ schedule_fb_update();
+ }
+}
-
-- Cleanup();
++
+void
+DoServerScale(Widget w, XEvent *ev, String *params, Cardinal *num_params)
+{
@@ -18470,8 +18913,7 @@ diff -Naur -X ./exclude vnc_unixsrc.orig/vncviewer/vncviewer.c vnc_unixsrc/vncvi
+ set_server_compress(n);
+ }
+}
-
-- return 0;
++
+extern void rescale_image(void);
+
+void
@@ -18537,7 +18979,8 @@ diff -Naur -X ./exclude vnc_unixsrc.orig/vncviewer/vncviewer.c vnc_unixsrc/vncvi
+ schedule_fb_update();
+ }
+}
-+
+
+- Cleanup();
+void
+SetYCrop(Widget w, XEvent *ev, String *params, Cardinal *num_params)
+{
@@ -18674,7 +19117,8 @@ diff -Naur -X ./exclude vnc_unixsrc.orig/vncviewer/vncviewer.c vnc_unixsrc/vncvi
+ appData.compressLevel = 0;
+ UpdateQual();
+}
-+
+
+- return 0;
+static void QualLosslessWAN(void) {
+ appData.encodingsString = "tight copyrect";
+ appData.enableJPEG = False;
@@ -19148,7 +19592,7 @@ diff -Naur -X ./exclude vnc_unixsrc.orig/vncviewer/vncviewer.c vnc_unixsrc/vncvi
}
diff -Naur -X ./exclude vnc_unixsrc.orig/vncviewer/vncviewer.h vnc_unixsrc/vncviewer/vncviewer.h
--- vnc_unixsrc.orig/vncviewer/vncviewer.h 2004-03-11 13:14:40.000000000 -0500
-+++ vnc_unixsrc/vncviewer/vncviewer.h 2009-10-23 11:27:05.000000000 -0400
++++ vnc_unixsrc/vncviewer/vncviewer.h 2009-11-28 00:45:15.000000000 -0500
@@ -28,6 +28,7 @@
#include <string.h>
#include <sys/time.h>
@@ -19172,7 +19616,7 @@ diff -Naur -X ./exclude vnc_unixsrc.orig/vncviewer/vncviewer.h vnc_unixsrc/vncvi
#define FLASH_PORT_OFFSET 5400
#define LISTEN_PORT_OFFSET 5500
-@@ -64,60 +71,125 @@
+@@ -64,60 +71,126 @@
#define DEFAULT_VIA_CMD \
(DEFAULT_SSH_CMD " -f -L %L:%H:%R %G sleep 20")
@@ -19313,6 +19757,7 @@ diff -Naur -X ./exclude vnc_unixsrc.orig/vncviewer/vncviewer.h vnc_unixsrc/vncvi
+
+ char *scale;
+ char *escapeKeys;
++ Bool appShare;
+ Bool escapeActive;
+ Bool pipelineUpdates;
+
@@ -19338,7 +19783,7 @@ diff -Naur -X ./exclude vnc_unixsrc.orig/vncviewer/vncviewer.h vnc_unixsrc/vncvi
extern int listenPort, flashPort;
extern XrmOptionDescRec cmdLineOptions[];
-@@ -130,10 +202,11 @@
+@@ -130,10 +203,11 @@
/* colour.c */
extern unsigned long BGR233ToPixel[];
@@ -19351,8 +19796,14 @@ diff -Naur -X ./exclude vnc_unixsrc.orig/vncviewer/vncviewer.h vnc_unixsrc/vncvi
extern void SetVisualAndCmap();
-@@ -157,13 +230,54 @@
+@@ -155,15 +229,60 @@
+ extern GC srcGC, dstGC;
+ extern Dimension dpyWidth, dpyHeight;
++extern int appshare_0_hint;
++extern int appshare_x_hint;
++extern int appshare_y_hint;
++
extern void DesktopInitBeforeRealization();
extern void DesktopInitAfterRealization();
+extern void Xcursors(int set);
@@ -19406,7 +19857,7 @@ diff -Naur -X ./exclude vnc_unixsrc.orig/vncviewer/vncviewer.h vnc_unixsrc/vncvi
extern void ServerDialogDone(Widget w, XEvent *event, String *params,
Cardinal *num_params);
extern char *DoServerDialog();
-@@ -171,6 +285,10 @@
+@@ -171,6 +290,10 @@
Cardinal *num_params);
extern char *DoPasswordDialog();
@@ -19417,7 +19868,7 @@ diff -Naur -X ./exclude vnc_unixsrc.orig/vncviewer/vncviewer.h vnc_unixsrc/vncvi
/* fullscreen.c */
extern void ToggleFullScreen(Widget w, XEvent *event, String *params,
-@@ -181,6 +299,13 @@
+@@ -181,6 +304,13 @@
extern void FullScreenOn();
extern void FullScreenOff();
@@ -19431,7 +19882,7 @@ diff -Naur -X ./exclude vnc_unixsrc.orig/vncviewer/vncviewer.h vnc_unixsrc/vncvi
/* listen.c */
extern void listenForIncomingConnections();
-@@ -196,6 +321,8 @@
+@@ -196,6 +326,8 @@
Cardinal *num_params);
extern void Quit(Widget w, XEvent *event, String *params,
Cardinal *num_params);
@@ -19440,7 +19891,7 @@ diff -Naur -X ./exclude vnc_unixsrc.orig/vncviewer/vncviewer.h vnc_unixsrc/vncvi
extern void Cleanup();
/* popup.c */
-@@ -207,6 +334,29 @@
+@@ -207,6 +339,29 @@
Cardinal *num_params);
extern void CreatePopup();
@@ -19470,7 +19921,7 @@ diff -Naur -X ./exclude vnc_unixsrc.orig/vncviewer/vncviewer.h vnc_unixsrc/vncvi
/* rfbproto.c */
extern int rfbsock;
-@@ -229,8 +379,19 @@
+@@ -229,8 +384,19 @@
extern Bool SendClientCutText(char *str, int len);
extern Bool HandleRFBServerMessage();
@@ -19490,18 +19941,19 @@ diff -Naur -X ./exclude vnc_unixsrc.orig/vncviewer/vncviewer.h vnc_unixsrc/vncvi
/* selection.c */
extern void InitialiseSelection();
-@@ -241,8 +402,9 @@
+@@ -241,8 +407,10 @@
/* shm.c */
-extern XImage *CreateShmImage();
+extern XImage *CreateShmImage(int do_ycrop);
extern void ShmCleanup();
++extern void ShmDetach();
+extern Bool UsingShm();
/* sockets.c */
-@@ -253,10 +415,15 @@
+@@ -253,10 +421,15 @@
extern int FindFreeTcpPort(void);
extern int ListenAtTcpPort(int port);
extern int ConnectToTcpAddr(unsigned int host, int port);
@@ -19517,7 +19969,7 @@ diff -Naur -X ./exclude vnc_unixsrc.orig/vncviewer/vncviewer.h vnc_unixsrc/vncvi
extern Bool SameMachine(int sock);
/* tunnel.c */
-@@ -271,3 +438,82 @@
+@@ -271,3 +444,82 @@
extern XtAppContext appContext;
extern Display* dpy;
extern Widget toplevel;
@@ -19602,7 +20054,7 @@ diff -Naur -X ./exclude vnc_unixsrc.orig/vncviewer/vncviewer.h vnc_unixsrc/vncvi
+extern void SetEscapeKeysState(Widget w, XEvent *ev, String *params, Cardinal *num_params);
diff -Naur -X ./exclude vnc_unixsrc.orig/vncviewer/vncviewer.man vnc_unixsrc/vncviewer/vncviewer.man
--- vnc_unixsrc.orig/vncviewer/vncviewer.man 2004-03-11 13:14:40.000000000 -0500
-+++ vnc_unixsrc/vncviewer/vncviewer.man 2009-10-23 12:24:51.000000000 -0400
++++ vnc_unixsrc/vncviewer/vncviewer.man 2009-11-25 00:03:28.000000000 -0500
@@ -5,38 +5,55 @@
.\" Copyright (C) 1998 Marcus.Brinkmann@ruhr-uni-bochum.de
.\" Copyright (C) 2000,2001 Red Hat, Inc.
@@ -19688,7 +20140,7 @@ diff -Naur -X ./exclude vnc_unixsrc.orig/vncviewer/vncviewer.man vnc_unixsrc/vnc
.TP
\fB\-bgr233\fR
Always use the BGR233 format to encode pixel data. This reduces
-@@ -168,6 +185,394 @@
+@@ -168,6 +185,418 @@
\fB\-autopass\fR
Read a plain-text password from stdin. This option affects only the
standard VNC authentication.
@@ -19972,6 +20424,18 @@ diff -Naur -X ./exclude vnc_unixsrc.orig/vncviewer/vncviewer.man vnc_unixsrc/vnc
+framebuffer update coming in. Helps 'pipeline' the updates.
+This is currently the default, use \fB-nopipeline\fR to disable.
+.TP
++\fB\-appshare\fR
++Enable features for use with x11vnc's \fB\-appshare\fR mode where
++instead of sharing the full desktop only the application's
++windows are shared. Viewer multilisten mode is used to
++create the multiple windows: \fB\-multilisten\fR is implied.
++See 'x11vnc \fB\-appshare\fR \fB\-help\fR' more information on the mode.
++Features enabled in the viewer under \fB\-appshare\fR are:
++Minimum extra text in the title, auto \fB\-ycrop\fR is disabled,
++x11vnc \fB\-remote_prefix\fR X11VNC_APPSHARE_CMD: message channel,
++x11vnc initial window position hints. See also Escape Keys
++below for additional key and mouse bindings.
++.TP
+\fB\-escape \fR\fIstr\fR
+This sets the 'Escape Keys' modifier sequence and enables
+escape keys mode. When the modifier keys escape sequence
@@ -20018,6 +20482,18 @@ diff -Naur -X ./exclude vnc_unixsrc.orig/vncviewer/vncviewer.man vnc_unixsrc/vnc
+The above mappings are \fBalways\fR active in ViewOnly mode, unless you set
+the Escape Keys value to 'never'.
+
++x11vnc -appshare hot-keys: x11vnc has a simple application sharing mode
++that enables the viewer-side to move, resize, or raise the remote toplevel
++windows. To enable it, hold down Shift + the Escape Keys and press these:
++
++Arrow keys: move the remote window around in its desktop.
++
++PageUp/PageDn/Home/End: resize the remote window.
++
+++/-: raise or lower the remote window.
++
++M or Button1 move win to local position; D or Button3: delete remote win.
++
+If the Escape Keys value below is set to 'default' then a default list of
+of modifier keys is used. For Unix it is: Alt_L,Super_L and for MacOSX it
+is Control_L,Meta_L. Note: the Super_L key usually has a Windows(TM) Flag
@@ -20083,7 +20559,7 @@ diff -Naur -X ./exclude vnc_unixsrc.orig/vncviewer/vncviewer.man vnc_unixsrc/vnc
.SH ENCODINGS
The server supplies information in whatever format is desired by the
client, in order to make the client as easy as possible to implement.
-@@ -238,6 +643,15 @@
+@@ -238,6 +667,15 @@
\-quality and \-nojpeg options above). Tight encoding is usually the
best choice for low\-bandwidth network environments (e.g. slow modem
connections).
@@ -20099,7 +20575,7 @@ diff -Naur -X ./exclude vnc_unixsrc.orig/vncviewer/vncviewer.man vnc_unixsrc/vnc
.SH RESOURCES
X resources that \fBvncviewer\fR knows about, aside from the
normal Xt resources, are as follows:
-@@ -364,12 +778,13 @@
+@@ -364,12 +802,13 @@
.B %R
remote TCP port number.
.SH SEE ALSO
@@ -20116,7 +20592,7 @@ diff -Naur -X ./exclude vnc_unixsrc.orig/vncviewer/vncviewer.man vnc_unixsrc/vnc
\fBMan page authors:\fR
.br
-@@ -380,3 +795,5 @@
+@@ -380,3 +819,5 @@
Tim Waugh <twaugh@redhat.com>,
.br
Constantin Kaplinsky <const@ce.cctpu.edu.ru>
@@ -20124,8 +20600,8 @@ diff -Naur -X ./exclude vnc_unixsrc.orig/vncviewer/vncviewer.man vnc_unixsrc/vnc
+Karl J. Runge <runge@karlrunge.com>
diff -Naur -X ./exclude vnc_unixsrc.orig/vncviewer/zrle.c vnc_unixsrc/vncviewer/zrle.c
--- vnc_unixsrc.orig/vncviewer/zrle.c 2007-02-04 18:59:50.000000000 -0500
-+++ vnc_unixsrc/vncviewer/zrle.c 2008-10-08 00:04:43.000000000 -0400
-@@ -0,0 +1,618 @@
++++ vnc_unixsrc/vncviewer/zrle.c 2009-11-19 23:34:28.000000000 -0500
+@@ -0,0 +1,620 @@
+/*
+ * Copyright (C) 2005 Johannes E. Schindelin. All Rights Reserved.
+ *
@@ -20657,6 +21133,7 @@ diff -Naur -X ./exclude vnc_unixsrc.orig/vncviewer/zrle.c vnc_unixsrc/vncviewer/
+ // make this CopyDataFromScreen() or something.
+ if (!appData.useBGR565) {
+ scrWidthInBytes = si.framebufferWidth * myFormat.bitsPerPixel / 8;
++ if (scrWidthInBytes != im->bytes_per_line) scrWidthInBytes = im->bytes_per_line;
+ scr = im->data + y * scrWidthInBytes + x * myFormat.bitsPerPixel / 8;
+ buf = (char *) ptmp;
+
@@ -20667,6 +21144,7 @@ diff -Naur -X ./exclude vnc_unixsrc.orig/vncviewer/zrle.c vnc_unixsrc/vncviewer/
+ }
+ } else {
+ scrWidthInBytes = si.framebufferWidth * 4;
++ if (scrWidthInBytes != im->bytes_per_line) scrWidthInBytes = im->bytes_per_line;
+ scr = im->data + y * scrWidthInBytes + x * 4;
+ buf = (char *) ptmp;
+
diff --git a/x11vnc/remote.c b/x11vnc/remote.c
index bb6491a..d3ff58a 100644
--- a/x11vnc/remote.c
+++ b/x11vnc/remote.c
@@ -5920,7 +5920,9 @@ char *process_remote_cmd(char *cmd, int stringonly) {
grab_state(&ptr_grabbed, &kbd_grabbed);
snprintf(buf, bufn, "aro=%s:%d,%d", p, ptr_grabbed, kbd_grabbed);
- rfbLog("remote_cmd: ptr,kbd: %s\n", buf);
+ if (dpy) {
+ rfbLog("remote_cmd: ptr,kbd: %s\n", buf);
+ }
goto qry;
}
diff --git a/x11vnc/solid.c b/x11vnc/solid.c
index a171b89..d677fc2 100644
--- a/x11vnc/solid.c
+++ b/x11vnc/solid.c
@@ -561,6 +561,9 @@ char *dbus_session(void) {
if (dbus_env != NULL && strlen(dbus_env) > 0) {
return "";
}
+ if (!dpy) {
+ return "";
+ }
#if NO_X11
return "";
#else
diff --git a/x11vnc/tkx11vnc b/x11vnc/tkx11vnc
index 3aeb327..1350304 100755
--- a/x11vnc/tkx11vnc
+++ b/x11vnc/tkx11vnc
@@ -2532,7 +2532,7 @@ proc see_if_ok {query item expected} {
}
proc get_default_vars {} {
- global default_var
+ global default_var env
set qry [all_query_vars]
@@ -2550,6 +2550,11 @@ proc get_default_vars {} {
if {$i > 50} {
set qargs [list "-QD" $q]
set a [run_remote_cmd $qargs]
+ if [info exists env(TKX11VNC_PRINT_ALL_QD)] {
+ puts $q
+ puts $a
+ puts "---------------"
+ }
if {$all != ""} {
append all ","
}
@@ -2561,6 +2566,11 @@ proc get_default_vars {} {
if {$q != ""} {
set qargs [list "-QD" $q]
set a [run_remote_cmd $qargs]
+ if [info exists env(TKX11VNC_PRINT_ALL_QD)] {
+ puts $q
+ puts $a
+ puts "---------------"
+ }
if {$all != ""} {
append all ","
}
@@ -5982,6 +5992,8 @@ proc get_settings_rcfile {} {
set qst $hmm
} elseif {$item == "nevershared"} {
set qst $hmm
+ } elseif {$item == "gui"} {
+ set qst $hmm
}
if {![info exists menu_var($item)]} {
@@ -6956,15 +6968,19 @@ if {$tk_version < 8.4} {
set screen_height [winfo screenheight .]
set screen_width [winfo screenwidth .]
-if {$screen_height < 500} {
- # short screen, PDA?
- set max_text_height 22
- set text_height 13
- if {$screen_height <= 360} {
- # very short.
- set max_text_height 16
- set max_text_width 60
- set text_height 11
+if {$screen_height < 700} {
+ # short screen, netbook?
+ set max_text_height 30
+ if {$screen_height < 500} {
+ # short screen, PDA?
+ set max_text_height 22
+ set text_height 13
+ if {$screen_height <= 360} {
+ # very short.
+ set max_text_height 16
+ set max_text_width 60
+ set text_height 11
+ }
}
}
if {[info exists env(X11VNC_GUI_TEXT_HEIGHT)]} {
diff --git a/x11vnc/tkx11vnc.h b/x11vnc/tkx11vnc.h
index beea1bb..432920d 100644
--- a/x11vnc/tkx11vnc.h
+++ b/x11vnc/tkx11vnc.h
@@ -2543,7 +2543,7 @@ char gui_code[] = "";
"}\n"
"\n"
"proc get_default_vars {} {\n"
-" global default_var\n"
+" global default_var env\n"
"\n"
" set qry [all_query_vars]\n"
"\n"
@@ -2561,6 +2561,11 @@ char gui_code[] = "";
" if {$i > 50} {\n"
" set qargs [list \"-QD\" $q]\n"
" set a [run_remote_cmd $qargs]\n"
+" if [info exists env(TKX11VNC_PRINT_ALL_QD)] {\n"
+" puts $q\n"
+" puts $a\n"
+" puts \"---------------\"\n"
+" }\n"
" if {$all != \"\"} {\n"
" append all \",\"\n"
" }\n"
@@ -2572,6 +2577,11 @@ char gui_code[] = "";
" if {$q != \"\"} {\n"
" set qargs [list \"-QD\" $q]\n"
" set a [run_remote_cmd $qargs]\n"
+" if [info exists env(TKX11VNC_PRINT_ALL_QD)] {\n"
+" puts $q\n"
+" puts $a\n"
+" puts \"---------------\"\n"
+" }\n"
" if {$all != \"\"} {\n"
" append all \",\"\n"
" }\n"
@@ -5993,6 +6003,8 @@ char gui_code[] = "";
" set qst $hmm\n"
" } elseif {$item == \"nevershared\"} {\n"
" set qst $hmm\n"
+" } elseif {$item == \"gui\"} {\n"
+" set qst $hmm\n"
" }\n"
"\n"
" if {![info exists menu_var($item)]} {\n"
@@ -6967,15 +6979,19 @@ char gui_code[] = "";
"\n"
"set screen_height [winfo screenheight .]\n"
"set screen_width [winfo screenwidth .]\n"
-"if {$screen_height < 500} {\n"
-" # short screen, PDA?\n"
-" set max_text_height 22\n"
-" set text_height 13\n"
-" if {$screen_height <= 360} {\n"
-" # very short.\n"
-" set max_text_height 16\n"
-" set max_text_width 60\n"
-" set text_height 11\n"
+"if {$screen_height < 700} {\n"
+" # short screen, netbook?\n"
+" set max_text_height 30\n"
+" if {$screen_height < 500} {\n"
+" # short screen, PDA?\n"
+" set max_text_height 22\n"
+" set text_height 13\n"
+" if {$screen_height <= 360} {\n"
+" # very short.\n"
+" set max_text_height 16\n"
+" set max_text_width 60\n"
+" set text_height 11\n"
+" }\n"
" }\n"
"}\n"
"if {[info exists env(X11VNC_GUI_TEXT_HEIGHT)]} {\n"
diff --git a/x11vnc/unixpw.c b/x11vnc/unixpw.c
index 3bedfcf..f8fdb20 100644
--- a/x11vnc/unixpw.c
+++ b/x11vnc/unixpw.c
@@ -444,6 +444,9 @@ void unixpw_screen(int init) {
x = nfix(dpy_x / 2 - strlen(log) * char_w, dpy_x);
y = (int) (dpy_y / 3.5);
+ if (unixpw_system_greeter) {
+ y = (int) (dpy_y / 3);
+ }
if (scaling) {
x = (int) (x * scale_fac_x);
@@ -461,7 +464,7 @@ void unixpw_screen(int init) {
pscreen = screen;
}
- if (pscreen && pscreen->width >= 640) {
+ if (pscreen && pscreen->width >= 640 && pscreen->height >= 480) {
rfbDrawString(pscreen, &default6x13Font, 8, 2+1*13, "F1-Help:", white_pixel());
}
f1_help = 0;
@@ -473,8 +476,8 @@ void unixpw_screen(int init) {
char moo[] = "Press 'Escape' for System Greeter";
rfbDrawString(pscreen, &default8x16Font, x-90, y-30, moo, white_pixel());
} else {
- char moo1[] = "Press 'Escape' for New Session via System Greeter,";
- char moo2[] = "or otherwise login here for Existing Session: ";
+ char moo1[] = "Press 'Escape' for a New Session via System Greeter, or";
+ char moo2[] = "otherwise login here to connect to an Existing Session:";
rfbDrawString(pscreen, &default6x13Font, x-110, y-38, moo1, white_pixel());
rfbDrawString(pscreen, &default6x13Font, x-110, y-25, moo2, white_pixel());
}
@@ -1210,7 +1213,7 @@ int su_verify(char *user, char *pass, char *cmd, char *rbuf, int *rbuf_size, int
* auth sufficient pam_self.so
* it may be commented out without problem.
*/
- for (i=0; i<sizeof(instr); i++) {
+ for (i=0; i< (int) sizeof(instr); i++) {
instr[i] = '\0';
}
@@ -1253,7 +1256,7 @@ int su_verify(char *user, char *pass, char *cmd, char *rbuf, int *rbuf_size, int
if (i < -1) i = -1;
continue;
}
- if (j >= sizeof(instr)-1) {
+ if (j >= (int) sizeof(instr)-1) {
rfbLog("su_verify: problem finding Password:\n");
fflush(stderr);
return 0;
@@ -1700,14 +1703,20 @@ void unixpw_keystroke(rfbBool down, rfbKeySym keysym, int init) {
} else if (! down) {
return;
}
- if (keysym == XK_F1 && pscreen && pscreen->width >= 640) {
- char h1[] = "F1-Help: For 'login:' type in the username and press Enter, then for 'Password:' type in the password.";
+ if (keysym == XK_F1) {
+ char h1[] = "F1-Help: For 'login:' type in the username and press Enter, then for 'Password:' enter the password.";
+ char hf[] = " Once logged in, username's X session will be searched for and if found then attached to.";
+ char hc[] = " Once logged in, username's X session is sought and attached to, otherwise a new session is created.";
+ char hx[] = " Once logged in, username's X session is sought and attached to, otherwise a login greeter is presented.";
char h2[] = " Specify options after a ':' like this: username:opt,opt=val,... Where an opt may be any of:";
char h3[] = " scale=... (n/m); scale_cursor=... (sc=); solid (so); id=; repeat; clear_mods (cm); clear_keys (ck);";
char h4[] = " clear_all (ca); speeds=... (sp=); readtimeout=... (rd=) rotate=... (ro=); noncache (nc) (nc=n);";
char h5[] = " geom=WxHxD (ge=); nodisplay=... (nd=); viewonly (vo); tag=...; gnome kde twm fvwm mwm dtwm wmaker";
char h6[] = " xfce lxde enlightenment Xsession failsafe. Examples: fred:3/4,so,cm wilma:geom=1024x768x16,kde";
int ch = 13, p;
+ if (!pscreen || pscreen->width < 640 || pscreen->height < 480) {
+ return;
+ }
if (f1_help) {
p = black_pixel();
f1_help = 0;
@@ -1717,13 +1726,24 @@ void unixpw_keystroke(rfbBool down, rfbKeySym keysym, int init) {
unixpw_last_try_time = time(NULL) + 45;
}
rfbDrawString(pscreen, &default6x13Font, 8, 2+1*ch, h1, p);
- rfbDrawString(pscreen, &default6x13Font, 8, 2+2*ch, h2, p);
- rfbDrawString(pscreen, &default6x13Font, 8, 2+3*ch, h3, p);
- rfbDrawString(pscreen, &default6x13Font, 8, 2+4*ch, h4, p);
- rfbDrawString(pscreen, &default6x13Font, 8, 2+5*ch, h5, p);
- rfbDrawString(pscreen, &default6x13Font, 8, 2+6*ch, h6, p);
+ if (use_dpy == NULL) {
+ ;
+ } else if (strstr(use_dpy, "cmd=FINDDISPLAY")) {
+ rfbDrawString(pscreen, &default6x13Font, 8, 2+2*ch, hf, p);
+ } else if (strstr(use_dpy, "cmd=FINDCREATEDISPLAY")) {
+ if (strstr(use_dpy, "xdmcp")) {
+ rfbDrawString(pscreen, &default6x13Font, 8, 2+2*ch, hx, p);
+ } else {
+ rfbDrawString(pscreen, &default6x13Font, 8, 2+2*ch, hc, p);
+ }
+ }
+ rfbDrawString(pscreen, &default6x13Font, 8, 2+3*ch, h2, p);
+ rfbDrawString(pscreen, &default6x13Font, 8, 2+4*ch, h3, p);
+ rfbDrawString(pscreen, &default6x13Font, 8, 2+5*ch, h4, p);
+ rfbDrawString(pscreen, &default6x13Font, 8, 2+6*ch, h5, p);
+ rfbDrawString(pscreen, &default6x13Font, 8, 2+7*ch, h6, p);
if (!f1_help) {
- rfbDrawString(pscreen, &default6x13Font, 8, 2+1*ch, "F1-Help:", white_pixel());
+ rfbDrawString(pscreen, &default6x13Font, 8, 2+1*ch, "F1-Help:", white_pixel());
}
unixpw_mark();
return;
diff --git a/x11vnc/x11vnc.1 b/x11vnc/x11vnc.1
index a1ac9bc..f40e5e7 100644
--- a/x11vnc/x11vnc.1
+++ b/x11vnc/x11vnc.1
@@ -2,7 +2,7 @@
.TH X11VNC "1" "December 2009" "x11vnc " "User Commands"
.SH NAME
x11vnc - allow VNC connections to real X11 displays
- version: 0.9.10, lastmod: 2009-12-24
+ version: 0.9.10, lastmod: 2009-12-27
.SH SYNOPSIS
.B x11vnc
[OPTION]...
diff --git a/x11vnc/x11vnc.c b/x11vnc/x11vnc.c
index 28db622..b4c0602 100644
--- a/x11vnc/x11vnc.c
+++ b/x11vnc/x11vnc.c
@@ -5018,6 +5018,7 @@ int main(int argc, char* argv[]) {
}
if (dpy && !xrandr && !got_noxrandr) {
+#if !NO_X11
Atom trap_xrandr = XInternAtom(dpy, "X11VNC_TRAP_XRANDR", True);
if (trap_xrandr != None) {
if (! quiet) {
@@ -5025,6 +5026,7 @@ int main(int argc, char* argv[]) {
}
xrandr = 1;
}
+#endif
}
#ifdef MACOSX
diff --git a/x11vnc/x11vnc_defs.c b/x11vnc/x11vnc_defs.c
index d2a0ae3..ce31d67 100644
--- a/x11vnc/x11vnc_defs.c
+++ b/x11vnc/x11vnc_defs.c
@@ -47,7 +47,7 @@ int xtrap_base_event_type = 0;
int xdamage_base_event_type = 0;
/* date +'lastmod: %Y-%m-%d' */
-char lastmod[] = "0.9.10 lastmod: 2009-12-24";
+char lastmod[] = "0.9.10 lastmod: 2009-12-27";
/* X display info */