.\" This file was automatically generated from x11vnc -help output.
.TH X11VNC "1" "December 2010" "x11vnc " "User Commands"
.SH NAME
x11vnc - allow VNC connections to real X11 displays
         version: 0.9.13, lastmod: 2010-12-27
.SH SYNOPSIS
.B x11vnc
[OPTION]...
.SH DESCRIPTION
.PP
Typical usage is:
.IP
Run this command in a shell on the remote machine "far-host"
with X session you wish to view:
.IP
x11vnc -display :0
.IP
Then run this in another window on the machine you are sitting at:
.IP
vncviewer far-host:0
.PP
Once x11vnc establishes connections with the X11 server and starts listening
as a VNC server it will print out a string: PORT=XXXX where XXXX is typically
5900 (the default VNC server port).  One would next run something like
this on the local machine: "vncviewer hostname:N" where "hostname" is
the name of the machine running x11vnc and N is XXXX - 5900, i.e. usually
"vncviewer hostname:0".
.PP
By default x11vnc will not allow the screen to be shared and it will exit
as soon as the client disconnects.  See \fB-shared\fR and \fB-forever\fR below to override
these protections.  See the FAQ for details how to tunnel the VNC connection
through an encrypted channel such as 
.IR ssh (1).
In brief:
.IP
ssh \fB-t\fR \fB-L\fR 5900:localhost:5900 far-host 'x11vnc \fB-localhost\fR \fB-display\fR :0'
.PP
% vncviewer -encodings 'copyrect tight zrle hextile' localhost:0
.PP
Also, use of a VNC password (-rfbauth or \fB-passwdfile)\fR is strongly recommended.
.PP
For additional info see: http://www.karlrunge.com/x11vnc/
and  http://www.karlrunge.com/x11vnc/faq.html
.PP
Config file support: if the file $HOME/.x11vncrc exists then each line in
it is treated as a single command line option.  Disable with \fB-norc.\fR  For
each option name, the leading character "-" is not required.  E.g. a line
that is either "forever" or "\fB-forever\fR" may be used and are equivalent.
Likewise "wait 100" or "\fB-wait\fR \fI100\fR" are acceptable and equivalent lines.
The "#" character comments out to the end of the line in the usual way
(backslash it for a literal).  Leading and trailing whitespace is trimmed off.
Lines may be continued with a "\\" as the last character of a line (it
becomes a space character).
.PP
.SH OPTIONS

.PP
\fB-display\fR \fIdisp\fR
.IP
X11 server display to connect to, usually :0.  The X
server process must be running on same machine and
support MIT-SHM.  Equivalent to setting the DISPLAY
environment variable to \fIdisp\fR.
.IP
See the description below of the "\fB-display\fR \fIWAIT:...\fR"
extensions, where alias "\fB-find\fR" will find the user's
display automatically, and "\fB-create\fR" will create a
Xvfb session if no session is found.
.PP
\fB-auth\fR \fIfile\fR
.IP
Set the X authority file to be \fIfile\fR, equivalent to
setting the XAUTHORITY environment variable to \fIfile\fR
before startup.  Same as \fB-xauth\fR file.  See 
.IR Xsecurity (7)
,
.IR xauth (1)
man pages for more info.
.IP
Use '-auth guess' to have x11vnc use its \fB-findauth\fR
mechanism (described below) to try to guess the
XAUTHORITY filename and use it.
.IP
XDM/GDM/KDM: if you are running x11vnc as root and want
to find the XAUTHORITY before anyone has logged into an
X session yet, use: x11vnc \fB-env\fR FD_XDM=1 \fB-auth\fR guess ...
(This will also find the XAUTHORITY if a user is already
logged into the X session.)  When running as root,
FD_XDM=1 will be tried if the initial \fB-auth\fR guess fails.
.PP
\fB-N\fR
.IP
If the X display is :N, try to set the VNC display to
also be :N This just sets the \fB-rfbport\fR option to 5900+N
The program will exit immediately if that port is not
available. The \fB-N\fR option only works with normal \fB-display\fR
usage, e.g. :0 or :8, \fB-N\fR is ignored in the \fB-display\fR
WAIT:..., \fB-create,\fR \fB-find,\fR \fB-svc,\fR \fB-redirect,\fR etc modes.
.PP
\fB-autoport\fR \fIn\fR
.IP
Automatically probe for a free VNC port starting at n.
The default is to start probing at 5900.  Use this to
stay away from other VNC servers near 5900.
.PP
\fB-rfbport\fR \fIstr\fR
.IP
The VNC port to listen on (a LibVNCServer option), e.g.
5900, 5901, etc.  If specified as "\fB-rfbport\fR \fIPROMPT\fR"
then the x11vnc \fB-gui\fR is used to prompt the user to
enter the port number.
.PP
\fB-6\fR
.IP
IPv6 listening support.  In addition to IPv4, the
IPv6 address is listened on for incoming connections.
The same port number as IPv4 is used.
.IP
NOTE:  This x11vnc binary was compiled to have the
"-6" IPv6 listening mode ENABLED by default (CPPFLAGS
\fB-DX11VNC_LISTEN6=1).\fR  So to disable IPv6 listening mode
you MUST supply the "\fB-no6\fR" option (see below.)
.IP
The "-6" mode works for both normal connections and
\fB-ssl\fR encrypted ones.  Nearly everything is supported
for the IPv6 case, but there are a few exceptions.
See \fB-stunnel\fR for its IPv6 support.
.IP
Currently, for absolutely everything to work correctly
the machine may need to have some IPv4 support, at the
least for the loopback interface.  However, for nearly
all usage modes no IPv4 support is required. See \fB-nopiv4.\fR
.IP
If you have trouble compiling or running in IPv6 mode,
set \fB-DX11VNC_IPV6=0\fR in CPPFLAGS when configuring to
disable IPv6 support.
.PP
\fB-no6\fR
.IP
Disable IPv6 listening support (only useful if the
"-6" mode is compiled in to be the default; see the
X11VNC_LISTEN6 description above under "-6".)
.PP
\fB-noipv6\fR
.IP
Do not try to use IPv6 for any listening or connecting
sockets.  This includes both the listening service
port(s) and outgoing connections from \fB-connect,\fR
\fB-connect_or_exit,\fR or \fB-proxy.\fR  Use this if you are having
problems due to IPv6.
.PP
\fB-noipv4\fR
.IP
Do not try to use IPv4 for any listening or connecting
sockets.  This is mainly for exploring the behavior of
x11vnc on an IPv6-only system, but may have other uses.
.PP
\fB-reopen\fR
.IP
If the X server connection is disconnected, try to
reopen the X display (up to one time.)  This is of use
for display managers like GDM (KillInitClients option)
that kill x11vnc just after the user logs into the
X session.  Note: the reopened state may be unstable.
Set X11VNC_REOPEN_DISPLAY=n to reopen n times and
set X11VNC_REOPEN_SLEEP_MAX to the number of seconds,
default 10, to keep trying to reopen the display (once
per second.)
.IP
Update: as of 0.9.9, x11vnc tries to automatically avoid
being killed by the display manager by delaying creating
windows or using XFIXES.  So you shouldn't need to use
KillInitClients=false as long as you log in quickly
enough (within 45 seconds of connecting.)  You can
disable this by setting X11VNC_AVOID_WINDOWS=never.
You can also set it to the number of seconds to delay.
.PP
\fB-reflect\fR \fIhost:N\fR
.IP
Instead of connecting to and polling an X display,
connect to the remote VNC server host:N and be a
reflector/repeater for it.  This is useful for trying
to manage the case of many simultaneous VNC viewers
(e.g. classroom broadcasting) where, e.g. you put
a repeater on each network switch, etc, to improve
performance by distributing the load and network
traffic.  Implies \fB-shared\fR (use \fB-noshared\fR as a later
option to disable). See the discussion below under
\fB-rawfb\fR vnc:host:N for more details.
.PP
\fB-id\fR \fIwindowid\fR
.IP
Show the X window corresponding to \fIwindowid\fR not
the entire display.  New windows like popup menus,
transient toplevels, etc, may not be seen or may be
clipped.  Disabling SaveUnders or BackingStore in the
X server may help show them.  x11vnc may crash if the
window is initially partially obscured, changes size,
is iconified, etc.  Some steps are taken to avoid this
and the \fB-xrandr\fR mechanism is used to track resizes.  Use
.IR xwininfo (1)
to get the window id, or use "\fB-id\fR \fIpick\fR"
to have x11vnc run 
.IR xwininfo (1)
for you and extract
the id.  The \fB-id\fR option is useful for exporting very
simple applications (e.g. the current view on a webcam).
.PP
\fB-sid\fR \fIwindowid\fR
.IP
As \fB-id,\fR but instead of using the window directly it
shifts a root view to it: this shows SaveUnders menus,
etc, although they will be clipped if they extend beyond
the window.
.PP
\fB-appshare\fR
.IP
Simple application sharing based on the \fB-id/-sid\fR
mechanism.  Every new toplevel window that the
application creates induces a new viewer window via
a reverse connection.  The \fB-id/-sid\fR and \fB-connect\fR
options are required.  Run 'x11vnc \fB-appshare\fR \fB-help'\fR
for more info.
.PP
\fB-clip\fR \fIWxH+X+Y\fR
.IP
Only show the sub-region of the full display that
corresponds to the rectangle geometry with size WxH and
offset +X+Y.  The VNC display has size WxH (i.e. smaller
than the full display).  This also works for \fB-id/-sid\fR
mode where the offset is relative to the upper left
corner of the selected window.  An example use of this
option would be to split a large (e.g. Xinerama) display
into two parts to be accessed via separate viewers by
running a separate x11vnc on each part.
.IP
Use '-clip xinerama0' to clip to the first xinerama
sub-screen (if xinerama is active).  xinerama1 for the
2nd sub-screen, etc.  This way you don't need to figure
out the WxH+X+Y of the desired xinerama sub-screen.
screens are sorted in increasing distance from the
(0,0) origin (I.e. not the Xserver's order).
.PP
\fB-flashcmap\fR
.IP
In 8bpp indexed color, let the installed colormap flash
as the pointer moves from window to window (slow).
Also try the \fB-8to24\fR option to avoid flash altogether.
.PP
\fB-shiftcmap\fR \fIn\fR
.IP
Rare problem, but some 8bpp displays use less than 256
colorcells (e.g. 16-color grayscale, perhaps the other
bits are used for double buffering) *and* also need to
shift the pixels values away from 0, .., ncells.  \fIn\fR
indicates the shift to be applied to the pixel values.
To see the pixel values set DEBUG_CMAP=1 to print out
a colormap histogram.  Example: \fB-shiftcmap\fR 240
.PP
\fB-notruecolor\fR
.IP
For 8bpp displays, force indexed color (i.e. a colormap)
even if it looks like 8bpp TrueColor (rare problem).
.PP
\fB-advertise_truecolor\fR
.IP
If the X11 display is indexed color, lie to clients
when they first connect by telling them it is truecolor.
To workaround RealVNC: inPF has colourMap but not 8bpp
Use '-advertise_truecolor reset' to reset client fb too.
.PP
\fB-visual\fR \fIn\fR
.IP
This option probably does not do what you think.
It simply *forces* the visual used for the framebuffer;
this may be a bad thing... (e.g. messes up colors or
cause a crash). It is useful for testing and for some
workarounds.  n may be a decimal number, or 0x hex.
Run 
.IR xdpyinfo (1)
for the values.  One may also use
"TrueColor", etc. see <X11/X.h> for a list.  If the
string ends in ":m" then for better or for worse
the visual depth is forced to be m.  You may want to
use \fB-noshm\fR when using this option (so XGetImage may
automatically translate the pixel data).
.PP
\fB-overlay\fR
.IP
Handle multiple depth visuals on one screen, e.g. 8+24
and 24+8 overlay visuals (the 32 bits per pixel are
packed with 8 for PseudoColor and 24 for TrueColor).
.IP
Currently \fB-overlay\fR only works on Solaris via
.IR XReadScreen (3X11)
and IRIX using 
.IR XReadDisplay (3).
On Solaris there is a problem with image "bleeding"
around transient popup menus (but not for the menu
itself): a workaround is to disable SaveUnders
by passing the "\fB-su\fR" argument to Xsun (in
/etc/dt/config/Xservers).
.IP
Use \fB-overlay\fR as a workaround for situations like these:
Some legacy applications require the default visual to
be 8bpp (8+24), or they will use 8bpp PseudoColor even
when the default visual is depth 24 TrueColor (24+8).
In these cases colors in some windows will be incorrect
in x11vnc unless \fB-overlay\fR is used.  Another use of
\fB-overlay\fR is to enable showing the exact mouse cursor
shape (details below).
.IP
Under \fB-overlay,\fR performance will be somewhat slower
due to the extra image transformations required.
For optimal performance do not use \fB-overlay,\fR but rather
configure the X server so that the default visual is
depth 24 TrueColor and try to have all apps use that
visual (e.g. some apps have \fB-use24\fR or \fB-visual\fR options).
.PP
\fB-overlay_nocursor\fR
.IP
Sets \fB-overlay,\fR but does not try to draw the exact mouse
cursor shape using the overlay mechanism.
.PP
\fB-8to24\fR \fI[opts]\fR
.IP
Try this option if \fB-overlay\fR is not supported on your
OS, and you have a legacy 8bpp app that you want to
view on a multi-depth display with default depth 24
(and is 32 bpp) OR have a default depth 8 display with
depth 24 overlay windows for some apps.  This option
may not work on all X servers and hardware (tested
on XFree86/Xorg mga driver and Xsun).  The "opts"
string is not required and is described below.
.IP
This mode enables a hack where x11vnc monitors windows
within 3 levels from the root window.  If it finds
any that are 8bpp it extracts the indexed color
pixel values using XGetImage() and then applies a
transformation using the colormap(s) to create TrueColor
RGB values that it in turn inserts into bits 1-24 of
the framebuffer.  This creates a depth 24 "view"
of the display that is then exported via VNC.
.IP
Conversely, for default depth 8 displays, the depth
24 regions are read by XGetImage() and everything is
transformed and inserted into a depth 24 TrueColor
framebuffer.
.IP
Note that even if there are *no* depth 24 visuals or
windows (i.e. pure 8bpp), this mode is potentially
an improvement over \fB-flashcmap\fR because it avoids the
flashing and shows each window in the correct color.
.IP
This method works OK, but may still have bugs and it
does hog resources.  If there are multiple 8bpp windows
using different colormaps, one may have to iconify all
but one for the colors to be correct.
.IP
There may be painting errors for clipping and switching
between windows of depths 8 and 24.  Heuristics are
applied to try to minimize the painting errors.  One can
also press 3 Alt_L's in a row to refresh the screen
if the error does not repair itself.  Also the option
\fB-fixscreen\fR 8=3.0 or \fB-fixscreen\fR V=3.0 may be used to
periodically refresh the screen at the cost of bandwidth
(every 3 sec for this example).
.IP
The [opts] string can contain the following settings.
Multiple settings are separated by commas.
.IP
For for some X servers with default depth 24 a
speedup may be achieved via the option "nogetimage".
This enables a scheme were XGetImage() is not used
to retrieve the 8bpp data.  Instead, it assumes that
the 8bpp data is in bits 25-32 of the 32bit X pixels.
There is no requirement that the X server should put
the data there for our poll requests, but some do and
so the extra steps to retrieve it can be skipped.
Tested with mga driver with XFree86/Xorg.  For the
default depth 8 case this option is ignored.
.IP
To adjust how often XGetImage() is used to poll the
non-default visual regions for changes, use the option
"poll=t" where "t" is a floating point time.
(default: 0.05)
.IP
Setting the option "level2" will limit the search
for non-default visual windows to two levels from the
root window.  Do this on slow machines where you know
the window manager only imposes one extra window between
the app window and the root window.
.IP
Also for very slow machines use "cachewin=t"
where t is a floating point amount of time to cache
XGetWindowAttributes results.  E.g. cachewin=5.0.
This may lead to the windows being unnoticed for this
amount of time when deiconifying, painting errors, etc.
.IP
While testing on a very old SS20 these options gave
tolerable response: \fB-8to24\fR poll=0.2,cachewin=5.0. For
this machine \fB-overlay\fR is supported and gives better
response.
.IP
Debugging for this mode can be enabled by setting
"dbg=1", "dbg=2", or "dbg=3".
.PP
\fB-24to32\fR
.IP
Very rare problem: if the framebuffer (X display
or \fB-rawfb)\fR is 24bpp instead of the usual 32bpp, then
dynamically transform the pixels to 32bpp.  This will be
slower, but can be used to work around problems where
VNC viewers cannot handle 24bpp (e.g. "main: setPF:
not 8, 16 or 32 bpp?").  See the FAQ for more info.
.IP
In the case of \fB-rawfb\fR mode, the pixels are directly
modified by inserting a 0 byte to pad them out to 32bpp.
For X displays, a kludge is done that is equivalent to
"\fB-noshm\fR \fI\fB-visual\fR TrueColor:32\fR".  (If better performance
is needed for the latter, feel free to ask).
.PP
\fB-scale\fR \fIfraction\fR
.IP
Scale the framebuffer by factor \fIfraction\fR.  Values
less than 1 shrink the fb, larger ones expand it. Note:
the image may not be sharp and response may be slower.
If \fIfraction\fR contains a decimal point "." it
is taken as a floating point number, alternatively
the notation "m/n" may be used to denote fractions
exactly, e.g. \fB-scale\fR 2/3
.IP
To scale asymmetrically in the horizontal and vertical
directions, specify a WxH geometry to stretch to:
e.g. '-scale 1024x768', or also '-scale 0.9x0.75'
.IP
Scaling Options: can be added after \fIfraction\fR via
":", to supply multiple ":" options use commas.
If you just want a quick, rough scaling without
blending, append ":nb" to \fIfraction\fR (e.g. \fB-scale\fR
1/3:nb).  No blending is the default for 8bpp indexed
color, to force blending for this case use ":fb".
.IP
To disable \fB-scrollcopyrect\fR and \fB-wirecopyrect\fR under
\fB-scale\fR use ":nocr".  If you need to to enable them use
":cr" or specify them explicitly on the command line.
If a slow link is detected, ":nocr" may be applied
automatically.  Default: :cr
.IP
More esoteric options: for compatibility with vncviewers
the scaled width is adjusted to be a multiple of 4:
to disable this use ":n4".  ":in" use interpolation
scheme even when shrinking, ":pad" pad scaled width
and height to be multiples of scaling denominator
(e.g. 3 for 2/3).
.PP
\fB-geometry\fR \fIWxH\fR
.IP
Same as \fB-scale\fR WxH
.PP
\fB-scale_cursor\fR \fIfrac\fR
.IP
By default if \fB-scale\fR is supplied the cursor shape is
scaled by the same factor.  Depending on your usage,
you may want to scale the cursor independently of the
screen or not at all.  If you specify \fB-scale_cursor\fR
the cursor will be scaled by that factor.  When using
\fB-scale\fR mode to keep the cursor at its "natural" size
use "\fB-scale_cursor\fR \fI1\fR".  Most of the ":" scaling
options apply here as well.
.PP
\fB-viewonly\fR
.IP
All VNC clients can only watch (default off).
.PP
\fB-shared\fR
.IP
VNC display is shared, i.e. more than one viewer can
connect at the same time (default off).
.PP
\fB-once\fR
.IP
Exit after the first successfully connected viewer
disconnects, opposite of \fB-forever.\fR This is the Default.
.PP
\fB-forever\fR
.IP
Keep listening for more connections rather than exiting
as soon as the first client(s) disconnect. Same as \fB-many\fR
.IP
To get the standard non-shared VNC behavior where when
a new VNC client connects the existing VNC client is
dropped use:  \fB-nevershared\fR \fB-forever\fR   This method can
also be used to guard against hung TCP connections that
do not go away.
.PP
\fB-loop\fR
.IP
Create an outer loop restarting the x11vnc process
whenever it terminates.  \fB-bg\fR and \fB-inetd\fR are ignored
in this mode (however see \fB-loopbg\fR below).
.IP
Useful for continuing even if the X server terminates
and restarts (at that moment the process will need
permission to reconnect to the new X server of course).
.IP
Use, e.g., \fB-loop100\fR to sleep 100 millisecs between
restarts, etc.  Default is 2000ms (i.e. 2 secs) Use,
e.g. \fB-loop300,5\fR to sleep 300 ms and only loop 5 times.
.IP
If \fB-loopbg\fR (plus any numbers) is specified instead,
the "\fB-bg\fR" option is implied and the mode approximates
.IR inetd (8)
usage to some degree.  In this case when
it goes into the background any listening sockets
(i.e. ports 5900, 5800) are closed, so the next one
in the loop can use them.  This mode will only be of
use if a VNC client (the only client for that process)
is already connected before the process goes into the
background, for example, usage of \fB-display\fR WAIT:..,
\fB-svc,\fR and \fB-connect\fR can make use of this "poor man's"
inetd mode.  The default wait time is 500ms in this
mode.  This usage could use useful:  \fB-svc\fR \fB-bg\fR \fB-loopbg\fR
.PP
\fB-timeout\fR \fIn\fR
.IP
Exit unless a client connects within the first n seconds
after startup.
.IP
If there have been no connection attempts after n
seconds x11vnc exits immediately.  If a client is
trying to connect but has not progressed to the normal
operating state, x11vnc gives it a few more seconds
to finish and exits if it does not make it to the
normal state.
.IP
For reverse connections via \fB-connect\fR or \fB-connect_or_exit\fR
a timeout of n seconds will be set for all reverse
connects.  If the connect timeout alarm goes off,
x11vnc will exit immediately.
.PP
\fB-sleepin\fR \fIn\fR
.IP
At startup sleep n seconds before proceeding (e.g. to
allow redirs and listening clients to start up)
.IP
If a range is given: '-sleepin min-max', a random value
between min and max is slept. E.g. '-sleepin 0-20' and
\'-sleepin 10-30'.  Floats are allowed too.
.PP
\fB-inetd\fR
.IP
Launched by 
.IR inetd (8):
stdio instead of listening socket.
Note: if you are not redirecting stderr to a log file
(via shell 2> or \fB-o\fR option) you MUST also specify the \fB-q\fR
option, otherwise the stderr goes to the viewer which
will cause it to abort.  Specifying both \fB-inetd\fR and \fB-q\fR
and no \fB-o\fR will automatically close the stderr.
.PP
\fB-tightfilexfer\fR
.IP
Enable the TightVNC file transfer extension. Note that
that when the \fB-viewonly\fR option is supplied all file
transfers are disabled.  Also clients that log in
viewonly cannot transfer files.  However, if the remote
control mechanism is used to change the global or
per-client viewonly state the filetransfer permissions
will NOT change.
.IP
IMPORTANT: please understand if \fB-tightfilexfer\fR is
specified and you run x11vnc as root for, say, inetd
or display manager (gdm, kdm, ...) access and you do
not have it switch users via the \fB-users\fR option, then
VNC Viewers that connect are able to do filetransfer
reads and writes as *root*.
.IP
Also, tightfilexfer is disabled in \fB-unixpw\fR mode.
.PP
\fB-ultrafilexfer\fR
.IP
Note: to enable UltraVNC filetransfer and to get it to
work you probably need to supply these LibVNCServer
options: "\fB-rfbversion\fR \fI3.6 \fB-permitfiletransfer\fR"\fR
"\fB-ultrafilexfer\fR" is an alias for this combination.
.IP
IMPORTANT: please understand if \fB-ultrafilexfer\fR is
specified and you run x11vnc as root for, say, inetd
or display manager (gdm, kdm, ...) access and you do
not have it switch users via the \fB-users\fR option, then
VNC Viewers that connect are able to do filetransfer
reads and writes as *root*.
.IP
Note that sadly you cannot do both \fB-tightfilexfer\fR and
\fB-ultrafilexfer\fR at the same time because the latter
requires setting the version to 3.6 and tightvnc will
not do filetransfer when it sees that version number.
.PP
\fB-http\fR
.IP
Instead of using \fB-httpdir\fR (see below) to specify
where the Java vncviewer applet is, have x11vnc try
to *guess* where the directory is by looking relative
to the program location and in standard locations
(/usr/local/share/x11vnc/classes, etc).  Under \fB-ssl\fR or
\fB-stunnel\fR the ssl classes subdirectory is sought.
.PP
\fB-http_ssl\fR
.IP
As \fB-http,\fR but force lookup for ssl classes subdir.
.IP
Note that for HTTPS, single-port Java applet delivery
you can set X11VNC_HTTPS_DOWNLOAD_WAIT_TIME to the
max number of seconds to wait for the applet download
to finish.  The default is 15.
.PP
\fB-avahi\fR
.IP
Use the Avahi/mDNS ZeroConf protocol to advertise
this VNC server to the local network. (Related terms:
Rendezvous, Bonjour).  Depending on your setup, you
may need to start avahi-daemon and open udp port 5353
in your firewall.
.IP
You can set X11VNC_AVAHI_NAME, X11VNC_AVAHI_HOST,
and/or X11VNC_AVAHI_PORT environment variables
to override the default values.  For example:
\fB-env\fR X11VNC_AVAHI_NAME=wally
.IP
If the avahi API cannot be found at build time, a helper
program like avahi-
.IR publish (1)
or dns-
.IR sd (1)
will be tried
.PP
\fB-mdns\fR
.IP
Same as \fB-avahi.\fR
.PP
\fB-zeroconf\fR
.IP
Same as \fB-avahi.\fR
.PP
\fB-connect\fR \fIstring\fR
.IP
For use with "vncviewer -listen" reverse connections.
If \fIstring\fR has the form "host" or "host:port"
the connection is made once at startup.
.IP
Use commas for a list of host's and host:port's.
E.g. \fB-connect\fR host1,host2 or host1:0,host2:5678.
Note that to reverse connect to multiple hosts at the
same time you will likely need to also supply: \fB-shared\fR
.IP
Note that unlike most vnc servers, x11vnc will require a
password for reverse as well as for forward connections.
(provided password auth has been enabled, \fB-rfbauth,\fR etc)
If you do not want to require a password for reverse
connections set X11VNC_REVERSE_CONNECTION_NO_AUTH=1 in
your environment before starting x11vnc.
.IP
If \fIstring\fR contains "/" it is instead interpreted
as a file to periodically check for new hosts.
The first line is read and then the file is truncated.
Be careful about the location of this file if x11vnc
is running as root (e.g. via 
.IR gdm (1)
, etc).
.IP
Repeater mode: Some services provide an intermediate
"vnc repeater": http://www.uvnc.com/addons/repeater.html
(and also http://koti.mbnet.fi/jtko/ for linux port)
that acts as a proxy/gateway.  Modes like these require
an initial string to be sent for the reverse connection
before the VNC protocol is started.  Here are the ways
to do this:
.IP
\fB-connect\fR pre=some_string+host:port
\fB-connect\fR pre128=some_string+host:port
\fB-connect\fR repeater=ID:1234+host:port
\fB-connect\fR repeater=23.45.67.89::5501+host:port
.IP
SSVNC notation is also supported:
.IP
\fB-connect\fR repeater://host:port+ID:1234
.IP
As with normal \fB-connect\fR usage, if the repeater port is
not supplied 5500 is assumed.
.IP
The basic idea is between the special tag, e.g. "pre="
and "+" is the pre-string to be sent.  Note that in
this case host:port is the repeater server, NOT the
vnc viewer.  Somehow the pre-string tells the repeater
server how to find the vnc viewer and connect you to it.
.IP
In the case pre=some_string+host:port, "some_string"
is simply sent. In the case preNNN=some_string+host:port
"some_string" is sent in a null padded buffer of
length NNN.  repeater= is the same as pre250=, this is
the ultravnc repeater buffer size.
.IP
Strings like "\\n" and "\\r", etc. are expanded to
newline and carriage return.  "\\c" is expanded to
"," since the connect string is comma separated.
.IP
See also the \fB-proxy\fR option below for additional ways
to plumb reverse connections.
.IP
Reverse SSL: using \fB-connect\fR in \fB-ssl\fR mode makes x11vnc
act as an SSL client (initiates SSL connection) rather
than an SSL server.  The idea is x11vnc might be
connecting to stunnel on the viewer side with the
viewer in listening mode.  If you do not want this
behavior, use \fB-env\fR X11VNC_DISABLE_SSL_CLIENT_MODE=1.
With this the viewer side can act as the SSL client
as it normally does for forward connections.
.IP
Reverse SSL Repeater mode:  This will work, but note
that if the VNC Client does any sort of a 'Fetch Cert'
action before connecting, then the Repeater will
likely drop the connection and both sides will need
to restart.  Consider the use of \fB-connect_or_exit\fR
and \fB-loop300,2\fR to have x11vnc reconnect once to the
repeater after the fetch.  You will probably also want
to supply \fB-sslonly\fR to avoid x11vnc thinking the delay
in response means the connection is VeNCrypt.  The env
var X11VNC_DISABLE_SSL_CLIENT_MODE=1 discussed above
may also be useful (i.e. the viewer can do a forward
connection as it normally does.)
.IP
IPv6: as of x11vnc 0.9.10 the \fB-connect\fR option should
connect to IPv6 hosts properly.  If there are problems
you can disable IPv6 by setting \fB-DX11VNC_IPV6=0\fR
in CPPFLAGS when configuring.  If there problems
connecting to IPv6 hosts consider a relay like the
included inet6to4 script or the \fB-proxy\fR option.
.PP
\fB-connect_or_exit\fR \fIstr\fR
.IP
As with \fB-connect,\fR except if none of the reverse
connections succeed, then x11vnc shuts down immediately
.IP
An easier to type alias for this option is '-coe'
.IP
By the way, if you do not want x11vnc to listen on
ANY interface use \fB-rfbport\fR 0  which is handy for the
\fB-connect_or_exit\fR mode.
.PP
\fB-proxy\fR \fIstring\fR
.IP
Use proxy in string (e.g. host:port) as a proxy for
making reverse connections (-connect or \fB-connect_or_exit\fR
options).
.IP
Web proxies are supported, but note by default most of
them only support destination connections to ports 443
or 563, so this might not be very useful (the viewer
would need to listen on that port or the router would
have to do a port redirection).
.IP
A web proxy may be specified by either "host:port"
or "http://host:port" (the port is required even if
it is the common choices 80 or 8080)
.IP
SOCKS4, SOCKS4a, and SOCKS5 are also supported.
SOCKS proxies normally do not have restrictions on the
destination port number.
.IP
Use a format like this: socks://host:port or
socks5://host:port.  Note that ssh \fB-D\fR does not support
SOCKS4a, so use socks5://.  For socks:// SOCKS4 is used
on a numerical IP and "localhost", otherwise SOCKS4a
is used (and so the proxy tries to do the DNS lookup).
.IP
An experimental mode is "\fB-proxy\fR \fIhttp://host:port/...\fR"
Note the "/" after the port that distinguishes it from
a normal web proxy.  The port must be supplied even if
it is the default 80.  For this mode a GET is done to
the supplied URL with the string host=H&port=P appended.
H and P will be the \fB-connect\fR reverse connect host
and port.  Use the string "__END__" to disable the
appending.  The basic idea here is that maybe some cgi
script provides the actual viewer hookup and tunnelling.
How to actually achieve this within cgi, php, etc. is
not clear...  A custom web server or apache module
would be straight-forward.
.IP
Another experimental mode is "\fB-proxy\fR \fIssh://user@host\fR"
in which case a SSH tunnel is used for the proxying.
"user@" is not needed unless your unix username is
different on "host".  For a non-standard SSH port
use ssh://user@host:port.  If proxies are chained (see
next paragraph) then the ssh one must be the first one.
If ssh-agent is not active, then the ssh password needs
to be entered in the terminal where x11vnc is running.
Examples:
.IP
\fB-connect\fR localhost:0 \fB-proxy\fR ssh://me@friends-pc:2222
.IP
\fB-connect\fR snoopy:0 \fB-proxy\fR ssh://ssh.company.com
.IP
Multiple proxies may be chained together in case one
needs to ricochet off of a number of hosts to finally
reach the VNC viewer.  Up to 3 may be chained, separate
them by commas in the order they are to be connected to.
E.g.:  http://host1:port1,socks5://host2:port2 or three
like:  first,second,third
.IP
IPv6: as of x11vnc 0.9.10 the \fB-proxy\fR option should
connect to IPv6 hosts properly.  If there are problems
you can disable IPv6 by setting \fB-DX11VNC_IPV6=0\fR
in CPPFLAGS when configuring.  If there problems
connecting to IPv6 hosts consider a relay like the
included inet6to4 script.
.PP
\fB-vncconnect,\fR \fB-novncconnect\fR
.IP
Monitor the VNC_CONNECT X property set by the standard
VNC program 
.IR vncconnect (1).
When the property is
set to "host" or "host:port" establish a reverse
connection.  Using 
.IR xprop (1)
instead of vncconnect may
work (see the FAQ).  The \fB-remote\fR control mechanism uses
X11VNC_REMOTE channel, and this option disables/enables
it as well.  Default: \fB-vncconnect\fR
.IP
To use different names for these X11 properties (e.g. to
have separate communication channels for multiple
x11vnc's on the same display) set the VNC_CONNECT or
X11VNC_REMOTE env. vars. to the string you want, for
example: \fB-env\fR X11VNC_REMOTE=X11VNC_REMOTE_12345
Both sides of the channel must use the same unique name.
The same can be done for the internal X11VNC_TICKER
property (heartbeat and timestamp) if desired.
.PP
\fB-allow\fR \fIhost1[,host2..]\fR
.IP
Only allow client connections from hosts matching
the comma separated list of hostnames or IP addresses.
Can also be a numerical IP prefix, e.g. "192.168.100."
to match a simple subnet, for more control build
LibVNCServer with libwrap support (See the FAQ).  If the
list contains a "/" it instead is a interpreted
as a file containing addresses or prefixes that is
re-read each time a new client connects.  Lines can be
commented out with the "#" character in the usual way.
.IP
\fB-allow\fR applies in \fB-ssl\fR mode, but not in \fB-stunnel\fR mode.
.IP
IPv6: as of x11vnc 0.9.10 a host can be specified
in IPv6 numerical format, e.g. 2001:4860:b009::93.
.PP
\fB-localhost\fR
.IP
Basically the same as "\fB-allow\fR \fI127.0.0.1\fR".
.IP
Note: if you want to restrict which network interface
x11vnc listens on, see the \fB-listen\fR option below.
E.g. "\fB-listen\fR \fIlocalhost\fR" or "\fB-listen\fR \fI192.168.3.21\fR".
As a special case, the option "\fB-localhost\fR" implies
"\fB-listen\fR \fIlocalhost\fR".
.IP
A rare case, but for non-localhost \fB-listen\fR usage, if
you use the remote control mechanism (-R) to change
the \fB-listen\fR interface you may need to manually adjust
the \fB-allow\fR list (and vice versa) to avoid situations
where no connections (or too many) are allowed.
.IP
If you do not want x11vnc to listen on ANY interface
(evidently you are using \fB-connect\fR or \fB-connect_or_exit,\fR
or plan to use remote control: \fB-R\fR connect:host), use
\fB-rfbport\fR 0
.IP
IPv6: if IPv6 is supported, this option automatically
implies the IPv6 loopback address '::1' as well.
.PP
\fB-unixsock\fR \fIstr\fR
.IP
Listen on the unix socket (AF_UNIX) 'str'
for connections.  This mode is for either local
connections or a tunnel endpoint where one wants the
file permission of the unix socket file to determine
what can connect to it.  (This currently requires an
edit to libvnserver/rfbserver.c: comment out lines 310
and 311, 'close(sock)' and 'return NULL' in rfbserver.c
after the setsockopt() call.) Note that to disable all
tcp listening ports specify '-rfbport 0' and should be
useful with this mode.  Example:
mkdir ~/s; chmod 700 ~/s;
x11vnc \fB-unixsock\fR ~/s/mysock \fB-rfbport\fR 0 ...
The SSVNC unix vncviewer can connect to unix sockets.
.PP
\fB-listen6\fR \fIstr\fR
.IP
When in IPv6 listen mode "-6", listen only on the
network interface with address \fIstr\fR.  It also works
for link scope addresses (fe80::219:dbff:fee5:3f92%eth0)
and IPv6 hostname strings (e.g. ipv6.google.com.)
Use LibVNCServer \fB-listen\fR option for the IPv4 interface.
.PP
\fB-nolookup\fR
.IP
Do not use gethostbyname() or gethostbyaddr() to look up
host names or IP numbers.  Use this if name resolution
is incorrectly set up and leads to long pauses as name
lookups time out, etc.
.PP
\fB-input\fR \fIstring\fR
.IP
Fine tuning of allowed user input.  If \fIstring\fR does
not contain a comma "," the tuning applies only to
normal clients.  Otherwise the part before "," is
for normal clients and the part after for view-only
clients.  "K" is for Keystroke input, "M" for
Mouse-motion input, "B" for Button-click input, "C"
is for Clipboard input, and "F" is for File transfer
(ultravnc only).  Their presence in the string enables
that type of input.  E.g. "\fB-input\fR \fIM\fR" means normal
users can only move the mouse and  "\fB-input\fR \fIKMBCF,M\fR"
lets normal users do anything and enables view-only
users to move the mouse.  This option is ignored when
a global \fB-viewonly\fR is in effect (all input is discarded
in that case).
.PP
\fB-grabkbd\fR
.IP
When VNC viewers are connected, attempt to the grab
the keyboard so a (non-malicious) user sitting at the
physical display is not able to enter keystrokes.
This method uses 
.IR XGrabKeyboard (3X11)
and so it is
not secure and does not rule out the person at the
physical display injecting keystrokes by flooding the
server with them, grabbing the keyboard himself, etc.
Some degree of cooperation from the person at the
display is assumed.  This is intended for remote
help-desk or educational usage modes.
.IP
Note: on some recent (12/2010) X servers and/or
desktops, \fB-grabkbd\fR no longer works: it prevents the
window manager from resizing windows and similar things.
Try \fB-ungrabboth\fR below (might not work.)
.PP
\fB-grabptr\fR
.IP
As \fB-grabkbd,\fR but for the mouse pointer using
.IR XGrabPointer (3X11).
Unfortunately due to the way the X
server works, the mouse can still be moved around by the
user at the physical display, but he will not be able to
change window focus with it.  Also some window managers
that call 
.IR XGrabServer (3X11)
for resizes, etc, will
act on the local user's input.  Again, some degree of
cooperation from the person at the display is assumed.
.PP
\fB-ungrabboth\fR
.IP
Whenever there is any input (either keyboard or
pointer), ungrab *both* the keyboard and the pointer
while injecting the synthetic input.  This is to allow
window managers, etc. a chance to grab.
.PP
\fB-grabalways\fR
.IP
Apply both \fB-grabkbd\fR and \fB-grabptr\fR even when no VNC
viewers are connected.  If you only want one of them,
use the \fB-R\fR remote control to turn the other back on,
e.g. \fB-R\fR nograbptr.
.PP
\fB-viewpasswd\fR \fIstring\fR
.IP
Supply a 2nd password for view-only logins.  The \fB-passwd\fR
(full-access) password must also be supplied.
.PP
\fB-passwdfile\fR \fIfilename\fR
.IP
Specify the LibVNCServer password via the first line
of the file \fIfilename\fR (instead of via \fB-passwd\fR on
the command line where others might see it via 
.IR ps (1)
).
.IP
See the descriptions below for how to supply multiple
passwords, view-only passwords, to specify external
programs for the authentication, and other features.
.IP
If the filename is prefixed with "rm:" it will be
removed after being read.  Perhaps this is useful in
limiting the readability of the file.  In general, the
password file should not be readable by untrusted users
(BTW: neither should the VNC \fB-rfbauth\fR file: it is NOT
encrypted, only obscured with a fixed key).
.IP
If the filename is prefixed with "read:" it will
periodically be checked for changes and reread.  It is
guaranteed to be reread just when a new client connects
so that the latest passwords will be used.
.IP
If \fIfilename\fR is prefixed with "cmd:" then the
string after the ":" is run as an external command:
the output of the command will be interpreted as if it
were read from a password file (see below).  If the
command does not exit with 0, then x11vnc terminates
immediately.  To specify more than 1000 passwords this
way set X11VNC_MAX_PASSWDS before starting x11vnc.
The environment variables are set as in \fB-accept.\fR
.IP
Note that due to the VNC protocol only the first 8
characters of a password are used (DES key).
.IP
If \fIfilename\fR is prefixed with "custom:" then a
custom password checker is supplied as an external
command following the ":". The command will be run
when a client authenticates.  If the command exits with
0 the client is accepted, otherwise it is rejected.
The environment variables are set as in \fB-accept.\fR
.IP
The standard input to the custom command will be a
decimal digit "len" followed by a newline. "len"
specifies the challenge size and is usually 16 (the
VNC spec).  Then follows len bytes which is the random
challenge string that was sent to the client. This is
then followed by len more bytes holding the client's
response (i.e. the challenge string encrypted via DES
with the user password in the standard situation).
.IP
The "custom:" scheme can be useful to implement
dynamic passwords or to implement methods where longer
passwords and/or different encryption algorithms
are used.  The latter will require customizing the VNC
client as well.  One could create an MD5SUM based scheme
for example.
.IP
File format for \fB-passwdfile:\fR
.IP
If multiple non-blank lines exist in the file they are
all taken as valid passwords.  Blank lines are ignored.
Password lines may be "commented out" (ignored) if
they begin with the character "#" or the line contains
the string "__SKIP__".  Lines may be annotated by use
of the "__COMM__" string: from it to the end of the
line is ignored.  An empty password may be specified
via the "__EMPTY__" string on a line by itself (note
your viewer might not accept empty passwords).
.IP
If the string "__BEGIN_VIEWONLY__" appears on a
line by itself, the remaining passwords are used for
viewonly access.  For compatibility, as a special case
if the file contains only two password lines the 2nd
one is automatically taken as the viewonly password.
Otherwise the "__BEGIN_VIEWONLY__" token must be
used to have viewonly passwords.  (tip: make the 3rd
and last line be "__BEGIN_VIEWONLY__" to have 2
full-access passwords)
.PP
\fB-showrfbauth\fR \fIfilename\fR
.IP
Print to the screen the obscured VNC password kept in
the rfbauth file \fIfilename\fR and then exit.
.PP
\fB-unixpw\fR \fI[list]\fR
.IP
Use Unix username and password authentication.  x11vnc
will use the 
.IR su (1)
program to verify the user's
password.  [list] is an optional comma separated list
of allowed Unix usernames.  If the [list] string begins
with the character "!" then the entire list is taken
as an exclude list.  See below for per-user options
that can be applied.
.IP
A familiar "login:" and "Password:" dialog is
presented to the user on a black screen inside the
vncviewer.  The connection is dropped if the user fails
to supply the correct password in 3 tries or does not
send one before a 45 second timeout.  Existing clients
are view-only during this period.
.IP
If the first character received is "Escape" then the
unix username will not be displayed after "login:"
as it is typed.  This could be of use for VNC viewers
that automatically type the username and password.
.IP
Since the detailed behavior of 
.IR su (1)
can vary from
OS to OS and for local configurations, test the mode
before deployment to make sure it is working properly.
x11vnc will attempt to be conservative and reject a
login if anything abnormal occurs.
.IP
One case to note: FreeBSD and the other BSD's by
default it is impossible for the user running x11vnc to
validate his *own* password via 
.IR su (1)
(commenting out
the pam_self.so entry in /etc/pam.d/su eliminates this
behavior).  So the x11vnc login will always *FAIL* for
this case (even when the correct password is supplied).
.IP
A possible workaround for this on *BSD would be to
start x11vnc as root with the "\fB-users\fR \fI+nobody\fR" option
to immediately switch to user nobody where the su'ing
will proceed normally.
.IP
Another source of potential problems are PAM modules
that prompt for extra info, e.g. password aging modules.
These logins will fail as well even when the correct
password is supplied.
.IP
**IMPORTANT**: to prevent the Unix password being sent
in *clear text* over the network, one of two schemes
will be enforced: 1) the \fB-ssl\fR builtin SSL mode, or 2)
require both \fB-localhost\fR and \fB-stunnel\fR be enabled.
.IP
Method 1) ensures the traffic is encrypted between
viewer and server.  A PEM file will be required, see the
discussion under \fB-ssl\fR below (under some circumstances
a temporary one can be automatically generated).
.IP
Method 2) requires the viewer connection to appear
to come from the same machine x11vnc is running on
(e.g. from a ssh \fB-L\fR port redirection).  And that the
\fB-stunnel\fR SSL mode be used for encryption over the
network. (see the description of \fB-stunnel\fR below).
.IP
Note: as a convenience, if you 
.IR ssh (1)
in and start
x11vnc it will check if the environment variable
SSH_CONNECTION is set and appears reasonable.  If it
does, then the \fB-ssl\fR or \fB-stunnel\fR requirement will be
dropped since it is assumed you are using ssh for the
encrypted tunnelling.  \fB-localhost\fR is still enforced.
Use \fB-ssl\fR or \fB-stunnel\fR to force SSL usage even if
SSH_CONNECTION is set.
.IP
To override the above restrictions you can set
environment variables before starting x11vnc:
.IP
Set UNIXPW_DISABLE_SSL=1 to disable requiring either
\fB-ssl\fR or \fB-stunnel\fR (as under SSH_CONNECTION.)  Evidently
you will be using a different method to encrypt the
data between the vncviewer and x11vnc: perhaps 
.IR ssh (1)
or an IPSEC VPN. \fB-localhost\fR is still enforced (however,
see the next paragraph.)
.IP
Set UNIXPW_DISABLE_LOCALHOST=1 to disable the \fB-localhost\fR
requirement in \fB-unixpw\fR modes.  One should never do this
(i.e. allow the Unix passwords to be sniffed on the
network.)  This also disables the localhost requirement
for reverse connections (see below.)
.IP
Note that use of \fB-localhost\fR with 
.IR ssh (1)
(and no \fB-unixpw)\fR
is roughly the same as requiring a Unix user login
(since a Unix password or the user's public key
authentication is used by sshd on the machine where
x11vnc runs and only local connections from that machine
are accepted).
.IP
Regarding reverse connections (e.g. \fB-R\fR connect:host
and \fB-connect\fR host), when the \fB-localhost\fR constraint is
in effect then reverse connections can only be used
to connect to the same machine x11vnc is running on
(default port 5500).  Please use a ssh or stunnel port
redirection to the viewer machine to tunnel the reverse
connection over an encrypted channel.
.IP
In \fB-inetd\fR mode the Method 1) will be enforced (not
Method 2).  With \fB-ssl\fR in effect reverse connections
are disabled.  If you override this via env. var, be
sure to also use encryption from the viewer to inetd.
Tip: you can also have your own stunnel spawn x11vnc
in \fB-inetd\fR mode (thereby bypassing inetd).  See the FAQ
for details.
.IP
The user names in the comma separated [list] may have
per-user options after a ":", e.g. "fred:opts"
where "opts" is a "+" separated list of
"viewonly", "fullaccess", "input=XXXX", or
"deny", e.g. "karl,wally:viewonly,boss:input=M".
For "input=" it is the K,M,B,C described under \fB-input.\fR
.IP
If an item in the list is "*" that means those
options apply to all users.  It ALSO implies all users
are allowed to log in after supplying a valid password.
Use "deny" to explicitly deny some users if you use
"*" to set a global option.  If [list] begins with the
"!" character then "*" is ignored for checking if
the user is allowed, but the option values associated
with it do apply as normal.
.IP
There are also some utilities for checking passwords
if [list] starts with the "%" character.  See the
quick_pw() function for more details.  Description:
"%-" or "%stdin" means read one line from stdin.
"%env" means it is in $UNIXPW env var.  A leading
"%/" or "%." means read the first line from the
filename that follows after the % character. % by
itself means prompt for the username and password.
Otherwise: %user:pass   E.g. \fB-unixpw\fR %fred:swordfish
For the other cases user:pass is read from the indicated
source.  If the password is correct 'Y user' is printed
and the program exit code is 0.  If the password is
incorrect it prints 'N user' and the exit code is 1.
If there is some other error the exit code is 2.
This feature enables x11vnc to be a general unix user
password checking tool; it could be used from scripts
or other programs.  These % password checks also apply
to the \fB-unixpw_nis\fR and \fB-unixpw_cmd\fR options.
.IP
For the % password check, if the env. var. UNIXPW_CMD
is set to a command then it is run as the user (assuming
the password is correct.)  The output of the command is
not printed, the program or script must manage that by
some other means.  The exit code of x11vnc will depend
on the exit code of the command that is run.
.IP
Use \fB-nounixpw\fR to disable unixpw mode if it was enabled
earlier in the cmd line (e.g. \fB-svc\fR mode)
.PP
\fB-unixpw_nis\fR \fI[list]\fR
.IP
As \fB-unixpw\fR above, however do not use 
.IR su (1)
but rather
use the traditional 
.IR getpwnam (3)
+ 
.IR crypt (3)
method to
verify passwords. All of the above \fB-unixpw\fR options and
constraints apply.
.IP
This mode requires that the encrypted passwords be
readable.  Encrypted passwords stored in /etc/shadow
will be inaccessible unless x11vnc is run as root.
.IP
This is called "NIS" mode simply because in most
NIS setups user encrypted passwords are accessible
(e.g. "ypcat passwd") by an ordinary user and so that
user can authenticate ANY user.
.IP
NIS is not required for this mode to work (only that
.IR getpwnam (3)
return the encrypted password is required),
but it is unlikely it will work (as an ordinary user)
for most modern environments unless NIS is available.
On the other hand, when x11vnc is run as root it will
be able to to access /etc/shadow even if NIS is not
available (note running as root is often done when
running x11vnc from inetd and xdm/gdm/kdm).
.IP
Looked at another way, if you do not want to use the
.IR su (1)
method provided by \fB-unixpw\fR (i.e. su_verify()), you
can run x11vnc as root and use \fB-unixpw_nis.\fR  Any users
with passwords in /etc/shadow can then be authenticated.
.IP
In \fB-unixpw_nis\fR mode, under no circumstances is x11vnc's
user password verifying function based on su called
(i.e. the function su_verify() that runs /bin/su
in a pseudoterminal to verify passwords.)  However,
if \fB-unixpw_nis\fR is used in conjunction with the \fB-find\fR
and \fB-create\fR \fB-display\fR WAIT:... modes then, if x11vnc is
running as root, /bin/su may be called externally to
run the find or create commands.
.PP
\fB-unixpw_cmd\fR \fIcmd\fR
.IP
As \fB-unixpw\fR above, however do not use 
.IR su (1)
but rather
run the externally supplied command \fIcmd\fR.  The first
line of its stdin will be the username and the second
line the received password.  If the command exits
with status 0 (success) the VNC user will be accepted.
It will be rejected for any other return status.
.IP
Dynamic passwords and non-unix passwords, e.g. LDAP,
can be implemented this way by providing your own custom
helper program.  Note that the remote viewer is given 3
tries to enter the correct password, and so the program
may be called in a row that many (or more) times.
.IP
If a list of allowed users is needed to limit who can
log in, use \fB-unixpw\fR [list] in addition to this option.
.IP
In FINDDISPLAY and FINDCREATEDISPLAY modes the \fIcmd\fR
will also be run with the RFB_UNIXPW_CMD_RUN env. var.
non-empty and set to the corresponding display
find/create command.  The first two lines of input are
the username and passwd as in the normal case described
above.  To support FINDDISPLAY and FINDCREATEDISPLAY,
\fIcmd\fR should run the requested command as the user
(and most likely refusing to run it if the password is
not correct.)  Here is an example script (note it has
a hardwired bogus password "abc"!)
.IP
#!/bin/sh
# Example x11vnc \fB-unixpw_cmd\fR script.
# Read the first two lines of stdin (user and passwd)
read user
read pass
.IP
debug=0
if [ $debug = 1 ]; then
echo "user: $user" 1>&2
echo "pass: $pass" 1>&2
env | egrep \fB-i\fR 'rfb|vnc' 1>&2
fi
.IP
# Check if the password is valid.
# (A real example would use ldap lookup, etc!)
if [ "X$pass" != "Xabc" ]; then
exit 1	# incorrect password
fi
.IP
if [ "X$RFB_UNIXPW_CMD_RUN" = "X" ]; then
exit 0	# correct password
else
# Run the requested command (finddisplay)
if [ $debug = 1 ]; then
echo "run: $RFB_UNIXPW_CMD_RUN" 1>&2
fi
exec /bin/su - "$user" \fB-c\fR "$RFB_UNIXPW_CMD_RUN"
fi
.IP
In \fB-unixpw_cmd\fR mode, under no circumstances is x11vnc's
user password verifying function based on su called
(i.e. the function su_verify() that runs /bin/su in a
pseudoterminal to verify passwords.)  It is up to the
supplied unixpw_cmd to do user switching if desired
and if it has the permissions to do so.
.PP
\fB-find\fR
.IP
Find the user's display using FINDDISPLAY. This
is an alias for "\fB-display\fR \fIWAIT:cmd=FINDDISPLAY\fR".
.IP
Note: if a \fB-display\fR occurs later on the command line
it will override the \fB-find\fR setting.
.IP
For this and the next few options see \fB-display\fR WAIT:...
below for all of the details.
.PP
\fB-finddpy\fR
.IP
Run the FINDDISPLAY program, print out the found
display (if any) and exit.  Output is like: DISPLAY=:0.0
DISPLAY=:0.0,XPID=12345 or DISPLAY=:0.0,VT=7.  XPID is
the process ID of the found X server.  VT is the Linux
virtual terminal of the X server.
.PP
\fB-listdpy\fR
.IP
Have the FINDDISPLAY program list all of your displays
(i.e. all the X displays on the local machine that you
have access rights to).  x11vnc then exits.
.PP
\fB-findauth\fR \fI[disp]\fR
.IP
Apply the \fB-find/-finddpy\fR heuristics to try to guess
the XAUTHORITY file for DISPLAY 'disp'.  If 'disp'
is not supplied, then the value in the \fB-display\fR on
the cmdline is used; failing that $DISPLAY is used;
and failing that ":0" is used.  x11vnc then exits.
.IP
If nothing is printed out, that means no XAUTHORITY was
found for 'disp'; i.e. failure.  If "XAUTHORITY="
is printed out, that means use the default (i.e. do
not set XAUTHORITY).  If "XAUTHORITY=/path/to/file"
is printed out, then use that file.
.IP
XDM/GDM/KDM: if you are running x11vnc as root and want
to find the XAUTHORITY before anyone has logged into an
X session yet, use: x11vnc \fB-env\fR FD_XDM=1 \fB-findauth\fR ...
(This will also find the XAUTHORITY if a user is already
logged into the X session.)  When running as root,
FD_XDM=1 will be tried if the initial \fB-findauth\fR fails.
.PP
\fB-create\fR
.IP
First try to find the user's display using FINDDISPLAY,
if that doesn't succeed create an X session via the
FINDCREATEDISPLAY method.  This is an alias for
"\fB-display\fR \fIWAIT:cmd=FINDCREATEDISPLAY-Xvfb\fR".
.IP
Note: if a \fB-display\fR occurs later on the command line
it will override the \fB-create\fR setting.
.IP
SSH NOTE: for both \fB-find\fR and \fB-create\fR you can (should!)
add the "\fB-localhost\fR" option to force SSH tunnel access.
.PP
\fB-xdummy\fR
.IP
As in \fB-create,\fR except Xdummy instead of Xvfb.
.PP
\fB-xvnc\fR
.IP
As in \fB-create,\fR except Xvnc instead of Xvfb.
.PP
\fB-xvnc_redirect\fR
.IP
As in \fB-create,\fR except Xvnc.redirect instead of Xvfb.
.PP
\fB-xdummy_xvfb\fR
.IP
Sets WAIT:cmd=FINDCREATEDISPLAY-Xdummy,Xvfb
.PP
\fB-create_xsrv\fR \fIstr\fR
.IP
Sets WAIT:cmd=FINDCREATEDISPLAY-<str>  Can be on cmdline
after anything that sets WAIT:.. and other things
(e.g. \fB-svc,\fR \fB-xdmsvc)\fR to adjust the X server list.
Example: \fB-svc\fR ... \fB-create_xsrv\fR Xdummy,X
.PP
\fB-svc\fR
.IP
Terminal services mode based on SSL access.  Alias for
\fB-display\fR WAIT:cmd=FINDCREATEDISPLAY-Xvfb \fB-unixpw\fR \fB-users\fR
unixpw= \fB-ssl\fR SAVE   Also "\fB-service\fR".
.IP
Note: if a \fB-display,\fR \fB-unixpw,\fR \fB-users,\fR or \fB-ssl\fR occurs
later on the command line it will override the \fB-svc\fR
setting.
.PP
\fB-svc_xdummy\fR
.IP
As \fB-svc\fR except Xdummy instead of Xvfb.
.PP
\fB-svc_xvnc\fR
.IP
As \fB-svc\fR except Xvnc instead of Xvfb.
.PP
\fB-svc_xdummy_xvfb\fR
.IP
As \fB-svc\fR with Xdummy,Xvfb.
.PP
\fB-xdmsvc\fR
.IP
Display manager Terminal services mode based on SSL.
Alias for \fB-display\fR WAIT:cmd=FINDCREATEDISPLAY-Xvfb.xdmcp
\fB-unixpw\fR \fB-users\fR unixpw= \fB-ssl\fR SAVE  Also "\fB-xdm_service\fR".
.IP
Note: if a \fB-display,\fR \fB-unixpw,\fR \fB-users,\fR or \fB-ssl\fR occurs
later on the command line it will override the \fB-xdmsvc\fR
setting.
.IP
To create a session a user will have to first log in
to the \fB-unixpw\fR dialog and then log in again to the
XDM/GDM/KDM prompt.  Subsequent re-connections will
only require the \fB-unixpw\fR password.  See the discussion
under \fB-display\fR WAIT:... for more details about XDM,
etc configuration.
.IP
Remember to enable XDMCP in the xdm-config, gdm.conf,
or kdmrc configuration file.  See \fB-display\fR WAIT: for
more info.
.PP
\fB-sshxdmsvc\fR
.IP
Display manager Terminal services mode based on SSH.
Alias for \fB-display\fR WAIT:cmd=FINDCREATEDISPLAY-Xvfb.xdmcp
\fB-localhost.\fR
.IP
The \fB-localhost\fR option constrains connections to come
in via a SSH tunnel (which will require a login).
To create a session a user will also have to log into
the XDM GDM KDM prompt. Subsequent re-connections will
only only require the SSH login.  See the discussion
under \fB-display\fR WAIT:... for more details about XDM,
etc configuration.
.IP
Remember to enable XDMCP in the xdm-config, gdm.conf,
or kdmrc configuration file.  See \fB-display\fR WAIT: for
more info.
.PP
\fB-unixpw_system_greeter\fR
.IP
Present a "Press 'Escape' for System Greeter" option
to the connecting VNC client in combined \fB-unixpw\fR
and xdmcp FINDCREATEDISPLAY modes (e.g. \fB-xdmsvc).\fR
.IP
Normally in a \fB-unixpw\fR mode the VNC client must
supply a valid username and password to gain access.
However, if \fB-unixpw_system_greeter\fR is supplied AND
the FINDCREATEDISPLAY command matches 'xdmcp', then
the user has the option to press Escape and then get a
XDM/GDM/KDM login/greeter panel instead. They will then
supply a username and password directly to the greeter.
.IP
Otherwise, in xdmcp FINDCREATEDISPLAY mode the user
must supply his username and password TWICE.  First to
the initial unixpw login dialog, and second to the
subsequent XDM/GDM/KDM greeter.  Note that if the user
re-connects and supplies his username and password in
the unixpw dialog the xdmcp greeter is skipped and
he is connected directly to his existing X session.
So the \fB-unixpw_system_greeter\fR option avoids the extra
password at X session creation time.
.IP
Example:  x11vnc \fB-xdmsvc\fR \fB-unixpw_system_greeter\fR
See \fB-unixpw\fR and \fB-display\fR WAIT:... for more info.
.IP
The special options after a colon at the end of the
username (e.g. user:solid) described under \fB-display\fR
WAIT: are also applied in this mode if they are typed
in before the user hits Escape.  The username is ignored
but the colon options are not.
.IP
The default message is 2 lines in a small font, set
the env. var. X11VNC_SYSTEM_GREETER1=true for a 1 line
message in a larger font.
.IP
If the user pressed Escape the FINDCREATEDISPLAY command
will be run with the env. var. X11VNC_XDM_ONLY=1.
.IP
Remember to enable XDMCP in the xdm-config, gdm.conf,
or kdmrc configuration file.  See \fB-display\fR WAIT: for
more info.
.PP
\fB-redirect\fR \fIport\fR
.IP
As in FINDCREATEDISPLAY-Xvnc.redirect mode except
redirect immediately (i.e. without X session finding
or creation) to a VNC server listening on port. You
can also supply host:port to redirect to a different
machine.
.IP
If 0 <= port < 200 it is taken as a VNC display (5900 is
added to get the actual port), if port < 0 then \fB-port\fR
is used.
.IP
Probably the only reason to use the \fB-redirect\fR option
is in conjunction with SSL support, e.g. \fB-ssl\fR SAVE.
This provides an easy way to add SSL encryption to a VNC
server that does not support SSL (e.g. Xvnc or vnc.so)
In fact, the protocol does not even need to be VNC,
and so "\fB-rfbport\fR \fIport1 \fB-ssl\fR SAVE \fB-redirect\fR host:port2\fR"
can act as a replacement for 
.IR stunnel (1).
.IP
This mode only allows one redirected connection.
The \fB-forever\fR option does not apply.  Use \fB-inetd\fR or
\fB-loop\fR for persistent service.
.PP
\fB-display\fR \fIWAIT:...\fR
.IP
A special usage mode for the normal \fB-display\fR option.
Useful with \fB-unixpw,\fR but can be used independently
of it.  If the display string begins with WAIT: then
x11vnc waits until a VNC client connects before opening
the X display (or \fB-rawfb\fR device).
.IP
This could be useful for delaying opening the display
for certain usage modes (say if x11vnc is started at
boot time and no X server is running or users logged
in yet).
.IP
If the string is, e.g. WAIT:0.0 or WAIT:1, i.e. "WAIT"
in front of a normal X display, then that indicated
display is used.
.IP
One can also insert a geometry between colons, e.g.
WAIT:1280x1024:... to set the size of the display the
VNC client first attaches to since some VNC viewers
will not automatically adjust to a new framebuffer size.
.IP
A more interesting case is like this:
.IP
WAIT:cmd=/usr/local/bin/find_display
.IP
in which case the command after "cmd=" is run to
dynamically work out the DISPLAY and optionally the
XAUTHORITY data.  The first line of the command output
must be of the form DISPLAY=<xdisplay>.  On Linux
if the virtual terminal is known append ",VT=n" to
this string and the 
.IR chvt (1)
program will also be run.
Any remaining output is taken as XAUTHORITY data.
It can be either of the form XAUTHORITY=<file> or raw
xauthority data for the display. For example;
.IP
xauth extract - $DISPLAY"
.IP
NOTE: As specified in the previous paragraph, you can
supply your own WAIT:cmd=... program or script, BUT
there are two very useful *BUILT-IN* ones: FINDDISPLAY
(alias \fB-find\fR above) and FINDCREATEDISPLAY (alias \fB-create\fR
above.)  Most people use these instead of creating
their own script.  Read the following (especially the
BUILT-IN modes sections) to see how to configure these
two useful builtin \fB-display\fR WAIT: modes.
.IP
In the case of \fB-unixpw\fR (and \fB-unixpw_nis\fR only if x11vnc
is running as root), then the cmd= command is run
as the user who just authenticated via the login and
password prompt.
.IP
In the case of \fB-unixpw_cmd,\fR the commands will also be
run as the logged-in user, as long as the user-supplied
helper program supports RFB_UNIXPW_CMD_RUN (see the
\fB-unixpw_cmd\fR option.)
.IP
Also in the case of \fB-unixpw,\fR the user logging in can
place a colon at the end of her username and supply
a few options: scale=, scale_cursor= (or sc=), solid
(or so), id=, clear_mods (or cm), clear_keys (or
ck), clear_all (or ca), repeat, speeds= (or sp=),
readtimeout= (or rd=), viewonly (or vo), nodisplay=
(or nd=), rotate= (or ro=), or noncache (or nc),
all separated by commas if there is more than one.
After the user logs in successfully, these options will
be applied to the VNC screen.  For example,
.IP
login: fred:scale=3/4,sc=1,repeat
Password: ...
.IP
login: runge:sp=modem,rd=120,solid
.IP
for convenience m/n implies scale= e.g. fred:3/4  If you
type and enter your password incorrectly, to retrieve
your long "login:" line press the Up arrow once
(before typing anything else).
.IP
Most of these colon options only apply to the builtin
FINDDISPLAY and FINDCREATEDISPLAY modes, but note
that they are passed to the extrenal command in the
environment as well and so could be used.
.IP
In the login panel, press F1 to get a list of the
available options that you can add after the username.
.IP
Another option is "geom=WxH" or "geom=WxHxD" (or
ge=). This only has an effect in FINDCREATEDISPLAY
mode when a virtual X server such as Xvfb is going
to be created.  It sets the width and height of
the new display, and optionally the color depth as
well.
.IP
You can also supply "gnome", "kde", "twm",
"fvwm", "mwm", "dtwm", "wmaker", "xfce",
"lxde", "enlightenment", "Xsession", or
"failsafe" (same as "xterm") to have the created
display use that mode for the user session.
.IP
Specify "tag=..." to set the unique FD_TAG desktop
session tag described below.  Note: this option will
be ignored if the FD_TAG env. var. is already set or
if the viewer-side supplied value is not completely
composed of alphanumeric or '_' or '-' characters.
.IP
User preferences file: Instead of having the user type
in geom=WxH,... etc. every time he logs in to find
or create his X session, if you set FD_USERPREFS to
a string that does not contain the "/" character,
then the user's home directory is prepended to that
string and if the file exists its first line is read
and appended to any options he supplied at the login:
prompt.  For example \fB-env\fR FD_USERPREFS=.x11vnc_create
and the user put "geom=1600x1200" in his
~/.x11vnc_create file.
.IP
To disable the option setting set the environment
variable X11VNC_NO_UNIXPW_OPTS=1 before starting x11vnc.
To set any other options, the user can use the gui
(x11vnc \fB-gui\fR connect) or the remote control method
(x11vnc \fB-R\fR opt:val) during his VNC session.
.IP
So we see the combination of \fB-display\fR WAIT:cmd=... and
\fB-unixpw\fR allows automatic pairing of an unix
authenticated VNC user with his desktop.  This could
be very useful on SunRays and also any system where
multiple users share a given machine.  The user does
not need to remember special ports or passwords set up
for his desktop and VNC.
.IP
A nice way to use WAIT:cmd=... is out of 
.IR inetd (8)
(it automatically forks a new x11vnc for each user).
You can have the x11vnc inetd spawned process run as,
say, root or nobody.  When run as root (for either inetd
or display manager), you can also supply the option
"\fB-users\fR \fIunixpw=\fR" to have the x11vnc process switch to
the user as well.  Note: there will be a 2nd SSL helper
process that will not switch, but it is only encoding
and decoding the encrypted stream at that point.
.IP
BUILT-IN modes:
.IP
\fB--\fR Automatic Finding of User X Sessions \fB--\fR
.IP
As a special case, WAIT:cmd=FINDDISPLAY will run a
script that works on most Unixes to determine a user's
DISPLAY variable and xauthority data (see 
.IR who (1)
).
.IP
NOTE: The option "\fB-find\fR" is an alias for this mode.
.IP
To have this default script printed to stdout (e.g. for
customization) run with WAIT:cmd=FINDDISPLAY-print To
have the script run to print what display it would find
use "\fB-finddpy\fR" or WAIT:cmd=FINDDISPLAY-run
.IP
The standard script runs 
.IR xdpyinfo (1)
run on potential
displays.  If your X server(s) have a login greeter
that exclusively grabs the Xserver, then xdpyinfo
blocks forever and this mode will not work.  See
www.karlrunge.com/x11vnc/faq.html#faq-display-manager
for how to disable this for dtgreet on Solaris and
possibly for other greeters.
.IP
In \fB-find/cmd=FINDDISPLAY\fR mode, if you set FD_XDM=1,
e.g. 'x11vnc \fB-env\fR FD_XDM=1 \fB-find\fR ...' and x11vnc is
running as root (e.g. inetd) then it will try to find
the XAUTHORITY file of a running XDM/GDM/KDM login
greeter (i.e. no user has logged into an X session yet.)
.IP
As another special case, WAIT:cmd=HTTPONCE will allow
x11vnc to service one http request and then exit.
This is usually done in \fB-inetd\fR mode to run on, say,
port 5800 and allow the Java vncviewer to be downloaded
by client web browsers.  For example:
.IP
5815 stream tcp nowait root /usr/sbin/tcpd /.../x11vnc \\
\fB-inetd\fR \fB-q\fR \fB-http_ssl\fR \fB-prog\fR /.../x11vnc \\
\fB-display\fR WAIT:cmd=HTTPONCE
.IP
Where /.../x11vnc is the full path to x11vnc.
It is used in the Apache SSL-portal example (see FAQ).
.IP
In this mode you can set X11VNC_SKIP_DISPLAY to a
comma separated list of displays (e.g. ":0,:1") to
ignore in the finding process.  The ":" is optional.
Ranges n-m e.g. 0-20 can also be supplied. This string
can also be set by the connecting user via "nd="
using "+" instead of ","  If "nd=all" or you set
X11VNC_SKIP_DISPLAY=all then all display finding fails
as if you set X11VNC_FINDDISPLAY_ALWAYS_FAILS=1 (below.)
.IP
On some systems 
.IR lsof (1)
can be very slow.  Set the
env. var. FIND_DISPLAY_NO_LSOF=1 to skip using lsof to
try to find the Linux VT the X server is running on.
set FIND_DISPLAY_NO_VT_FIND=1 to avoid looking at all.
.IP
\fB--\fR Automatic Creation of User X Sessions \fB--\fR
.IP
An interesting option is WAIT:cmd=FINDCREATEDISPLAY
that is like FINDDISPLAY in that is uses the same method
to find an existing display.  However, if it does not
find one it will try to *start* up an X server session
for the user.  This is the only time x11vnc tries to
actually start up an X server.
.IP
NOTE: The option "\fB-create\fR" is an alias for this mode.
.IP
It will start looking for an open display number at :20
Override via X11VNC_CREATE_STARTING_DISPLAY_NUMBER=n
By default 80 X displays are allowed (i.e. going to :99)
Override via X11VNC_CREATE_MAX_DISPLAYS=n
.IP
For its heuristics, the create display script sets
LC_ALL=C so that command output is uniform.  By default
it will try to restore LC_ALL right before starting the
user session.  However, if you don't mind it keeping
LC_ALL=C set the env. var.: X11VNC_CREATE_LC_ALL_C_OK=1
.IP
By default FINDCREATEDISPLAY will try Xvfb and then
Xdummy:
.IP
The Xdummy wrapper is part of the x11vnc source code
(x11vnc/misc/Xdummy)  It should be available in PATH
and have run "Xdummy \fB-install"\fR once to create the
shared library.  Xdummy only works on Linux.  As of
12/2009 it no longer needs to be run as root, and the
default is to not run as root.  In some circumstances
permissions may require running it as root, in these
cases specify FD_XDUMMY_RUN_AS_ROOT=1, this is the same
as supplying \fB-root\fR to the Xdummy cmdline.
.IP
Xvfb is available on most platforms and does not
require root.
.IP
An advantage of Xdummy over Xvfb is that Xdummy supports
RANDR dynamic screen resizing.
.IP
When x11vnc exits (i.e. user disconnects) the X
server session stays running in the background.
The FINDDISPLAY will find it directly next time.
The user must exit the X session in the usual way for
it to terminate (or kill the X server process if all
else fails).
.IP
To troubleshoot the FINDCREATEDISPLAY mechanism,
set the following env. var. to an output log file,
e.g \fB-env\fR CREATE_DISPLAY_OUTPUT=/tmp/mydebug.txt
.IP
So this is a somewhat odd mode for x11vnc in that it
will start up and poll virtual X servers!  This can
be used from, say, 
.IR inetd (8)
to provide a means of
definitely getting a desktop (either real or virtual)
on the machine.  E.g. a desktop service:
.IP
5900 stream tcp nowait root /usr/sbin/tcpd /.../x11vnc
\fB-inetd\fR \fB-q\fR \fB-http\fR \fB-ssl\fR SAVE \fB-unixpw\fR \fB-users\fR unixpw=\\
\fB-passwd\fR secret \fB-prog\fR /.../x11vnc \\
\fB-display\fR WAIT:cmd=FINDCREATEDISPLAY
.IP
Where /.../x11vnc is the full path to x11vnc.
.IP
See the \fB-svc/-service\fR option alias above.
.IP
If for some reason you do not want x11vnc to ever
try to find an existing display set the env. var
X11VNC_FINDDISPLAY_ALWAYS_FAILS=1 (also \fB-env\fR ...)
This is the same as setting X11VNC_SKIP_DISPLAY=all or
supplying "nd=all" after "username:"
.IP
Use WAIT:cmd=FINDCREATEDISPLAY-print to print out the
script that is used for this.
.IP
You can specify the preferred X server order via e.g.,
WAIT:cmd=FINDCREATEDISPLAY-Xdummy,Xvfb,X  and/or leave
out ones you do not want.  The the case "X" means try
to start up a real, hardware X server using 
.IR xinit (1)
or 
.IR startx (1).
If there is already an X server running
the X case may only work on Linux (see 
.IR startx (1)
).
.IP
"Xvnc" will start up a VNC X server (real-
or tight-vnc, e.g. use if Xvfb is not available).
"Xsrv" will start up the server program in the
variable "FD_XSRV" if it is non-empty. You can make
this be a wrapper script if you like (it must handle :N,
\fB-geometry,\fR and \fB-depth\fR and other X server options).
.IP
You can set the environment variable FD_GEOM (or
X11VNC_CREATE_GEOM) to WxH or WxHxD to set the width
and height and optionally the color depth of the
created display.  You can also set FD_SESS to be the
session (short name of the windowmanager: kde, gnome,
twm, failsafe, etc.). FD_OPTS contains extra options
to pass to the X server. You can also set FD_PROG to
be the full path to the session/windowmanager program.
.IP
More FD tricks:  FD_CUPS=port or FD_CUPS=host:port
will set the cups printing environment.  Similarly for
FD_ESD=port or FD_ESD=host:port for esddsp sound
redirection.  Set FD_EXTRA to a command to be run a
few seconds after the X server starts up.  Set FD_TAG
to be a unique name for the session, it is set as an
X property, that makes FINDDISPLAY only find sessions
with that tag value.
.IP
Set FD_XDMCP_IF to the network interface that the
display manager is running on; default is 'localhost'
but you may need to set it to '::1' on some IPv6 only
systems or misconfigured display managers.
.IP
If you want the FINDCREATEDISPLAY session to contact an
XDMCP login manager (xdm/gdm/kdm) on the same machine,
then use "Xvfb.xdmcp" instead of "Xvfb", etc.
The user will have to supply his username and password
one more time (but he gets to select his desktop type
so that can be useful).  For this to work, you will
need to enable localhost XDMCP (udp port 177) for the
display manager.  This seems to be:
.IP
for gdm in gdm.conf:   Enable=true in section [xdmcp]
for kdm in kdmrc:      Enable=true in section [Xdmcp]
for xdm in xdm-config: DisplayManager.requestPort: 177
.IP
See the shorthand options above "\fB-svc\fR", "\fB-xdmsvc\fR"
and "\fB-sshxdmsvc\fR" that specify the above options for
some useful cases.
.IP
If you set the env. var WAITBG=1 x11vnc will go into
the background once listening in wait mode.
.IP
Another special mode is FINDCREATEDISPLAY-Xvnc.redirect,
(or FINDDISPLAY-Xvnc.redirect).  In this case it will
start up Xvnc as above if needed, but instead of
polling it in its normal way, it simply does a socket
redirection of the connected VNC viewer to the Xvnc.
.IP
So in Xvnc.redirect x11vnc does no VNC but merely
transfers the data back and forth.  This should be
faster then x11vnc's polling method, but not as fast
as connecting directly to the Xvnc with the VNC Viewer.
The idea here is to take advantage of x11vnc's display
finding/creating scheme, SSL, and perhaps a few others.
Most of x11vnc's options do not apply in this mode.
.IP
Xvnc.redirect should also work for the vnc.so X server
module for the h/w display however it will work only
for finding the display and the user must already be
logged into the X console.
.PP
\fB-vencrypt\fR \fImode\fR
.IP
The VeNCrypt extension to the VNC protocol allows
encrypted SSL/TLS connections.  If the \fB-ssl\fR mode is
enabled, then VeNCrypt is enabled as well BY DEFAULT
(they both use a SSL/TLS tunnel, only the protocol
handshake is a little different.)
.IP
To control when and how VeNCrypt is used, specify the
mode string.  If mode is "never", then VeNCrypt is
not used.  If mode is "support" (the default) then
VeNCrypt is supported.  If mode is "only", then the
similar and older ANONTLS protocol is not simultaneously
supported.  x11vnc's normal SSL mode (vncs://) will be
supported under \fB-ssl\fR unless you set mode to "force".
.IP
If mode is prefixed with "nodh:", then Diffie Hellman
anonymous key exchange is disabled.  If mode is prefixed
with "nox509:", then X509 key exchange is disabled.
.IP
To disable all Anonymous Diffie-Hellman access
(susceptible to Man-In-The-Middle attack) you will need
to supply "\fB-vencrypt\fR \fInodh:support \fB-anontls\fR never\fR"
or "\fB-vencrypt\fR \fInodh:only\fR"
.IP
If mode is prefixed with "newdh:", then new Diffie
Hellman parameters are generated for each connection
(this can be time consuming: 1-60 secs; see \fB-dhparams\fR
below for a faster way) rather than using the
fixed values in the program.  Using fixed, publicly
known values is not known to be a security problem.
This setting applies to ANONTLS as well.
.IP
Long example: \fB-vencrypt\fR newdh:nox509:support
.IP
Also, if mode is prefixed with "plain:", then
if \fB-unixpw\fR mode is active the VeNCrypt "*Plain"
username+passwd method is enabled for Unix logins.
Otherwise in \fB-unixpw\fR mode the normal login panel is
provided.
.IP
You *MUST* supply the \fB-ssl\fR option for VeNCrypt to
be active.  The \fB-vencrypt\fR option only fine-tunes its
operation.
.PP
\fB-anontls\fR \fImode\fR
.IP
The ANONTLS extension to the VNC protocol allows
encrypted SSL/TLS connections.  If the \fB-ssl\fR mode is
enabled, then ANONTLS is enabled as well BY DEFAULT
(they both use a SSL/TLS tunnel, only the protocol
handshake is a little different.)
.IP
ANONTLS is an older SSL/TLS mode introduced by vino.
.IP
It is referred to as 'TLS' for its registered VNC
security-type name, but we use the more descriptive
\'ANONTLS' here because it provides only Anonymous
Diffie-Hellman encrypted connections, and hence no
possibility for certificate authentication.
.IP
To control when and how ANONTLS is used, specify the
mode string.  If mode is "never", then ANONTLS is not
used.  If mode is "support" (the default) then ANONTLS
is supported.  If mode is "only", then the similar
VeNCrypt protocol is not simultaneously supported.
x11vnc's normal SSL mode (vncs://) will be supported
under \fB-ssl\fR unless you set mode to "force".
.IP
If mode is prefixed with "newdh:", then new Diffie
Hellman parameters are generated for each connection
(this can be time consuming: 1-60 secs; see \fB-dhparams\fR
below for a faster way) rather than using the
fixed values in the program.  Using fixed, publicly
known values is not known to be a security problem.
This setting applies to VeNCrypt as well.  See the
description of "plain:" under \fB-vencrypt.\fR
.IP
Long example: \fB-anontls\fR newdh:plain:support
.IP
You *MUST* supply the \fB-ssl\fR option for ANONTLS to
be active.  The \fB-anontls\fR option only fine-tunes its
operation.
.PP
\fB-sslonly\fR
.IP
Same as: "\fB-vencrypt\fR \fInever \fB-anontls\fR never\fR"  i.e. it
disables the VeNCrypt and ANONTLS encryption methods
and only allows standard SSL tunneling.  You must also
supply the \fB-ssl\fR ... option (see below.)
.PP
\fB-dhparams\fR \fIfile\fR
.IP
For some operations a set of Diffie Hellman parameters
(prime and generator) is needed.  If so, use the
parameters in \fIfile\fR. In particular, the VeNCrypt and
ANONTLS anonymous DH mode need them.  By default a
fixed set is used. If you do not want to do that you
can specify "newdh:" to the \fB-vencrypt\fR and \fB-anontls\fR
options to generate a new set each session.  If that
is too slow for you, use \fB-dhparams\fR file to a set you
created manually via "openssl dhparam \fB-out\fR file 1024"
.PP
\fB-nossl\fR
.IP
Disable the \fB-ssl\fR option (see below). Since \fB-ssl\fR is off
by default \fB-nossl\fR would only be used on the commandline
to unset any *earlier* \fB-ssl\fR option (or \fB-svc...)\fR
.PP
\fB-ssl\fR \fI[pem]\fR
.IP
Use the openssl library (www.openssl.org) to provide a
built-in encrypted SSL/TLS tunnel between VNC viewers
and x11vnc.  This requires libssl support to be
compiled into x11vnc at build time.  If x11vnc is not
built with libssl support it will exit immediately when
\fB-ssl\fR is prescribed.  See the \fB-stunnel\fR option below for
an alternative.
.IP
The VNC Viewer-side needs to support SSL/TLS as well.
See this URL and also the discussion below for
ideas on how to enable SSL support for the viewer:
http://www.karlrunge.com/x11vnc/faq.html#faq-ssl-tun
nel-viewers .  x11vnc provides an SSL enabled Java
viewer applet in the classes/ssl directory (-http or
\fB-httpdir\fR options.)  The SSVNC viewer package supports
SSL tunnels too.
.IP
If the VNC Viewer supports VeNCrypt or ANONTLS (vino's
encryption mode) they are also supported by the \fB-ssl\fR
mode (see the \fB-vencrypt\fR and \fB-anontls\fR options for more
info; use \fB-sslonly\fR to disable both of them.)
.IP
Use "\fB-ssl\fR \fI/path/to/mycert.pem\fR" to specify an SSL
certificate file in PEM format to use to identify and
provide a key for this server.  See 
.IR openssl (1)
for more
info about PEMs and the \fB-sslGenCert\fR and "\fB-ssl\fR \fISAVE\fR"
options below for how to create them.
.IP
The connecting VNC viewer SSL tunnel can (at its option)
authenticate this server if it has the public key part
of the certificate (or a common certificate authority,
CA, is a more sophisticated way to verify this server's
cert, see \fB-sslGenCA\fR below).  This authentication is
done to prevent Man-In-The-Middle attacks.  Otherwise,
if the VNC viewer simply accepts this server's key
WITHOUT verification, the traffic is protected from
passive sniffing on the network, but *NOT* from
Man-In-The-Middle attacks. There are hacker tools
like dsniff/webmitm and cain that implement SSL
Man-In-The-Middle attacks.
.IP
If [pem] is empty or the string "SAVE" then the
.IR openssl (1)
command must be available to generate the
certificate the first time.  A self-signed certificate
is generated (see \fB-sslGenCA\fR and \fB-sslGenCert\fR for use
of a Certificate Authority.)  It will be saved to the
file ~/.vnc/certs/server.pem.  On subsequent calls if
that file already exists it will be used directly.
.IP
Use "SAVE_NOPROMPT" to avoid being prompted to
protect the generated key with a passphrase.  However in
\fB-inetd\fR and \fB-bg\fR modes there will be no prompting for a
passphrase in either case.
.IP
If [pem] is "SAVE_PROMPT" the server.pem certificate
will be created based on your answers to its prompts for
all info such as OrganizationalName, CommonName, etc.
.IP
Use "SAVE-<string>" and "SAVE_PROMPT-<string>"
to refer to the file ~/.vnc/certs/server-<string>.pem
instead (it will be generated if it does not already
exist).  E.g. "SAVE-charlie" will store to the file
~/.vnc/certs/server-charlie.pem
.IP
Examples: x11vnc \fB-ssl\fR SAVE \fB-display\fR :0 ...
x11vnc \fB-ssl\fR SAVE-someother \fB-display\fR :0 ...
.IP
If [pem] is "TMP" and the 
.IR openssl (1)
utility
command exists in PATH, then a temporary, self-signed
certificate will be generated for this session.  If
.IR openssl (1)
cannot be used to generate a temporary
certificate x11vnc exits immediately.  The temporary
cert will be discarded when x11vnc exits.
.IP
If successful in using 
.IR openssl (1)
to generate a
temporary certificate in "SAVE" or "TMP" creation
modes, the public part of it will be displayed to stderr
(e.g. one could copy it to the client-side to provide
authentication of the server to VNC viewers.)
.IP
NOTE: In "TMP" mode, unless you safely copy the
public part of the temporary Cert to the viewer for
authenticate *every time* (unlikely...), then only
passive sniffing attacks are prevented and you are
still open to Man-In-The-Middle attacks.  This is
why the default "SAVE" mode is preferred (and more
sophisticated CA mode too).  Only with saved keys AND
the VNC viewer authenticating them (via the public
certificate), are Man-In-The-Middle attacks prevented.
.IP
If [pem] is "ANON" then the Diffie-Hellman anonymous
key exchange method is used.  In this mode there
are *no* SSL certificates and so it is not possible
to authenticate either the VNC server or VNC client.
Thus only passive network sniffing attacks are avoided:
the "ANON" method is susceptible to Man-In-The-Middle
attacks.  "ANON" is not recommended; instead use
a SSL PEM you created or the default "SAVE" method.
.IP
See \fB-ssldir\fR below to use a directory besides the
default ~/.vnc/certs
.IP
If your x11vnc binary was not compiled with OpenSSL
library support, use of the \fB-ssl\fR option will induce an
immediate failure and exit.  For such binaries, consider
using the \fB-stunnel\fR option for SSL encrypted connections.
.IP
Misc Info: In temporary cert creation mode "TMP", set
the env. var. X11VNC_SHOW_TMP_PEM=1 to have x11vnc print
out the entire certificate, including the PRIVATE KEY
part, to stderr.  There are better ways to get/save this
info.  See "SAVE" above and "\fB-sslGenCert\fR" below.
.PP
\fB-ssltimeout\fR \fIn\fR
.IP
Set SSL read timeout to n seconds.  In some situations
(i.e. an iconified viewer in Windows) the viewer stops
talking and the connection is dropped after the default
timeout (25s for about the first minute, 43200s later).
Set to zero to poll forever.  Set to a negative value
to use the builtin setting.
.IP
Note that this value does NOT apply to the *initial* ssl
init connection.  The default timeout for that is 20sec.
Use \fB-env\fR SSL_INIT_TIMEOUT=n to modify it.
.PP
\fB-sslnofail\fR
.IP
Exit at the first SSL connection failure. Useful when
scripting SSL connections (e.g. x11vnc is started via
ssh) and you do not want x11vnc waiting around for more
connections, tying up ports, etc.
.PP
\fB-ssldir\fR \fIdir\fR
.IP
Use \fIdir\fR as an alternate ssl certificate and key
management toplevel directory.  The default is
~/.vnc/certs
.IP
This directory is used to store server and other
certificates and keys and also other materials.  E.g. in
the simplest case, "\fB-ssl\fR \fISAVE\fR" will store the x11vnc
server cert in dir/server.pem
.IP
Use of alternate directories via \fB-ssldir\fR allows you to
manage multiple VNC Certificate Authority (CA) keys.
Another use is if ~/.vnc/cert is on an NFS share you
might want your certificates and keys to be on a local
filesystem to prevent network snooping (for example
\fB-ssldir\fR /var/lib/x11vnc-certs).
.IP
\fB-ssldir\fR affects nearly all of the other \fB-ssl*\fR options,
e.g. \fB-ssl\fR SAVE, \fB-sslGenCert,\fR etc..
.PP
\fB-sslverify\fR \fIpath\fR
.IP
For either of the \fB-ssl\fR or \fB-stunnel\fR modes, use \fIpath\fR
to provide certificates to authenticate incoming VNC
*Client* connections (normally only the server is
authenticated in SSL.)  This can be used as a method
to replace standard password authentication of clients.
.IP
If \fIpath\fR is a directory it contains the client (or CA)
certificates in separate files.  If path is a file,
it contains one or more certificates. See special tokens
below.  These correspond to the "CApath = dir" and
"CAfile = file" stunnel options.  See the 
.IR stunnel (8)
manpage for details.
.IP
Examples:
x11vnc \fB-ssl\fR \fB-sslverify\fR ~/my.crt
x11vnc \fB-ssl\fR \fB-sslverify\fR ~/my_pem_dir/
.IP
Note that if path is a directory, it must contain
the certs in separate files named like <HASH>.0, where
the value of <HASH> is found by running the command
"openssl x509 \fB-hash\fR \fB-noout\fR \fB-in\fR file.crt". Evidently
one uses <HASH>.1 if there is a collision...
.IP
The the key-management utility "\fB-sslCertInfo\fR \fIHASHON\fR"
and "\fB-sslCertInfo\fR \fIHASHOFF\fR" will create/delete these
hashes for you automatically (via symlink) in the HASH
subdirs it manages.  Then you can point \fB-sslverify\fR to
the HASH subdir.
.IP
Special tokens: in \fB-ssl\fR mode, if \fIpath\fR is not a file or
a directory, it is taken as a comma separated list of
tokens that are interpreted as follows:
.IP
If a token is "CA" that means load the CA/cacert.pem
file from the ssl directory.  If a token is "clients"
then all the files clients/*.crt in the ssl directory
are loaded.  Otherwise the file clients/token.crt
is attempted to be loaded.  As a kludge, use a token
like ../server-foo to load a server cert if you find
that necessary.
.IP
Use \fB-ssldir\fR to use a directory different from the
~/.vnc/certs default.
.IP
Note that if the "CA" cert is loaded you do not need
to load any of the certs that have been signed by it.
You will need to load any additional self-signed certs
however.
.IP
Examples:
x11vnc \fB-ssl\fR \fB-sslverify\fR CA
x11vnc \fB-ssl\fR \fB-sslverify\fR self:fred,self:jim
x11vnc \fB-ssl\fR \fB-sslverify\fR CA,clients
.IP
Usually "\fB-sslverify\fR \fICA\fR" is the most effective.
See the \fB-sslGenCA\fR and \fB-sslGenCert\fR options below for
how to set up and manage the CA framework.
.IP
NOTE: the following utilities, \fB-sslGenCA,\fR \fB-sslGenCert,\fR
\fB-sslEncKey,\fR \fB-sslCertInfo,\fR and \fB-sslCRL\fR are provided for
completeness, but for casual usage they are overkill.
.IP
They provide VNC Certificate Authority (CA) key creation
and server / client key generation and signing.  So they
provide a basic Public Key management framework for
VNC-ing with x11vnc. (note that they require 
.IR openssl (1)
be installed on the system)
.IP
However, the simplest usage mode, "\fB-ssl\fR \fITMP\fR" (where
x11vnc automatically generates its own, self-signed,
temporary key and the VNC viewers always accept it,
e.g. accepting via a dialog box) is probably safe enough
for most scenarios.  CA management is not needed.
.IP
To protect against Man-In-The-Middle attacks the "TMP"
mode can be improved by using "\fB-ssl\fR \fISAVE\fR" (same as
"\fB-ssl\fR", i.e. the default) to have x11vnc create a
longer term self-signed certificate, and then (safely)
copy the corresponding public key cert to the desired
client machines (care must be taken the private key part
is not stolen; you will be prompted for a passphrase).
.IP
So keep in mind no CA key creation or management
(-sslGenCA and \fB-sslGenCert)\fR is needed for either of
the above two common usage modes.
.IP
One might want to use \fB-sslGenCA\fR and \fB-sslGenCert\fR
if you had a large number of VNC client and server
workstations.  That way the administrator could generate
a single CA key with \fB-sslGenCA\fR and distribute its
certificate part to all of the workstations.
.IP
Next, he could create signed VNC server keys
(-sslGenCert server ...) for each workstation or user
that then x11vnc would use to authenticate itself to
any VNC client that has the CA cert.
.IP
Optionally, the admin could also make it so the
VNC clients themselves are authenticated to x11vnc
(-sslGenCert client ...)  For this \fB-sslverify\fR would be
pointed to the CA cert (and/or self-signed certs).
.IP
x11vnc will be able to use all of these cert and
key files.  On the VNC client side, they will need to
be "imported" somehow.  Web browsers have "Manage
Certificates" actions as does the Java applet plugin
Control Panel.  stunnel can also use these files (see
the ss_vncviewer example script in the FAQ and SSVNC.)
.PP
\fB-sslCRL\fR \fIpath\fR
.IP
Set the Certificate Revocation Lists (CRL) to \fIpath\fR.
This setting applies for both \fB-ssl\fR and \fB-stunnel\fR modes.
.IP
If path is a file, the file contains one or more CRLs
in PEM format.  If path is a directory, it contains
hash named files of CRLs in the usual OpenSSL manner.
See the OpenSSL and 
.IR stunnel (8)
documentation for
more info.
.IP
This option only applies if \fB-sslverify\fR has been
supplied: it checks for revocation along the
certificate chain used to verify the VNC client.
The \fB-sslCRL\fR setting will be ignored when \fB-sslverify\fR is
not specified.
.IP
Note that if a CRL's expiration date has passed, all
SSL connections will fail regardless of if they are
related to the subject of the CRL or not.
.IP
Only rarely will one's x11vnc \fB-ssl\fR infrastructure be so
large that this option would be useful (since normally
maintaining the contents of the \fB-sslverify\fR file or
directory should be enough.)  However, when using
x11vnc with a Certificate Authority (see \fB-sslGenCA)\fR
to authenticate Clients via SSL/TLS, the \fB-sslCRL\fR option
can be useful to revoke users' certs whose private SSL
keys were lost or stolen (e.g. laptop.)  This way a new
CA cert+key does not need to be created and new signed
client keys generated and distributed to all users.
.IP
To create a CRL file with revoked certificates the
commands 'openssl ca \fB-revoke\fR ...' and 'openssl ca
\fB-gencrl\fR ...' are useful.  (Run them in ~/.vnc/certs)
.PP
\fB-sslGenCA\fR \fI[dir]\fR
.IP
Generate your own Certificate Authority private key,
certificate, and other files in directory [dir].
x11vnc then exits.
.IP
If [dir] is not supplied, a \fB-ssldir\fR setting is used,
or otherwise ~/.vnc/certs is used.
.IP
This command also creates directories where server and
client certs and keys will be stored.  The 
.IR openssl (1)
program must be installed on the system and available
in PATH.
.IP
After the CA files and directories are created the
x11vnc command exits; the VNC server is not run.
.IP
You will be prompted for information to put into the CA
certificate.  The info does not have to be accurate just
as long as clients accept the cert for VNC connections.
You will also need to supply a passphrase of at least
4 characters for the CA private key.
.IP
Once you have generated the CA you can distribute
its certificate part, [dir]/CA/cacert.pem, to other
workstations where VNC viewers will be run.  One will
need to "import" this certificate in the applications,
e.g. Web browser, Java applet plugin, stunnel, etc.
Next, you can create and sign keys using the CA with
the \fB-sslGenCert\fR option below.
.IP
Examples:
x11vnc \fB-sslGenCA\fR
x11vnc \fB-sslGenCA\fR  ~/myCAdir
x11vnc \fB-ssldir\fR ~/myCAdir \fB-sslGenCA\fR
.IP
(the last two lines are equivalent)
.PP
\fB-sslGenCert\fR \fItype\fR \fIname\fR
.IP
Generate a VNC server or client certificate and private
key pair signed by the CA created previously with
\fB-sslGenCA.\fR  The 
.IR openssl (1)
program must be installed
on the system and available in PATH.
.IP
After the Certificate is generated x11vnc exits; the
VNC server is not run.
.IP
The type of key to be generated is the string \fItype\fR.
It is either "server" (i.e. for use by x11vnc) or
"client" (for a VNC viewer).  Note that typically
only "server" is used: the VNC clients authenticate
themselves by a non-public-key method (e.g. VNC or
unix password).  \fItype\fR is required.
.IP
An arbitrary default name you want to associate with
the key is supplied by the \fIname\fR string.  You can
change it at the various prompts when creating the key.
\fIname\fR is optional.
.IP
If name is left blank for clients keys then "nobody"
is used.  If left blank for server keys, then the
primary server key: "server.pem" is created (this
is the saved one referenced by "\fB-ssl\fR \fISAVE\fR" when the
server is started)
.IP
If \fIname\fR begins with the string "self:" then
a self-signed certificate is created instead of one
signed by your CA key.
.IP
If \fIname\fR begins with the string "req:" then only a
key (.key) and a certificate signing *request* (.req)
are generated.  You can then send the .req file to
an external CA (even a professional one, e.g. Thawte)
and then combine the .key and the received cert into
the .pem file with the same basename.
.IP
The distinction between "server" and "client" is
simply the choice of output filenames and sub-directory.
This makes it so the \fB-ssl\fR SAVE-name option can easily
pick up the x11vnc PEM file this option generates.
And similarly makes it easy for the \fB-sslverify\fR option
to pick up your client certs.
.IP
There is nothing special about the filename or directory
location of either the "server" and "client" certs.
You can rename the files or move them to wherever
you like.
.IP
Precede this option with \fB-ssldir\fR [dir] to use a
directory other than the default ~/.vnc/certs You will
need to run \fB-sslGenCA\fR on that directory first before
doing any \fB-sslGenCert\fR key creation.
.IP
Note you cannot recreate a cert with exactly the same
distiguished name (DN) as an existing one.  To do so,
you will need to edit the [dir]/CA/index.txt file to
delete the line.
.IP
Similar to \fB-sslGenCA,\fR you will be prompted to fill
in some information that will be recorded in the
certificate when it is created.
.IP
Tip: if you know the fully-qualified hostname other
people will be connecting to, you can use that as the
CommonName "CN" to avoid some applications (e.g. web
browsers and java plugin) complaining that it does not
match the hostname.
.IP
You will also need to supply the CA private key
passphrase to unlock the private key created from
\fB-sslGenCA.\fR  This private key is used to sign the server
or client certificate.
.IP
The "server" certs can be used by x11vnc directly by
pointing to them via the \fB-ssl\fR [pem] option.  The default
file will be ~/.vnc/certs/server.pem.  This one would
be used by simply typing \fB-ssl\fR SAVE.  The pem file
contains both the certificate and the private key.
server.crt file contains the cert only.
.IP
The "client" cert + private key file will need
to be copied and imported into the VNC viewer
side applications (Web browser, Java plugin,
stunnel, etc.)  Once that is done you can delete the
"client" private key file on this machine since
it is only needed on the VNC viewer side.  The,
e.g. ~/.vnc/certs/clients/<name>.pem contains both
the cert and private key.  The <name>.crt contains the
certificate only.
.IP
NOTE: It is very important to know one should
generate new keys with a passphrase.  Otherwise if an
untrusted user steals the key file he could use it to
masquerade as the x11vnc server (or VNC viewer client).
You will be prompted whether to encrypt the key with
a passphrase or not.  It is recommended that you do.
One inconvenience to a passphrase is that it must
be typed in EVERY time x11vnc or the client app is
started up.
.IP
Examples:
.IP
x11vnc \fB-sslGenCert\fR server
x11vnc \fB-ssl\fR SAVE \fB-display\fR :0 ...
.IP
and then on viewer using ss_vncviewer stunnel wrapper
(see the FAQ):
ss_vncviewer \fB-verify\fR ./cacert.crt hostname:0
.IP
(this assumes the cacert.crt cert from \fB-sslGenCA\fR
was safely copied to the VNC viewer machine where
ss_vncviewer is run)
.IP
Example using a name:
.IP
x11vnc \fB-sslGenCert\fR server charlie
x11vnc \fB-ssl\fR SAVE-charlie \fB-display\fR :0 ...
.IP
Example for a client certificate (rarely used):
.IP
x11vnc \fB-sslGenCert\fR client roger
scp ~/.vnc/certs/clients/roger.pem somehost:.
rm  ~/.vnc/certs/clients/roger.pem
.IP
x11vnc is then started with the option \fB-sslverify\fR
~/.vnc/certs/clients/roger.crt (or simply \fB-sslverify\fR
roger), and on the viewer user on somehost could do
for example:
.IP
ss_vncviewer \fB-mycert\fR ./roger.pem hostname:0
.IP
If you set the env. var REQ_ARGS='...' it will be
passed to openssl 
.IR req (1).
A common use would be
REQ_ARGS='-days 1095' to bump up the expiration date
(3 years in this case).
.PP
\fB-sslEncKey\fR \fIpem\fR
.IP
Utility to encrypt an existing PEM file with a
passphrase you supply when prompted.  For that key to be
used (e.g. by x11vnc) the passphrase must be supplied
each time.
.IP
The "SAVE" notation described under \fB-ssl\fR applies as
well. (precede this option with \fB-ssldir\fR [dir] to refer
a directory besides the default ~/.vnc/certs)
.IP
The 
.IR openssl (1)
program must be installed on the system
and available in PATH.  After the Key file is encrypted
the x11vnc command exits; the VNC server is not run.
.IP
Examples:
x11vnc \fB-sslEncKey\fR /path/to/foo.pem
x11vnc \fB-sslEncKey\fR SAVE
x11vnc \fB-sslEncKey\fR SAVE-charlie
.PP
\fB-sslCertInfo\fR \fIpem\fR
.IP
Prints out information about an existing PEM file.
In addition the public certificate is also printed.
The 
.IR openssl (1)
program must be in PATH. Basically the
command "openssl x509 \fB-text"\fR is run on the pem.
.IP
After the info is printed the x11vnc command exits;
the VNC server is not run.
.IP
The "SAVE" notation described under \fB-ssl\fR applies
as well.
.IP
Using  "LIST" will give a list of all certs being
managed (in the ~/.vnc/certs dir, use \fB-ssldir\fR to refer
to another dir).  "ALL" will print out the info for
every managed key (this can be very long).  Giving a
client or server cert shortname will also try a lookup
(e.g. \fB-sslCertInfo\fR charlie).  Use "LISTL" or "LL"
for a long (ls \fB-l\fR style) listing.
.IP
Using "HASHON" will create subdirs [dir]/HASH and
[dir]/HASH with OpenSSL hash filenames (e.g. 0d5fbbf1.0)
symlinks pointing up to the corresponding *.crt file.
([dir] is ~/.vnc/certs or one given by \fB-ssldir.)\fR
This is a useful way for other OpenSSL applications
(e.g. stunnel) to access all of the certs without
having to concatenate them.  x11vnc will not use them
unless you specifically reference them.  "HASHOFF"
removes these HASH subdirs.
.IP
The LIST, LISTL, LL, ALL, HASHON, HASHOFF words can
also be lowercase, e.g. "list".
.PP
\fB-sslDelCert\fR \fIpem\fR
.IP
Prompts you to delete all .crt .pem .key .req files
associated with [pem].  x11vnc then exits. "SAVE"
and lookups as in \fB-sslCertInfo\fR apply as well.
.PP
\fB-sslScripts\fR
.IP
Prints out both the 'genCA' and 'genCert' x11vnc
openssl wrapper scripts for you to examine, modify, etc.
The scripts are printed to stdout and then the x11vnc
program exits.
.PP
\fB-stunnel\fR \fI[pem]\fR
.IP
Use the 
.IR stunnel (8)
(stunnel.mirt.net) to provide an
encrypted SSL tunnel between viewers and x11vnc.
.IP
This external tunnel method was implemented prior to the
integrated \fB-ssl\fR encryption described above.  It still
works well and avoids the requirement of linking with
the OpenSSL libraries.  This mode requires stunnel
to be installed on the system and available via PATH
(n.b. stunnel is often installed in sbin directories).
Version 4.x of stunnel is assumed (but see \fB-stunnel3\fR
below.)
.IP
[pem] is optional, use "\fB-stunnel\fR \fI/path/to/stunnel.pem\fR"
to specify a PEM certificate file to pass to stunnel.
See the \fB-ssl\fR option for more info on certificate files.
.IP
Whether or not your stunnel has its own certificate
depends on your stunnel configuration; stunnel often
generates one at install time.  See your stunnel
documentation for details.  In any event, if you want to
use this certificate you must supply the full path to it
as [pem].  Note: the file may only be readable by root.
.IP
[pem] may also be the special strings "TMP", "SAVE",
and "SAVE..." as described in the \fB-ssl\fR option.
If [pem] is not supplied, "SAVE" is assumed.
.IP
Note that the VeNCrypt, ANONTLS, and "ANON" modes
are not supported in \fB-stunnel\fR mode.
.IP
stunnel is started up as a child process of x11vnc and
any SSL connections stunnel receives are decrypted and
sent to x11vnc over a local socket.  The strings
"The SSL VNC desktop is ..." and "SSLPORT=..."
are printed out at startup to indicate this.
.IP
The \fB-localhost\fR option is enforced by default to avoid
people routing around the SSL channel.  Use \fB-env\fR
STUNNEL_DISABLE_LOCALHOST=1 to disable this security
requirement.
.IP
Set \fB-env\fR STUNNEL_DEBUG=1 for more debugging printout.
.IP
Set \fB-env\fR STUNNEL_PROG=xxx to the full path of stunnel
program you want to be used (e.g. /usr/bin/stunnel4).
.IP
Set \fB-env\fR STUNNEL_LISTEN=xxx to the address of the
network interface to listen on (the default is to listen
on all interfaces), e.g. STUNNEL_LISTEN=192.168.1.100.
.IP
A simple way to add IPv6 support is STUNNEL_LISTEN=::
.IP
Your VNC viewer will also need to be able to connect
via SSL.  Unfortunately not too many do this.  See the
information about SSL viewers under the \fB-ssl\fR option.
The x11vnc project's SSVNC is an option.
.IP
Also, in the x11vnc distribution, patched TightVNC
and UltraVNC Java applet jar files are provided in
the classes/ssl directory that do SSL connections.
Enable serving them with the \fB-http,\fR \fB-http_ssl,\fR or
\fB-httpdir\fR (see the option descriptions for more info.)
.IP
Note that for the Java viewer applet usage the
"?PORT=xxxx" in the various URLs printed at startup
will need to be supplied to the web browser to connect
properly.
.IP
Currently the automatic "single port" HTTPS mode of
\fB-ssl\fR is not fully supported in \fB-stunnel\fR mode.  However,
it can be emulated via:
.IP
% x11vnc \fB-stunnel\fR \fB-http_ssl\fR \fB-http_oneport\fR ...
.IP
In general, it is also not too difficult to set up
an stunnel or other SSL tunnel on the viewer side.
A simple example on Unix using stunnel 3.x is:
.IP
% stunnel \fB-c\fR \fB-d\fR localhost:5901 \fB-r\fR remotehost:5900
% vncviewer localhost:1
.IP
For Windows, stunnel has been ported to it and there
are probably other such tools available.  See the FAQ
and SSVNC for more examples.
.PP
\fB-stunnel3\fR \fI[pem]\fR
.IP
Use version 3.x stunnel command line syntax instead of
version 4.x.  The \fB-http/-httpdir\fR Java applet serving
is currently not available in this mode.
.PP
\fB-enc\fR \fIcipher:keyfile\fR
.IP
Use symmetric encryption with cipher "cipher"
and secret key data in "keyfile".  If keyfile is
pw=<string> then "string" is used as the key data.
.IP
NOTE: It is recommended that you use SSL via the \fB-ssl\fR
option instead of this option because SSL is well
understood and takes great care to establish unique
session keys and is more compatible with other software.
Use this option if you do not want to deal with SSL
certificates for authentication and do not want to
use SSH but want some encryption for your VNC session.
Or if you must interface with a symmetric key tunnel
that you do not have control over.
.IP
Note that this mode will NOT work with the UltraVNC DSM
plugins because they alter the RFB protocol in addition
to tunnelling with the symmetric cipher (an unfortunate
choice of implementation...)
.IP
cipher can be one of:  arc4, aesv2, aes-cfb, blowfish,
aes256, or 3des.  See the OpenSSL documentation for
more info.  The keysize is 128 bits (except for aes256).
Here is one way to make a keyfile with that many bits:
.IP
dd if=/dev/random of=./my.key bs=16 count=1
.IP
you will need to securely share this key with the other
side of the VNC connection (See SSVNC for examples).
.IP
Example:  \fB-enc\fR blowfish:./my.key
Example:  \fB-enc\fR blowfish:pw=swordfish
.IP
By default 16 bytes of random salt followed by 16 bytes
of random initialization vector are sent at the very
beginning of the stream.  The other side must read these
and initialize their cipher with them.  These values
make the session key unique (without them the security
is minimal).  Similarly, the other side must send us
its random salt and IV with those same lengths.
.IP
The salt and key data are combined to create a session
key using an md5 hash as described in 
.IR EVP_BytesToKey (3).
.IP
The exact call is: EVP_BytesToKey(Cipher, EVP_md5(),
salt, keydata, len, 1, keystr, NULL);  where salt is
the random data as described above, and keydata is the
shared secret key data.  keystr is the resulting session
key.  The cipher is then seeded with keystr and uses
the random initialization vector as its first block.
.IP
To modify the amount of random salt and initialization
vector use cipher@n,m where n is the salt length and
m the initialization vector length.  E.g.
.IP
\fB-enc\fR aes-cfb@8,16:./my.key
.IP
It is not a good idea to set either one to zero,
although you may be forced to if the other side of the
tunnel is not under your control.
.IP
To skip the salt and EVP_BytesToKey MD5 entirely (no
hashing is done: the keydata is directly inserted into
the cipher) specify "-1" for the salt, e.g.
.IP
\fB-enc\fR blowfish@-1,16:./my.key
.IP
The message digest can also be changed to something
besides the default MD5.  Use cipher@md+n,m where "md"
can be one of sha, sha1, md5, or ripe.  For example:
.IP
\fB-enc\fR arc4@sha+8,16:./my.key
.IP
The SSVNC vnc viewer project supplies a symmetric
encryption tool named "ultravnc_dsm_helper" that can
be used on the viewer side.  For example:
.IP
ssvncviewer exec='ultravnc_dsm_helper arc4 my.key 0 h:p'
.IP
where h:p is the hostname and port of the x11vnc server.
ultravnc_dsm_helper may also be used standalone to
provide a symmetric encryption tunnel for any viewer
or server (VNC or otherwise.) The cipher (1st arg)
is basically the same syntax as we use above.
.IP
Also see the 'Non-Ultra DSM' SSVNC option for the
\'UltraVNC DSM Encryption Plugin' advanced option.
.IP
For both ways of using the viewer, you can specify the
salt,ivec sizes (in GUI or, e.g. arc4@8,16).
.PP
\fB-https\fR \fI[port]\fR
.IP
Use a special, separate HTTPS port (-ssl and
\fB-stunnel\fR modes only) for HTTPS Java viewer applet
downloading. I.e. not 5900 and not 5800 (the defaults.)
.IP
BACKGROUND: In \fB-ssl\fR mode, it turns out you can use the
single VNC port (e.g. 5900) for both VNC and HTTPS
connections. (HTTPS is used to retrieve a SSL-aware
VncViewer.jar applet that is provided with x11vnc).
Since both use SSL the implementation was extended to
detect if HTTP traffic (i.e. GET) is taking place and
handle it accordingly.  The URL would be, e.g.:
.IP
https://mymachine.org:5900/
.IP
This is convenient for firewalls, etc, because only one
port needs to be allowed in.  However, this heuristic
adds a few seconds delay to each connection and can be
unreliable (especially if the user takes much time to
ponder the Certificate dialogs in his browser, Java VM,
or VNC Viewer applet.  That's right 3 separate "Are
you sure you want to connect?" dialogs!)
.IP
END OF BACKGROUND.
.IP
USAGE: So use the \fB-https\fR option to provide a separate,
more reliable HTTPS port that x11vnc will listen on.  If
[port] is not provided (or is 0), one is autoselected.
The URL to use is printed out at startup.
.IP
The SSL Java applet directory is specified via the
\fB-httpdir\fR option.  If not supplied, \fB-https\fR will try
to guess the directory as though the \fB-http\fR option
was supplied.
.PP
\fB-httpsredir\fR \fI[port]\fR
.IP
In \fB-ssl\fR mode with the Java applet retrieved via HTTPS,
when the HTML file containing applet parameters
('index.vnc' or 'proxy.vnc') is sent do NOT set the
applet PORT parameter to the actual VNC port but set it
to "port" instead.  If "port" is not supplied, then
the port number is guessed from the Host: HTTP header.
.IP
This is useful when an incoming TCP connection
redirection is performed by a router/gateway/firewall
from one port to an internal machine where x11vnc is
listening on a different port. The Java applet needs to
connect to the firewall/router port, not the VNC port
on the internal workstation. For example, one could
redir from mygateway.com:443 to workstation:5900.
.IP
This spares the user from having to type in
https://mygateway.com/?PORT=443 into their web
browser. Note that port 443 is the default https port;
other ports must be explicitly indicated, for example:
https://mygateway.com:8000/?PORT=8000.  To avoid having
to include the PORT= in the browser URL, simply supply
"\fB-httpsredir\fR" to x11vnc.
.IP
This option does not work in \fB-stunnel\fR mode.
.IP
More tricks: set the env var X11VNC_EXTRA_HTTPS_PARAMS
to be extra URL parameters to use.  This way you do
not need to specify extra PARAMS in the index.vnc file.
E.g. x11vnc \fB-env\fR X11VNC_EXTRA_HTTPS_PARAMS='?GET=1' ...
.IP
If you do not want to expose the non-SSL HTTP port to
the network (i.e. you just want the single VNC/HTTPS
port, e.g. 5900, open for connections) then specify the
option \fB-env\fR X11VNC_HTTP_LISTEN_LOCALHOST=1  This way
the connection to the LibVNCServer httpd server will
only be available on localhost (note that in \fB-ssl\fR mode,
HTTPS requests are redirected from SSL to the non-SSL
LibVNCServer HTTP server.)
.PP
\fB-http_oneport\fR
.IP
For UN-encrypted connections mode (i.e. no \fB-ssl,\fR
\fB-stunnel,\fR or \fB-enc\fR options), allow the Java VNC Viewer
applet to be downloaded thru the VNC port via HTTP.
.IP
That is to say, you can use a single port for Java
applet viewer connections by using a URL in your web
browser like this, for example:
.IP
http://hostname:5900
.IP
The regular, two-port mode, URL http://hostname:5800
will continue to work as well.
.IP
As mentioned above, this mode will NOT work with
the \fB-ssl,\fR \fB-stunnel,\fR or \fB-enc\fR encryption options.
Note that is it equivalent to '-enc none' (i.e. it
uses the same detection mechanism as for HTTPS, but
with no encryption.)
.IP
HTTPS single-port is on by default in \fB-ssl\fR encrypted
mode (and \fB-enc\fR too), so you only need \fB-http_oneport\fR
when doing non-SSL encrypted connections.
.IP
This mode could also be useful for SSH tunnels since
it means only one port needs to be redirected.
.IP
The \fB-httpsredir\fR option may also be useful for this
mode when using an SSH tunnel as well as for router
port redirections.
.IP
Note that the \fB-env\fR X11VNC_HTTP_LISTEN_LOCALHOST=1
option described above under \fB-httpsredir\fR applies for
the LibVNCServer httpd server in all cases (ssl or not.)
.PP
\fB-ssh\fR \fIuser@host:disp\fR
.IP
Create a remote listening port on machine "host"
via a SSH tunnel using the \fB-R\fR rport:localhost:lport
method. lport will be the local x11vnc listening port,
so a connection to rport (5900+disp) on "host"
will reach x11vnc.  E.g. fred@snoopy.com:0
.IP
This could be useful if a firewall/router prevents
incoming connections to the x11vnc machine, but
the ssh machine "host" can be reached by the VNC
viewer. "user@" is not needed unless the remote unix
username differs from the current one.
.IP
By default the remote sshd is usually configured to
listen only on localhost for rport, so the viewer may
need to ssh \fB-L\fR redir to "host" as well (See SSVNC to
automate this).  The sshd setting GatewayPorts enables
listening on all interfaces for rport; viewers can
reach it more easily.
.IP
"disp" is the VNC display for the remote SSH side,
e.g. 0 corresponds to port 5900, etc.  If disp is
greater than 200 the value is used as the port.  Use a
negative value to force a low port, e.g. host:-80 will
use port 80.
.IP
If ssh-agent is not active, then the ssh password needs
to be entered in the terminal where x11vnc is running.
.IP
By default the remote ssh will issue a 'sleep 300' to
wait for the incoming connection for 5 mins.  To modify
this use user@host:disp+secs.
.IP
If the remote SSH server is on a non-standard port
(i.e. not 22) use user@host:port:disp+secs.
.IP
Note that the ssh process MAY NOT be killed when
x11vnc exits.  It tries by looking at 
.IR ps (1)
output.
.PP
\fB-usepw\fR
.IP
If no other password method was supplied on the command
line, first look for ~/.vnc/passwd and if found use it
with \fB-rfbauth;\fR next, look for ~/.vnc/passwdfile and
use it with \fB-passwdfile;\fR otherwise, prompt the user
for a password to create ~/.vnc/passwd and use it with
the \fB-rfbauth\fR option.  If none of these succeed x11vnc
exits immediately.
.PP
\fB-storepasswd\fR \fIpass\fR \fIfile\fR
.IP
Store password \fIpass\fR as the VNC password in the
file \fIfile\fR.  Once the password is stored the
program exits.  Use the password via "\fB-rfbauth\fR \fIfile\fR"
.IP
If called with no arguments, "x11vnc \fB-storepasswd",\fR
the user is prompted for a password and it is stored
in the file ~/.vnc/passwd.  Called with one argument,
that will be the file to store the prompted password in.
.PP
\fB-nopw\fR
.IP
Disable the big warning message when you use x11vnc
without some sort of password.
.PP
\fB-accept\fR \fIstring\fR
.IP
Run a command (possibly to prompt the user at the
X11 display) to decide whether an incoming client
should be allowed to connect or not.  \fIstring\fR is
an external command run via 
.IR system (3)
or some special
cases described below.  Be sure to quote \fIstring\fR
if it contains spaces, shell characters, etc.  If the
external command returns 0 the client is accepted,
otherwise the client is rejected.  See below for an
extension to accept a client view-only.
.IP
If x11vnc is running as root (say from 
.IR inetd (8)
or from
display managers 
.IR xdm (1)
, 
.IR gdm (1)
, etc), think about the
security implications carefully before supplying this
option (likewise for the \fB-gone\fR option).
.IP
Environment: The RFB_CLIENT_IP environment variable will
be set to the incoming client IP number and the port
in RFB_CLIENT_PORT (or -1 if unavailable).  Similarly,
RFB_SERVER_IP and RFB_SERVER_PORT (the x11vnc side
of the connection), are set to allow identification
of the tcp virtual circuit.  The x11vnc process
id will be in RFB_X11VNC_PID, a client id number in
RFB_CLIENT_ID, and the number of other connected clients
in RFB_CLIENT_COUNT.  RFB_MODE will be "accept".
RFB_STATE will be PROTOCOL_VERSION, SECURITY_TYPE,
AUTHENTICATION, INITIALISATION, NORMAL, or UNKNOWN
indicating up to which state the client has achieved.
RFB_LOGIN_VIEWONLY will be 0, 1, or -1 (unknown).
RFB_USERNAME, RFB_LOGIN_TIME, and RFB_CURRENT_TIME may
also be set.
.IP
If \fIstring\fR is "popup" then a builtin popup window
is used.  The popup will time out after 120 seconds,
use "popup:N" to modify the timeout to N seconds
(use 0 for no timeout).
.IP
In the case of "popup" and when the \fB-unixpw\fR option
is specified, then a *second* window will be popped
up after the user successfully logs in via his UNIX
password.  This time the user will be identified as
UNIX:username@hostname, the "UNIX:" prefix indicates
which user the viewer logged as via \fB-unixpw.\fR  The first
popup is only for whether to allow him to even *try*
to login via unix password.
.IP
If \fIstring\fR is "xmessage" then an 
.IR xmessage (1)
invocation is used for the command.  xmessage must be
installed on the machine for this to work.
.IP
Both "popup" and "xmessage" will present an option
for accepting the client "View-Only" (the client
can only watch).  This option will not be presented if
\fB-viewonly\fR has been specified, in which case the entire
display is view only.
.IP
If the user supplied command is prefixed with something
like "yes:0,no:*,view:3 mycommand ..." then this
associates the numerical command return code with
the actions: accept, reject, and accept-view-only,
respectively.  Use "*" instead of a number to indicate
the default action (in case the command returns an
unexpected value).  E.g. "no:*" is a good choice.
.IP
Note that x11vnc blocks while the external command
or popup is running (other clients may see no updates
during this period).  So a person sitting a the physical
display is needed to respond to an popup prompt. (use
a 2nd x11vnc if you lock yourself out).
.IP
More \fB-accept\fR tricks: use "popupmouse" to only allow
mouse clicks in the builtin popup to be recognized.
Similarly use "popupkey" to only recognize
keystroke responses.  These are to help avoid the
user accidentally accepting a client by typing or
clicking. All 3 of the popup keywords can be followed
by +N+M to supply a position for the popup window.
The default is to center the popup window.
.PP
\fB-afteraccept\fR \fIstring\fR
.IP
As \fB-accept,\fR except to run a user supplied command after
a client has been accepted and authenticated. RFB_MODE
will be set to "afteraccept" and the other RFB_*
variables are as in \fB-accept.\fR  Unlike \fB-accept,\fR the
command return code is not interpreted by x11vnc.
Example: \fB-afteraccept\fR 'killall xlock &'
.PP
\fB-gone\fR \fIstring\fR
.IP
As \fB-accept,\fR except to run a user supplied command when
a client goes away (disconnects).  RFB_MODE will be
set to "gone" and the other RFB_* variables are as
in \fB-accept.\fR  The "popup" actions apply as well.
Unlike \fB-accept,\fR the command return code is not
interpreted by x11vnc.  Example: \fB-gone\fR 'xlock &'
.PP
\fB-users\fR \fIlist\fR
.IP
If x11vnc is started as root (say from 
.IR inetd (8)
or from
display managers 
.IR xdm (1)
, 
.IR gdm (1)
, etc), then as soon
as possible after connections to the X display are
established try to switch to one of the users in the
comma separated \fIlist\fR.  If x11vnc is not running as
root this option is ignored.
.IP
Why use this option?  In general it is not needed since
x11vnc is already connected to the X display and can
perform its primary functions.  The option was added
to make some of the *external* utility commands x11vnc
occasionally runs work properly.  In particular under
GNOME and KDE to implement the "\fB-solid\fR \fIcolor\fR" feature
external commands (gconftool-2 and dcop) unfortunately
must be run as the user owning the desktop session.
Since this option switches userid it also affects the
userid used to run the processes for the \fB-accept\fR and
\fB-gone\fR options.  It also affects the ability to read
files for options such as \fB-connect,\fR \fB-allow,\fR and \fB-remap\fR
and also the ultra and tight filetransfer feature if
enabled.  Note that the \fB-connect\fR file is also sometimes
written to.
.IP
So be careful with this option since in some situations
its use can decrease security.
.IP
In general the switch to a user will only take place
if the display can still be successfully opened as that
user (this is primarily to try to guess the actual owner
of the session). Example: "\fB-users\fR \fIfred,wilma,betty\fR".
Note that a malicious local user "barney" by
quickly using "xhost +" when logging in may possibly
get the x11vnc process to switch to user "fred".
What happens next?
.IP
Under display managers it may be a long time before
the switch succeeds (i.e. a user logs in).  To instead
make it switch immediately regardless if the display
can be reopened prefix the username with the "+"
character. E.g. "\fB-users\fR \fI+bob\fR" or "\fB-users\fR \fI+nobody\fR".
.IP
The latter (i.e. switching immediately to user
"nobody") is the only obvious use of the \fB-users\fR option
that increases security.
.IP
Use the following notation to associate a group with
a user: user1.group1,user2.group2,...  Note that
.IR initgroups (2)
will still be called first to try to
switch to ALL of a user's groups (primary and additional
groups).  Only if that fails or it is not available
then the single group specified as above (or the user's
primary group if not specified) is switched to with
.IR setgid (2).
Use \fB-env\fR X11VNC_SINGLE_GROUP=1 to prevent
trying 
.IR initgroups (2)
and only switch to the single
group.  This sort of setting is only really needed to
make the ultra or tight filetransfer permissions work
properly. This format applies to any comma separated list
of users, even the special "=" modes described below.
.IP
In \fB-unixpw\fR mode, if "\fB-users\fR \fIunixpw=\fR" is supplied
then after a user authenticates himself via the
\fB-unixpw\fR mechanism, x11vnc will try to switch to that
user as though "\fB-users\fR \fI+username\fR" had been supplied.
If you want to limit which users this will be done for,
provide them as a comma separated list after "unixpw="
Groups can also be specified as described above.
.IP
Similarly, in \fB-ssl\fR mode, if "\fB-users\fR \fIsslpeer=\fR" is
supplied then after an SSL client authenticates with his
cert (the \fB-sslverify\fR option is required for this) x11vnc
will extract a UNIX username from the "emailAddress"
field (username@hostname.com) of the "Subject" of the
x509 SSL cert and then try to switch to that user as
though "\fB-users\fR \fI+username\fR" had been supplied.  If you
want to limit which users this will be done for, provide
them as a comma separated list after "sslpeer=".
Set the env. var X11VNC_SSLPEER_CN to use the Common
Name (normally a hostname) instead of the Email field.
.IP
NOTE: for sslpeer= mode the x11vnc administrator must
take care that any client certs he adds to \fB-sslverify\fR
have the intended UNIX username in the "emailAddress"
field of the cert.  Otherwise a user may be able to
log in as another.  This command can be of use in
checking: "openssl x509 \fB-text\fR \fB-in\fR file.crt", see the
"Subject:" line.  Also, along with the normal RFB_*
env. vars. (see \fB-accept)\fR passed to external cmd=
commands, RFB_SSL_CLIENT_CERT will be set to the
client's x509 certificate string.
.IP
The sslpeer= mode can aid finding X sessions via the
FINDDISPLAY and FINDCREATEDISPLAY mechanisms.
.IP
To immediately switch to a user *before* connections
to the X display are made or any files opened use the
"=" character: "\fB-users\fR \fI=bob\fR".  That user needs to
be able to open the X display and any files of course.
.IP
The special user "guess=" means to examine the utmpx
database (see 
.IR who (1)
) looking for a user attached to
the display number (from DISPLAY or \fB-display\fR option)
and try him/her.  To limit the list of guesses, use:
"\fB-users\fR \fIguess=bob,betty\fR".
.IP
Even more sinister is the special user "lurk="
that means to try to guess the DISPLAY from the utmpx
login database as well.  So it "lurks" waiting for
anyone to log into an X session and then connects to it.
Specify a list of users after the = to limit which users
will be tried.  To enable a different searching mode, if
the first user in the list is something like ":0" or
":0-2" that indicates a range of DISPLAY numbers that
will be tried (regardless of whether they are in the
utmpx database) for all users that are logged in.  Also
see the "\fB-display\fR \fIWAIT:...\fR" functionality.  Examples:
"\fB-users\fR \fIlurk=\fR" and also "\fB-users\fR \fIlurk=:0-1,bob,mary\fR"
.IP
Be especially careful using the "guess=" and "lurk="
modes.  They are not recommended for use on machines
with untrustworthy local users.
.PP
\fB-noshm\fR
.IP
Do not use the MIT-SHM extension for the polling.
Remote displays can be polled this way: be careful this
can use large amounts of network bandwidth.  This is
also of use if the local machine has a limited number
of shm segments and \fB-onetile\fR is not sufficient.
.PP
\fB-flipbyteorder\fR
.IP
Sometimes needed if remotely polled host has different
endianness.  Ignored unless \fB-noshm\fR is set.
.PP
\fB-onetile\fR
.IP
Do not use the new copy_tiles() framebuffer mechanism,
just use 1 shm tile for polling.  Limits shm segments
used to 3.
.IP
To disable any automatic shm reduction set the
env. var. X11VNC_NO_LIMIT_SHM.
.PP
\fB-solid\fR \fI[color]\fR
.IP
To improve performance, when VNC clients are connected
try to change the desktop background to a solid color.
The [color] is optional: the default color is "cyan4".
For a different one specify the X color (rgb.txt name,
e.g. "darkblue" or numerical "#RRGGBB").
.IP
Currently this option only works on GNOME, KDE, CDE,
XFCE, and classic X (i.e. with the background image
on the root window).  The "gconftool-2", "dcop"
and "xfconf-query" external commands are run for
GNOME, KDE, and XFCE respectively.  This also works
on native MacOSX.  (There is no color selection for
MacOSX or XFCE.)  Other desktops won't work, (send
us the corresponding commands if you find them).
If x11vnc is running as root (
.IR inetd (8)
or 
.IR gdm (1)
),
the \fB-users\fR option may be needed for GNOME, KDE, XFCE.
If x11vnc guesses your desktop incorrectly, you can
force it by prefixing color with "gnome:", "kde:",
"cde:", "xfce:", or "root:".
.IP
Update: \fB-solid\fR no longer works on KDE4.
.IP
This mode works in a limited way on the Mac OS X Console
with one color ('kelp') using the screensaver writing
to the background.  Look in "~/Library/Screen Savers"
for VncSolidColor.png to change the color.
.PP
\fB-blackout\fR \fIstring\fR
.IP
Black out rectangles on the screen. \fIstring\fR is a
comma separated list of WxH+X+Y type geometries for
each rectangle.  If one of the items on the list is the
string "noptr" the mouse pointer will not be allowed
to go into a blacked out region.
.PP
\fB-xinerama,\fR \fB-noxinerama\fR
.IP
If your screen is composed of multiple monitors
glued together via XINERAMA, and that screen is
not a rectangle this option will try to guess the
areas to black out (if your system has libXinerama).
default: \fB-xinerama\fR
.IP
In general, we have noticed on XINERAMA displays you may
need to use the "\fB-xwarppointer\fR" option if the mouse
pointer misbehaves and it is enabled by default. Use
"\fB-noxwarppointer\fR" if you do not want this.
.PP
\fB-xtrap\fR
.IP
Use the DEC-XTRAP extension for keystroke and mouse
input insertion.  For use on legacy systems, e.g. X11R5,
running an incomplete or missing XTEST extension.
By default DEC-XTRAP will be used if XTEST server grab
control is missing, use \fB-xtrap\fR to do the keystroke and
mouse insertion via DEC-XTRAP as well.
.PP
\fB-xrandr\fR \fI[mode]\fR
.IP
If the display supports the XRANDR (X Resize, Rotate
and Reflection) extension, and you expect XRANDR events
to occur to the display while x11vnc is running, this
options indicates x11vnc should try to respond to
them (as opposed to simply crashing by assuming the
old screen size).  See the 
.IR xrandr (1)
manpage and run
\'xrandr \fB-q'\fR for more info.  [mode] is optional and
described below.
.IP
Since watching for XRANDR events and trapping errors
increases polling overhead, only use this option if
XRANDR changes are expected.  For example on a rotatable
screen PDA or laptop, or using a XRANDR-aware Desktop
where you resize often.  It is best to be viewing with a
vncviewer that supports the NewFBSize encoding, since it
knows how to react to screen size changes.  Otherwise,
LibVNCServer tries to do so something reasonable for
viewers that cannot do this (portions of the screen
may be clipped, unused, etc).
.IP
Note: the default now is to check for XRANDR events, but
do not trap every X call that may fail due to resize.
If a resize event is received, the full \fB-xrandr\fR mode
is enabled.  To disable even checking for events supply:
\fB-noxrandr.\fR
.IP
"mode" defaults to "resize", which means create a
new, resized, framebuffer and hope all viewers can cope
with the change.  "newfbsize" means first disconnect
all viewers that do not support the NewFBSize VNC
encoding, and then resize the framebuffer.  "exit"
means disconnect all viewer clients, and then terminate
x11vnc.
.PP
\fB-rotate\fR \fIstring\fR
.IP
Rotate and/or flip the framebuffer view exported by VNC.
This transformation is independent of XRANDR and is
done in software in main memory and so may be slower.
This mode could be useful on a handheld with portrait or
landscape modes that do not correspond to the scanline
order of the actual framebuffer.  \fIstring\fR can be:
.IP
x     flip along x-axis
y     flip along y-axis
xy     flip along x- and y-axes
+90     rotate 90 degrees clockwise
\fB-90\fR     rotate 90 degrees counter-clockwise
+90x     rotate 90 degrees CW, then flip along x
+90y     rotate 90 degrees CW, then flip along y
.IP
these give all possible rotations and reflections.
.IP
Aliases: same as xy:  yx, +180, \fB-180,\fR 180
same as \fB-90:\fR +270, 270
same as +90: 90, (ditto for 90x, 90y)
.IP
Like \fB-scale,\fR this transformation is applied at the very
end of any chain of framebuffer transformations and so
any options with geometries, e.g. \fB-blackout,\fR \fB-clip,\fR etc.
are relative to the original X (or \fB-rawfb)\fR framebuffer,
not the final one sent to VNC viewers.
.IP
If you do not want the cursor shape to be rotated
prefix \fIstring\fR with "nc:", e.g. "nc:+90",
"nc:xy", etc.
.PP
\fB-padgeom\fR \fIWxH\fR
.IP
Whenever a new vncviewer connects, the framebuffer is
replaced with a fake, solid black one of geometry WxH.
Shortly afterwards the framebuffer is replaced with the
real one.  This is intended for use with vncviewers
that do not support NewFBSize and one wants to make
sure the initial viewer geometry will be big enough
to handle all subsequent resizes (e.g. under \fB-xrandr,\fR
\fB-remote\fR id:windowid, rescaling, etc.)
.IP
In \fB-unixpw\fR mode this sets the size of the login screen.
Use "once:WxH" it ignore padgeom after the login
screen is set up.
.PP
\fB-o\fR \fIlogfile\fR
.IP
Write stderr messages to file \fIlogfile\fR instead of to
the terminal.  Same as "\fB-logfile\fR \fIfile\fR".  To append
to the file use "\fB-oa\fR \fIfile\fR" or "\fB-logappend\fR \fIfile\fR".
If \fIlogfile\fR contains the string "%VNCDISPLAY"
it is expanded to the vnc display (the name may need
to be guessed at.)  "%HOME" works too.
.PP
\fB-flag\fR \fIfile\fR
.IP
Write the "PORT=NNNN" (e.g. PORT=5900) string to
\fIfile\fR in addition to stdout.  This option could be
useful by wrapper script to detect when x11vnc is ready.
.PP
\fB-rmflag\fR \fIfile\fR
.IP
Remove \fIfile\fR at exit to signal when x11vnc is done.
The file is created at startup if it does not already
exist or if \fIfile\fR is prefixed with "create:".
If the file is created, the x11vnc PID is placed in
the file.  Otherwise the files contents is not changed.
Use prefix "nocreate:" to prevent creation.
.PP
\fB-rc\fR \fIfilename\fR
.IP
Use \fIfilename\fR instead of $HOME/.x11vncrc for rc file.
.PP
\fB-norc\fR
.IP
Do not process any .x11vncrc file for options.
.PP
\fB-env\fR \fIVAR=VALUE\fR
.IP
Set the environment variable 'VAR' to value 'VALUE'
at x11vnc startup.  This is a convenience utility to
avoid shell script wrappers, etc. to set the env. var.
You may specify as many of these as needed on the
command line.
.PP
\fB-prog\fR \fI/path/to/x11vnc\fR
.IP
Set the full path to the x11vnc program for cases when
it cannot be determined from argv[0] (e.g. tcpd/inetd)
.PP
\fB-h,\fR \fB-help\fR
.IP
Print this help text.
-?, \fB-opts\fR              Only list the x11vnc options.
.PP
\fB-V,\fR \fB-version\fR
.IP
Print program version and last modification date.
.PP
\fB-license\fR
.IP
Print out license information.  Same as \fB-copying\fR and
\fB-warranty.\fR
.PP
\fB-dbg\fR
.IP
Instead of exiting after cleaning up, run a simple
"debug crash shell" when fatal errors are trapped.
.PP
\fB-q,\fR \fB-quiet\fR
.IP
Be quiet by printing less informational output to
stderr. (use \fB-noquiet\fR to undo an earlier \fB-quiet.)\fR
.IP
The \fB-quiet\fR option does not eliminate all informational
output, it only reduces it.  It is ignored in most
auxiliary usage modes, e.g. \fB-storepasswd.\fR  To eliminate
all output use: 2>/dev/null 1>&2, etc.
.PP
\fB-v,\fR \fB-verbose\fR
.IP
Print out more information to stderr.
.PP
\fB-bg\fR
.IP
Go into the background after screen setup.  Messages to
stderr are lost unless \fB-o\fR logfile is used.  Something
like this could be useful in a script:
.IP
port=`ssh -t $host "x11vnc -display :0 -bg" | grep PORT`
.IP
port=`echo "$port" | sed -e 's/PORT=//'`
.IP
port=`expr $port - 5900`
.IP
vncviewer $host:$port
.PP
\fB-modtweak,\fR \fB-nomodtweak\fR
.IP
Option \fB-modtweak\fR automatically tries to adjust the AltGr
and Shift modifiers for differing language keyboards
between client and host.  Otherwise, only a single key
press/release of a Keycode is simulated (i.e. ignoring
the state of the modifiers: this usually works for
identical keyboards).  Also useful in resolving cases
where a Keysym is bound to multiple keys (e.g. "<" + ">"
and "," + "<" keys).  Default: \fB-modtweak\fR
.IP
If you are having trouble with with keys and \fB-xkb\fR or
\fB-noxkb,\fR and similar things don't help, try \fB-nomodtweak.\fR
.IP
On some HP-UX systems it is been noted that they have
an odd keymapping where a single keycode will have a
keysym, e.g. "#", up to three times.  You can check
via "xmodmap \fB-pk"\fR or the \fB-dk\fR option.  The failure
is when you try to type "#" it yields "3".  If you
see this problem try setting the environment variable
MODTWEAK_LOWEST=1 to see if it helps.
.PP
\fB-xkb,\fR \fB-noxkb\fR
.IP
When in modtweak mode, use the XKEYBOARD extension (if
the X display supports it) to do the modifier tweaking.
This is powerful and should be tried if there are still
keymapping problems when using \fB-modtweak\fR by itself.
The default is to check whether some common keysyms,
e.g. !, @, [, are only accessible via \fB-xkb\fR mode and if
so then automatically enable the mode.  To disable this
automatic detection use \fB-noxkb.\fR
.IP
When \fB-xkb\fR mode is active you can set these env. vars.
They apply only when there is ambiguity as to which
key to choose (i.e the mapping is not one-to-one).
NOKEYHINTS=1: for up ascii keystrokes do not use score
hints saved when the key was pressed down. NOANYDOWN=1:
for up keystrokes do not resort to searching through
keys that are currently pressed down.  KEYSDOWN=N:
remember the last N keys press down for tie-breaking
when an up keystroke comes in.
.PP
\fB-capslock\fR
.IP
When in \fB-modtweak\fR (the default) or \fB-xkb\fR mode,
if a keysym in the range A-Z comes in check the X
server to see if the Caps_Lock is set.  If it is do
not artificially press Shift to generate the keysym.
This will enable the CapsLock key to behave correctly
in some circumstances: namely *both* the VNC viewer
machine and the x11vnc X server are in the CapsLock
on state.  If one side has CapsLock on and the other
off and the keyboard is not behaving as you think it
should you should correct the CapsLock states (hint:
pressing CapsLock inside and outside of the viewer can
help toggle them both to the correct state).  However,
for best results do not use this option, but rather
*only* enable CapsLock on the VNC viewer side (i.e. by
pressing CapsLock outside of the viewer window, also
\fB-skip_lockkeys\fR below).  Also try \fB-nomodtweak\fR for a
possible workaround.
.PP
\fB-skip_lockkeys,\fR \fB-noskip_lockkeys\fR
.IP
Have x11vnc ignore all Caps_Lock, Shift_Lock, Num_Lock,
Scroll_Lock keysyms received from viewers.  The idea is
you press Caps_Lock on the VNC Viewer side but that does
not change the lock state in the x11vnc-side X server.
Nevertheless your capitalized letters come in over
the wire and are applied correctly to the x11vnc-side
X server.  Note this mode probably won't do what you
want in \fB-nomodtweak\fR mode.  Also, a kludge for KP_n
digits is always done in this mode: they are mapped to
regular digit keysyms.  See also \fB-capslock\fR above.
The default is \fB-noskip_lockkeys.\fR
.PP
\fB-skip_keycodes\fR \fIstring\fR
.IP
Ignore the comma separated list of decimal keycodes.
Perhaps these are keycodes not on your keyboard but
your X server thinks exist.  Currently only applies
to \fB-xkb\fR mode.  Use this option to help x11vnc in the
reverse problem it tries to solve: Keysym -> Keycode(s)
when ambiguities exist (more than one Keycode per
Keysym).  Run 'xmodmap \fB-pk'\fR to see your keymapping.
Example: "\fB-skip_keycodes\fR \fI94,114\fR"
.PP
\fB-sloppy_keys\fR
.IP
Experimental option that tries to correct some
"sloppy" key behavior.  E.g. if at the viewer you
press Shift+Key but then release the Shift before
Key that could give rise to extra unwanted characters
(usually only between keyboards of different languages).
Only use this option if you observe problems with
some keystrokes.
.PP
\fB-skip_dups,\fR \fB-noskip_dups\fR
.IP
Some VNC viewers send impossible repeated key events,
e.g. key-down, key-down, key-up, key-up all for the same
key, or 20 downs in a row for the same modifier key!
Setting \fB-skip_dups\fR means to skip these duplicates and
just process the first event. Note: some VNC viewers
assume they can send down's without the corresponding
up's and so you should not set this option for
these viewers (symptom: some keys do not autorepeat)
Default: \fB-noskip_dups\fR
.PP
\fB-add_keysyms,\fR \fB-noadd_keysyms\fR
.IP
If a Keysym is received from a VNC viewer and that
Keysym does not exist in the X server, then add the
Keysym to the X server's keyboard mapping on an unused
key.  Added Keysyms will be removed periodically and
also when x11vnc exits.  Default: \fB-add_keysyms\fR
.PP
\fB-clear_mods\fR
.IP
At startup and exit clear the modifier keys by sending
KeyRelease for each one. The Lock modifiers are skipped.
Used to clear the state if the display was accidentally
left with any pressed down.
.PP
\fB-clear_keys\fR
.IP
As \fB-clear_mods,\fR except try to release ANY pressed key.
Note that this option and \fB-clear_mods\fR can interfere
with a person typing at the physical keyboard.
.PP
\fB-clear_all\fR
.IP
As \fB-clear_keys,\fR except try to release any CapsLock,
NumLock, etc. locks as well.
.PP
\fB-remap\fR \fIstring\fR
.IP
Read Keysym remappings from file named \fIstring\fR.
Format is one pair of Keysyms per line (can be name
or hex value) separated by a space.  If no file named
\fIstring\fR exists, it is instead interpreted as this
form: key1-key2,key3-key4,...  See <X11/keysymdef.h>
header file for a list of Keysym names, or use 
.IR xev (1).
.IP
To map a key to a button click, use the fake Keysyms
"Button1", ..., etc. E.g: "\fB-remap\fR \fISuper_R-Button2\fR"
(useful for pasting on a laptop)
.IP
I use these if the machine I am viewing from does not
have a scrollwheel or I don't like using the one it has:
.IP
\fB-remap\fR Super_R-Button4,Menu-Button5
\fB-remap\fR KP_Add-Button4,KP_Enter-Button5
.IP
the former would be used on a PC, the latter on a
MacBook.  This way those little used keys can be used
to generate bigger hops than the Up and Down arrows
provide.  One can scroll through text or web pages more
quickly this way (especially if x11vnc scroll detection
is active.)
.IP
Use Button44, Button12, etc. for multiple clicks.
.IP
To disable a keysym (i.e. make it so it will not be
injected), remap it to "NoSymbol" or "None".
.IP
Dead keys: "dead" (or silent, mute) keys are keys that
do not produce a character but must be followed by a 2nd
keystroke.  This is often used for accenting characters,
e.g. to put "`" on top of "a" by pressing the dead
key and then "a".  Note that this interpretation
is not part of core X11, it is up to the toolkit or
application to decide how to react to the sequence.
The X11 names for these keysyms are "dead_grave",
"dead_acute", etc.  However some VNC viewers send the
keysyms "grave", "acute" instead thereby disabling
the accenting.  To work around this \fB-remap\fR can be used.
For example "\fB-remap\fR \fIgrave-dead_grave,acute-dead_acute\fR"
.IP
As a convenience, "\fB-remap\fR \fIDEAD\fR" applies these remaps:
.IP
      g     grave-dead_grave
      a     acute-dead_acute
      c     asciicircum-dead_circumflex
      t     asciitilde-dead_tilde
      m     macron-dead_macron
      b     breve-dead_breve
      D     abovedot-dead_abovedot
      d     diaeresis-dead_diaeresis
      o     degree-dead_abovering
      A     doubleacute-dead_doubleacute
      r     caron-dead_caron
      e     cedilla-dead_cedilla
.IP
.IP
If you just want a subset use the first letter
label, e.g. "\fB-remap\fR \fIDEAD=ga\fR" to get the first two.
Additional remaps may also be supplied via commas,
e.g.  "\fB-remap\fR \fIDEAD=ga,Super_R-Button2\fR".  Finally,
"DEAD=missing" means to apply all of the above as
long as the left hand member is not already in the
X11 keymap.
.PP
\fB-norepeat,\fR \fB-repeat\fR
.IP
Option \fB-norepeat\fR disables X server key auto repeat when
VNC clients are connected and VNC keyboard input is
not idle for more than 5 minutes.  This works around a
repeating keystrokes bug (triggered by long processing
delays between key down and key up client events:
either from large screen changes or high latency).
Default: \fB-norepeat\fR
.IP
You can set the env. var. X11VNC_IDLE_TIMEOUT to the
number of idle seconds you want (5min = 300secs).
.IP
Note: your VNC viewer side will likely do autorepeating,
so this is no loss unless someone is simultaneously at
the real X display.
.IP
Use "\fB-norepeat\fR \fIN\fR" to set how many times norepeat will
be reset if something else (e.g. X session manager)
undoes it.  The default is 2.  Use a negative value
for unlimited resets.
.PP
\fB-nofb\fR
.IP
Ignore video framebuffer: only process keyboard and
pointer.  Intended for use with Win2VNC and x2vnc
dual-monitor setups.
.PP
\fB-nobell\fR
.IP
Do not watch for XBell events. (no beeps will be heard)
Note: XBell monitoring requires the XKEYBOARD extension.
.PP
\fB-nosel\fR
.IP
Do not manage exchange of X selection/cutbuffer between
VNC viewers and the X server at all.
.PP
\fB-noprimary\fR
.IP
Do not poll the PRIMARY selection for changes to send
back to clients.  (PRIMARY is still set on received
changes, however).
.PP
\fB-nosetprimary\fR
.IP
Do not set the PRIMARY selection for changes received
from VNC clients.
.PP
\fB-noclipboard\fR
.IP
Do not poll the CLIPBOARD selection for changes to send
back to clients.  (CLIPBOARD is still set on received
changes, however).
.PP
\fB-nosetclipboard\fR
.IP
Do not set the CLIPBOARD selection for changes
received from VNC clients.
.PP
\fB-seldir\fR \fIstring\fR
.IP
If direction string is "send", only send the selection
to viewers, and if it is "recv" only receive it from
viewers.  To work around apps setting the selection
too frequently and messing up the other end.  You can
actually supply a comma separated list of directions,
including "debug" to turn on debugging output.
.PP
\fB-cursor\fR \fI[mode],\fR \fB-nocursor\fR
.IP
Sets how the pointer cursor shape (little icon at the
mouse pointer) should be handled.  The "mode" string
is optional and is described below.  The default
is to show some sort of cursor shape(s).  How this
is done depends on the VNC viewer and the X server.
Use \fB-nocursor\fR to disable cursor shapes completely.
.IP
Some VNC viewers support the TightVNC CursorPosUpdates
and CursorShapeUpdates extensions (cuts down on
network traffic by not having to send the cursor image
every time the pointer is moved), in which case these
extensions are used (see \fB-nocursorshape\fR and \fB-nocursorpos\fR
below to disable).  For other viewers the cursor shape
is written directly to the framebuffer every time the
pointer is moved or changed and gets sent along with
the other framebuffer updates.  In this case, there
will be some lag between the vnc viewer pointer and
the remote cursor position.
.IP
If the X display supports retrieving the cursor shape
information from the X server, then the default is
to use that mode.  On Solaris this can be done with
the SUN_OVL extension using \fB-overlay\fR (see also the
\fB-overlay_nocursor\fR option).  A similar overlay scheme
is used on IRIX.  Xorg (e.g. Linux) and recent Solaris
Xsun servers support the XFIXES extension to retrieve
the exact cursor shape from the X server.  If XFIXES
is present it is preferred over Overlay and is used by
default (see \fB-noxfixes\fR below).  This can be disabled
with \fB-nocursor,\fR and also some values of the "mode"
option below.
.IP
Note that under XFIXES cursors with transparency (alpha
channel) will usually not be exactly represented and one
may find Overlay preferable.  See also the \fB-alphacut\fR
and \fB-alphafrac\fR options below as fudge factors to try
to improve the situation for cursors with transparency
for a given theme.
.IP
The "mode" string can be used to fine-tune the
displaying of cursor shapes.  It can be used the
following ways:
.IP
"\fB-cursor\fR \fIarrow\fR" - just show the standard arrow
nothing more or nothing less.
.IP
"\fB-cursor\fR \fInone\fR" - same as "\fB-nocursor\fR"
.IP
"\fB-cursor\fR \fIX\fR" - when the cursor appears to be on the
root window, draw the familiar X shape.  Some desktops
such as GNOME cover up the root window completely,
and so this will not work, try "X1", etc, to try to
shift the tree depth.  On high latency links or slow
machines there will be a time lag between expected and
the actual cursor shape.
.IP
"\fB-cursor\fR \fIsome\fR" - like "X" but use additional
heuristics to try to guess if the window should have
a windowmanager-like resizer cursor or a text input
I-beam cursor.  This is a complete hack, but may be
useful in some situations because it provides a little
more feedback about the cursor shape.
.IP
"\fB-cursor\fR \fImost\fR" - try to show as many cursors as
possible.  Often this will only be the same as "some"
unless the display has overlay visuals or XFIXES
extensions available.  On Solaris and IRIX if XFIXES
is not available, \fB-overlay\fR mode will be attempted.
.PP
\fB-cursor_drag\fR
.IP
Show cursor shape changes even when the mouse is being
dragged with a mouse button down.  This is useful if you
want to be able to see Drag-and-Drop cursor icons, etc.
.PP
\fB-arrow\fR \fIn\fR
.IP
Choose an alternate "arrow" cursor from a set of
some common ones.  n can be 1 to 6.  Default is: 1
Ignored when in XFIXES cursor-grabbing mode.
.PP
\fB-noxfixes\fR
.IP
Do not use the XFIXES extension to draw the exact cursor
shape even if it is available.
.IP
Note: To work around a crash in Xorg 1.5 and later
some people needed to use \fB-noxfixes.\fR  The Xorg crash
occurred right after a Display Manager (e.g. GDM) login.
Starting with x11vnc 0.9.9 it tries to automatically
avoid using XFIXES until it is sure a window manager
is running.  See the \fB-reopen\fR option for more info and
how to use X11VNC_AVOID_WINDOWS=never to disable it.
.PP
\fB-alphacut\fR \fIn\fR
.IP
When using the XFIXES extension for the cursor shape,
cursors with transparency will not usually be displayed
exactly (but opaque ones will).  This option sets n as
a cutoff for cursors that have transparency ("alpha
channel" with values ranging from 0 to 255) Any cursor
pixel with alpha value less than n becomes completely
transparent.  Otherwise the pixel is completely opaque.
Default 240
.PP
\fB-alphafrac\fR \fIfraction\fR
.IP
With the threshold in \fB-alphacut\fR some cursors will become
almost completely transparent because their alpha values
are not high enough.  For those cursors adjust the
alpha threshold until fraction of the non-zero alpha
channel pixels become opaque.  Default 0.33
.PP
\fB-alpharemove\fR
.IP
By default, XFIXES cursors pixels with transparency have
the alpha factor multiplied into the RGB color values
(i.e. that corresponding to blending the cursor with a
black background).  Specify this option to remove the
alpha factor. (useful for light colored semi-transparent
cursors).
.PP
\fB-noalphablend\fR
.IP
In XFIXES mode do not send cursor alpha channel data
to LibVNCServer.  The default is to send it.  The
alphablend effect will only be visible in \fB-nocursorshape\fR
mode or for clients with cursorshapeupdates turned
off. (However there is a hack for 32bpp with depth 24,
it uses the extra 8 bits to store cursor transparency
for use with a hacked vncviewer that applies the
transparency locally.  See the FAQ for more info).
.PP
\fB-nocursorshape\fR
.IP
Do not use the TightVNC CursorShapeUpdates extension
even if clients support it.  See \fB-cursor\fR above.
.PP
\fB-cursorpos,\fR \fB-nocursorpos\fR
.IP
Option \fB-cursorpos\fR enables sending the X cursor position
back to all vnc clients that support the TightVNC
CursorPosUpdates extension.  Other clients will be able
to see the pointer motions. Default: \fB-cursorpos\fR
.PP
\fB-xwarppointer,\fR \fB-noxwarppointer\fR
.IP
Move the pointer with 
.IR XWarpPointer (3X)
instead of
the XTEST extension.  Use this as a workaround
if the pointer motion behaves incorrectly, e.g.
on touchscreens or other non-standard setups.
.IP
It is also sometimes needed on XINERAMA displays and is
enabled by default if XINERAMA is found to be active.
To prevent this, use \fB-noxwarppointer.\fR
.PP
\fB-always_inject\fR
.IP
Even if there is no displacement (dx = dy = 0) for a
VNC mouse event force the pointer to the indicated x,y
position anyway.  Recent (2009) gui toolkits (gnome)
have problems with x11vnc's original mouse input
injection method.  So x11vnc's mouse input injection
method has been modified.  To regain the OLD behavior
use this option: \fB-always_inject.\fR  Then x11vnc will
always force positioning the mouse to the x,y position
even if that position has not changed since the previous
VNC input event.
.IP
The first place this problem was noticed was in gnome
terminal: if you pressed and released mouse button 3, a
menu was posted and then its first element 'New Terminal
Window' was activated.  This was because x11vnc injected
the mouse position twice: once on ButtonPress and again
on ButtonRelease.  The toolkit interpreted the 2nd one
as mouse motion even though the mouse hadn't moved.
So now by default x11vnc tries to avoid injecting the
2nd one.
.IP
Note that with the new default x11vnc will be oblivious
to applications moving the pointer (warping) or the
user at the physical display moving it.  So it might,
e.g., inject ButtonRelease at the wrong position.
If this (or similar scenarios) causes problems in your
environment, specify \fB-always_inject\fR for the old method.
.PP
\fB-buttonmap\fR \fIstring\fR
.IP
String to remap mouse buttons.  Format: IJK-LMN, this
maps buttons I -> L, etc., e.g.  \fB-buttonmap\fR 13-31
.IP
Button presses can also be mapped to keystrokes: replace
a button digit on the right of the dash with :<sym>:
or :<sym1>+<sym2>: etc. for multiple keys. For example,
if the viewing machine has a mouse-wheel (buttons 4 5)
but the x11vnc side does not, these will do scrolls:
.IP
\fB-buttonmap\fR 12345-123:Prior::Next:
.IP
\fB-buttonmap\fR 12345-123:Up+Up+Up::Down+Down+Down:
.IP
See <X11/keysymdef.h> header file for a list of Keysyms,
or use the 
.IR xev (1)
program.  Note: mapping of button
clicks to Keysyms may not work if \fB-modtweak\fR or \fB-xkb\fR is
needed for the Keysym.
.IP
If you include a modifier like "Shift_L" the
modifier's up/down state is toggled, e.g. to send
"The" use :Shift_L+t+Shift_L+h+e: (the 1st one is
shift down and the 2nd one is shift up). (note: the
initial state of the modifier is ignored and not reset)
To include button events use "Button1", ... etc.
.IP
.IP
\fB-buttonmap\fR currently does not work on MacOSX console
or in \fB-rawfb\fR mode.
.IP
Workaround: use \fB-buttonmap\fR IJ...-LM...=n to limit the
number of mouse buttons to n, e.g. 123-123=3.  This will
prevent x11vnc from crashing if the X server reports
there are 5 buttons (4/5 scroll wheel), but there are
only really 3.
.PP
\fB-nodragging\fR
.IP
Do not update the display during mouse dragging events
(mouse button held down).  Greatly improves response on
slow setups, but you lose all visual feedback for drags,
text selection, and some menu traversals.  It overrides
any \fB-pointer_mode\fR setting.
.PP
\fB-ncache\fR \fIn\fR
.IP
Client-side caching scheme.  Framebuffer memory \fIn\fR
(an integer) times that of the full display is allocated
below the actual framebuffer to cache screen contents
for rapid retrieval.  So a W x H frambuffer is expanded
to a W x (n+1)*H one.  Use 0 to disable.
.IP
The \fIn\fR is actually optional, the default is 10.
.IP
For this and the other \fB-ncache*\fR options below you can
abbreviate "\fB-ncache\fR" with "\fB-nc\fR".  Also, "\fB-nonc\fR"
is the same as "\fB-ncache\fR \fI0\fR"
.IP
This is an experimental option, currently implemented in
an awkward way in that in the VNC Viewer you can see the
pixel cache contents if you scroll down, etc.  So you
will have to set things up so you can't see that region.
If this method is successful, the changes required for
clients to do this less awkwardly will be investigated.
.IP
The SSVNC viewer does a good job at automatically hiding
the pixel cache region.  Or use SSVNC's \fB-ycrop\fR option
to explicitly hide the region.
.IP
Note that this mode consumes a huge amount of memory,
both on the x11vnc server side and on the VNC Viewer
side.  If n=2 then the amount of RAM used is roughly
tripled for both x11vnc and the VNC Viewer.  As a rule
of thumb, note that 1280x1024 at depth 24 is about 5MB
of pixel data.
.IP
For reasonable response when cycling through 4 to 6
large (e.g. web browser) windows a value n of 6 to 12
is recommended. (that's right: ~10X more memory...)
.IP
Because of the way window backingstore and saveunders
are implemented, n must be even.  It will be incremented
by 1 if it is not.
.IP
This mode also works for native MacOS X, but may not
be as effective as the X version.  This is due to a
number of things, one is the drop-shadow compositing
that leaves extra areas that need to be repaired (see
\fB-ncache_pad).\fR  Another is the window iconification
animations need to be avoided (see \fB-macicontime).\fR
It appears the that the 'Scale' animation mode gives
better results than the 'Genie' one.  Also, window event
detection not as accurate as the X version.
.PP
\fB-ncache_cr\fR
.IP
In \fB-ncache\fR mode, try to do copyrect opaque window
moves/drags instead of wireframes (this can induce
painting errors).  The wireframe will still be used when
moving a window whose save-unders has not yet been set
or has been invalidated.
.IP
Some VNC Viewers provide better response than others
with this option.  On Unix, realvnc viewer gives
smoother drags than tightvnc viewer.  Response may also
be choppy if the server side machine is too slow.
.IP
Sometimes on very slow modem connections, this actually
gives an improvement because no pixel data at all
(not even the box animation) is sent during the drag.
.PP
\fB-ncache_no_moveraise\fR
.IP
In \fB-ncache\fR mode, do not assume that moving a window
will cause the window manager to raise it to the top
of the stack.  The default is to assume it does, and
so at the beginning of any wireframe, etc, window moves
the window will be pushed to top in the VNC viewer.
.PP
\fB-ncache_no_dtchange\fR
.IP
In \fB-ncache\fR mode, do not try to guess when the desktop
(viewport) changes to another one (i.e. another
workarea).  The default is to try to guess and when
detected try to make the transistion more smoothly.
.PP
\fB-ncache_no_rootpixmap\fR
.IP
In \fB-ncache\fR mode, do not try to snapshot the desktop
background to use in guessing or reconstructing window
save-unders.
.PP
\fB-ncache_keep_anims\fR
.IP
In \fB-ncache\fR mode, do not try to disable window
manager animations and other effects (that usually
degrade ncache performance or cause painting errors).
The default is to try to disable them on KDE (but not
GNOME) when VNC clients are connected.
.IP
For other window managers or desktops that provide
animations, effects, compositing, translucency,
etc. that interfere with the \fB-ncache\fR method you will
have to disable them manually.
.PP
\fB-ncache_old_wm\fR
.IP
In \fB-ncache\fR mode, enable some heuristics for old style
window managers such as fvwm and twm.
.PP
\fB-ncache_pad\fR \fIn\fR
.IP
In \fB-ncache\fR mode, pad each window with n pixels for the
caching rectangles.  This can be used to try to improve
the situation with dropshadows or other compositing
(e.g. MacOS X window manager), although it could make
things worse.  The default is 0 on Unix and 24 on
MacOS X.
.PP
\fB-debug_ncache\fR
.IP
Turn on debugging and profiling output under \fB-ncache.\fR
.PP
\fB-wireframe\fR \fI[str],\fR \fB-nowireframe\fR
.IP
Try to detect window moves or resizes when a mouse
button is held down and show a wireframe instead of
the full opaque window.  This is based completely on
heuristics and may not always work: it depends on your
window manager and even how you move things around.
See \fB-pointer_mode\fR below for discussion of the "bogging
down" problem this tries to avoid.
Default: \fB-wireframe\fR
.IP
Shorter aliases:  \fB-wf\fR [str]  and \fB-nowf\fR
.IP
The value "str" is optional and, of course, is
packed with many tunable parameters for this scheme:
.IP
Format: shade,linewidth,percent,T+B+L+R,mod,t1+t2+t3+t4
Default: 0xff,2,0,32+8+8+8,all,0.15+0.30+5.0+0.125
.IP
If you leave nothing between commas: ",," the default
value is used.  If you don't specify enough commas,
the trailing parameters are set to their defaults.
.IP
"shade" indicate the "color" for the wireframe,
usually a greyscale: 0-255, however for 16 and 32bpp you
can specify an rgb.txt X color (e.g. "dodgerblue") or
a value > 255 is treated as RGB (e.g. red is 0xff0000).
"linewidth" sets the width of the wireframe in pixels.
"percent" indicates to not apply the wireframe scheme
to windows with area less than this percent of the
full screen.
.IP
"T+B+L+R" indicates four integers for how close in
pixels the pointer has to be from the Top, Bottom, Left,
or Right edges of the window to consider wireframing.
This is a speedup to quickly exclude a window from being
wireframed: set them all to zero to not try the speedup
(scrolling and selecting text will likely be slower).
.IP
"mod" specifies if a button down event in the
interior of the window with a modifier key (Alt, Shift,
etc.) down should indicate a wireframe opportunity.
It can be "0" or "none" to skip it, "1" or "all"
to apply it to any modifier, or "Shift", "Alt",
"Control", "Meta", "Super", or "Hyper" to only
apply for that type of modifier key.
.IP
"t1+t2+t3+t4" specify four floating point times in
seconds: t1 is how long to wait for the pointer to move,
t2 is how long to wait for the window to start moving
or being resized (for some window managers this can be
rather long), t3 is how long to keep a wireframe moving
before repainting the window. t4 is the minimum time
between sending wireframe "animations".  If a slow
link is detected, these values may be automatically
changed to something better for a slow link.
.PP
\fB-nowireframelocal\fR
.IP
By default, mouse motion and button presses of a
user sitting at the LOCAL display are monitored for
wireframing opportunities (so that the changes will be
sent efficiently to the VNC clients).  Use this option
to disable this behavior.
.PP
\fB-wirecopyrect\fR \fImode,\fR \fB-nowirecopyrect\fR
.IP
Since the \fB-wireframe\fR mechanism evidently tracks moving
windows accurately, a speedup can be obtained by
telling the VNC viewers to locally copy the translated
window region.  This is the VNC CopyRect encoding:
the framebuffer update doesn't need to send the actual
new image data.
.IP
Shorter aliases:  \fB-wcr\fR [mode]  and \fB-nowcr\fR
.IP
"mode" can be "never" (same as \fB-nowirecopyrect)\fR
to never try the copyrect, "top" means only do it if
the window was not covered by any other windows, and
"always" means to translate the orginally unobscured
region (this may look odd as the remaining pieces come
in, but helps on a slow link).  Default: "always"
.IP
Note: there can be painting errors or slow response
when using \fB-scale\fR so you may want to disable CopyRect
in this case "\fB-wirecopyrect\fR \fInever\fR" on the command
line or by remote-control.  Or you can also use the
"\fB-scale\fR \fIxxx:nocr\fR" scale option.
.PP
\fB-debug_wireframe\fR
.IP
Turn on debugging info printout for the wireframe
heuristics.  "\fB-dwf\fR" is an alias.  Specify multiple
times for more output.
.PP
\fB-scrollcopyrect\fR \fImode,\fR \fB-noscrollcopyrect\fR
.IP
Like \fB-wirecopyrect,\fR but use heuristics to try to guess
if a window has scrolled its contents (either vertically
or horizontally).  This requires the RECORD X extension
to "snoop" on X applications (currently for certain
XCopyArea and XConfigureWindow X protocol requests).
Examples: Hitting <Return> in a terminal window when the
cursor was at the bottom, the text scrolls up one line.
Hitting <Down> arrow in a web browser window, the web
page scrolls up a small amount.  Or scrolling with a
scrollbar or mouse wheel.
.IP
Shorter aliases:  \fB-scr\fR [mode]  and \fB-noscr\fR
.IP
This scheme will not always detect scrolls, but when
it does there is a nice speedup from using the VNC
CopyRect encoding (see \fB-wirecopyrect).\fR  The speedup
is both in reduced network traffic and reduced X
framebuffer polling/copying.  On the other hand, it may
induce undesired transients (e.g. a terminal cursor
being scrolled up when it should not be) or other
painting errors (window tearing, bunching-up, etc).
These are automatically repaired in a short period
of time.  If this is unacceptable disable the feature
with \fB-noscrollcopyrect.\fR
.IP
Screen clearing kludges:  for testing at least, there
are some "magic key sequences" (must be done in less
than 1 second) to aid repairing painting errors that
may be seen when using this mode:
.IP
3 Alt_L's   in a row: resend whole screen,
4 Alt_L's   in a row: reread and resend whole screen,
3 Super_L's in a row: mark whole screen for polling,
4 Super_L's in a row: reset RECORD context,
5 Super_L's in a row: try to push a black screen
.IP
note: Alt_L is the Left "Alt" key (a single key)
Super_L is the Left "Super" key (Windows flag).
Both of these are modifier keys, and so should not
generate characters when pressed by themselves.  Also,
your VNC viewer may have its own refresh hot-key
or button.
.IP
"mode" can be "never" (same as \fB-noscrollcopyrect)\fR
to never try the copyrect, "keys" means to try it
in response to keystrokes only, "mouse" means to
try it in response to mouse events only, "always"
means to do both. Default: "always"
.IP
Note: there can be painting errors or slow response
when using \fB-scale\fR so you may want to disable CopyRect
in this case "\fB-scrollcopyrect\fR \fInever\fR" on the command
line or by remote-control.  Or you can also use the
"\fB-scale\fR \fIxxx:nocr\fR" scale option.
.PP
\fB-scr_area\fR \fIn\fR
.IP
Set the minimum area in pixels for a rectangle
to be considered for the \fB-scrollcopyrect\fR detection
scheme.  This is to avoid wasting the effort on small
rectangles that would be quickly updated the normal way.
E.g. suppose an app updated the position of its skinny
scrollbar first and then shifted the large panel
it controlled.  We want to be sure to skip the small
scrollbar and get the large panel. Default: 60000
.PP
\fB-scr_skip\fR \fIlist\fR
.IP
Skip scroll detection for applications matching
the comma separated list of strings in \fIlist\fR.
Some applications implement their scrolling in
strange ways where the XCopyArea, etc, also applies
to invisible portions of the window: if we CopyRect
those areas it looks awful during the scroll and
there may be painting errors left after the scroll.
Soffice.bin is the worst known offender.
.IP
Use "##" to denote the start of the application class
(e.g. "##XTerm") and "++" to denote the start
of the application instance name (e.g. "++xterm").
The string your list is matched against is of the form
"^^WM_NAME##Class++Instance<same-for-any-subwindows>"
The "xlsclients \fB-la"\fR command will provide this info.
.IP
If a pattern is prefixed with "KEY:" it only applies
to Keystroke generated scrolls (e.g. Up arrow).  If it
is prefixed with "MOUSE:" it only applies to Mouse
induced scrolls (e.g. dragging on a scrollbar).
Default: ##Soffice.bin,##StarOffice,##OpenOffice
.PP
\fB-scr_inc\fR \fIlist\fR
.IP
Opposite of \fB-scr_skip:\fR this list is consulted first
and if there is a match the window will be monitored
via RECORD for scrolls irrespective of \fB-scr_skip.\fR
Use \fB-scr_skip\fR '*' to skip anything that does not match
your \fB-scr_inc.\fR  Use \fB-scr_inc\fR '*' to include everything.
.PP
\fB-scr_keys\fR \fIlist\fR
.IP
For keystroke scroll detection, only apply the RECORD
heuristics to the comma separated list of keysyms in
\fIlist\fR.  You may find the RECORD overhead for every
one of your keystrokes disrupts typing too much, but you
don't want to turn it off completely with "\fB-scr\fR \fImouse\fR"
and \fB-scr_parms\fR does not work or is too confusing.
.IP
The listed keysyms can be numeric or the keysym
names in the <X11/keysymdef.h> header file or from the
.IR xev (1)
program.  Example: "\fB-scr_keys\fR \fIUp,Down,Return\fR".
One probably wants to have application specific lists
(e.g. for terminals, etc) but that is too icky to think
about for now...
.IP
If \fIlist\fR begins with the "-" character the list
is taken as an exclude list: all keysyms except those
list will be considered.  The special string "builtin"
expands to an internal list of keysyms that are likely
to cause scrolls.  BTW, by default modifier keys,
Shift_L, Control_R, etc, are skipped since they almost
never induce scrolling by themselves.
.PP
\fB-scr_term\fR \fIlist\fR
.IP
Yet another cosmetic kludge.  Apply shell/terminal
heuristics to applications matching comma separated
list (same as for \fB-scr_skip/-scr_inc).\fR  For example an
annoying transient under scroll detection is if you
hit Enter in a terminal shell with full text window,
the solid text cursor block will be scrolled up.
So for a short time there are two (or more) block
cursors on the screen.  There are similar scenarios,
(e.g. an output line is duplicated).
.IP
These transients are induced by the approximation of
scroll detection (e.g. it detects the scroll, but not
the fact that the block cursor was cleared just before
the scroll).  In nearly all cases these transient errors
are repaired when the true X framebuffer is consulted
by the normal polling.  But they are distracting, so
what this option provides is extra "padding" near the
bottom of the terminal window: a few extra lines near
the bottom will not be scrolled, but rather updated
from the actual X framebuffer.  This usually reduces
the annoying artifacts.  Use "none" to disable.
Default: "term"
.PP
\fB-scr_keyrepeat\fR \fIlo-hi\fR
.IP
If a key is held down (or otherwise repeats rapidly) and
this induces a rapid sequence of scrolls (e.g. holding
down an Arrow key) the "scrollcopyrect" detection
and overhead may not be able to keep up.  A time per
single scroll estimate is performed and if that estimate
predicts a sustainable scrollrate of keys per second
between "lo" and "hi" then repeated keys will be
DISCARDED to maintain the scrollrate. For example your
key autorepeat may be 25 keys/sec, but for a large
window or slow link only 8 scrolls per second can be
sustained, then roughly 2 out of every 3 repeated keys
will be discarded during this period. Default: "4-20"
.PP
\fB-scr_parms\fR \fIstring\fR
.IP
Set various parameters for the scrollcopyrect mode.
The format is similar to that for \fB-wireframe\fR and packed
with lots of parameters:
.IP
Format: T+B+L+R,t1+t2+t3,s1+s2+s3+s4+s5
Default: 0+64+32+32,0.02+0.10+0.9,0.03+0.06+0.5+0.1+5.0
.IP
If you leave nothing between commas: ",," the default
value is used.  If you don't specify enough commas,
the trailing parameters are set to their defaults.
.IP
"T+B+L+R" indicates four integers for how close in
pixels the pointer has to be from the Top, Bottom, Left,
or Right edges of the window to consider scrollcopyrect.
If \fB-wireframe\fR overlaps it takes precedence.  This is a
speedup to quickly exclude a window from being watched
for scrollcopyrect: set them all to zero to not try
the speedup (things like selecting text will likely
be slower).
.IP
"t1+t2+t3" specify three floating point times in
seconds that apply to scrollcopyrect detection with
*Keystroke* input: t1 is how long to wait after a key
is pressed for the first scroll, t2 is how long to keep
looking after a Keystroke scroll for more scrolls.
t3 is how frequently to try to update surrounding
scrollbars outside of the scrolling area (0.0 to
disable)
.IP
"s1+s2+s3+s4+s5" specify five floating point times
in seconds that apply to scrollcopyrect detection with
*Mouse* input: s1 is how long to wait after a mouse
button is pressed for the first scroll, s2 is how long
to keep waiting for additional scrolls after the first
Mouse scroll was detected.  s3 is how frequently to
try to update surrounding scrollbars outside of the
scrolling area (0.0 to disable).  s4 is how long to
buffer pointer motion (to try to get fewer, bigger
mouse scrolls). s5 is the maximum time to spend just
updating the scroll window without updating the rest
of the screen.
.PP
\fB-fixscreen\fR \fIstring\fR
.IP
Periodically "repair" the screen based on settings
in \fIstring\fR.  Hopefully you won't need this option,
it is intended for cases when the \fB-scrollcopyrect\fR or
\fB-wirecopyrect\fR features leave too many painting errors,
but it can be used for any scenario.  This option
periodically performs costly operations and so
interactive response may be reduced when it is on.
You can use 3 Alt_L's (the Left "Alt" key) taps in
a row (as described under \fB-scrollcopyrect)\fR instead to
manually request a screen repaint when it is needed.
.IP
\fIstring\fR is a comma separated list of one or more of
the following: "V=t", "C=t", "X=t", and "8=t".
In these "t" stands for a time in seconds (it is
a floating point even though one should usually use
values > 2 to avoid wasting resources).  V sets how
frequently the entire screen should be sent to viewers
(it is like the 3 Alt_L's).  C sets how long to wait
after a CopyRect to repaint the full screen.  X sets
how frequently to reread the full X11 framebuffer from
the X server and push it out to connected viewers.
Use of X should be rare, please report a bug if you
find you need it. 8= applies only for \fB-8to24\fR mode: it
sets how often the non-default visual regions of the
screen (e.g. 8bpp windows) are refreshed.  Examples:
\fB-fixscreen\fR V=10 \fB-fixscreen\fR C=10
.PP
\fB-debug_scroll\fR
.IP
Turn on debugging info printout for the scroll
heuristics.  "\fB-ds\fR" is an alias.  Specify it multiple
times for more output.
.PP
\fB-noxrecord\fR
.IP
Disable any use of the RECORD extension.  This is
currently used by the \fB-scrollcopyrect\fR scheme and to
monitor X server grabs.
.PP
\fB-grab_buster,\fR \fB-nograb_buster\fR
.IP
Some of the use of the RECORD extension can leave a
tiny window for XGrabServer deadlock.  This is only if
the whole-server grabbing application expects mouse or
keyboard input before releasing the grab.  It is usually
a window manager that does this.  x11vnc takes care to
avoid the problem, but if caught x11vnc will freeze.
Without \fB-grab_buster,\fR the only solution is to go the
physical display and give it some input to satisfy the
grabbing app.  Or manually kill and restart the window
manager if that is feasible.  With \fB-grab_buster,\fR x11vnc
will fork a helper thread and if x11vnc appears to be
stuck in a grab after a period of time (20-30 sec) then
it will inject some user input: button clicks, Escape,
mouse motion, etc to try to break the grab.  If you
experience a lot of grab deadlock, please report a bug.
.PP
\fB-debug_grabs\fR
.IP
Turn on debugging info printout with respect to
XGrabServer() deadlock for \fB-scrollcopyrect__mode_.\fR
.PP
\fB-debug_sel\fR
.IP
Turn on debugging info printout with respect to
PRIMARY, CLIPBOARD, and CUTBUFFER0 selections.
.PP
\fB-pointer_mode\fR \fIn\fR
.IP
Various pointer motion update schemes. "\fB-pm\fR" is
an alias.  The problem is pointer motion can cause
rapid changes on the screen: consider the rapid
changes when you drag a large window around opaquely.
Neither x11vnc's screen polling and vnc compression
routines nor the bandwidth to the vncviewers can keep
up these rapid screen changes: everything will bog down
when dragging or scrolling.  So a scheme has to be used
to "eat" much of that pointer input before re-polling
the screen and sending out framebuffer updates. The
mode number \fIn\fR can be 0 to 4 and selects one of
the schemes desribed below.
.IP
Note that the \fB-wireframe\fR and \fB-scrollcopyrect__mode_s\fR
complement \fB-pointer_mode\fR by detecting (and improving)
certain periods of "rapid screen change".
.IP
n=0: does the same as \fB-nodragging.\fR (all screen polling
is suspended if a mouse button is pressed.)
.IP
n=1: was the original scheme used to about Jan 2004:
it basically just skips \fB-input_skip\fR keyboard or pointer
events before repolling the screen.
.IP
n=2 is an improved scheme: by watching the current rate
of input events it tries to detect if it should try to
"eat" additional pointer events before continuing.
.IP
n=3 is basically a dynamic \fB-nodragging\fR mode: it detects
when the mouse motion has paused and then refreshes
the display.
.IP
n=4 attempts to measures network rates and latency,
the video card read rate, and how many tiles have been
changed on the screen.  From this, it aggressively tries
to push screen "frames" when it decides it has enough
resources to do so.  NOT FINISHED.
.IP
The default n is 2. Note that modes 2, 3, 4 will skip
\fB-input_skip\fR keyboard events (but it will not count
pointer events).  Also note that these modes are not
available in \fB-threads\fR mode which has its own pointer
event handling mechanism.
.IP
To try out the different pointer modes to see which
one gives the best response for your usage, it is
convenient to use the remote control function, for
example "x11vnc \fB-R\fR pm:4" or the tcl/tk gui (Tuning ->
pointer_mode -> n).
.PP
\fB-input_skip\fR \fIn\fR
.IP
For the pointer handling when non-threaded: try to
read n user input events before scanning display. n < 0
means to act as though there is always user input.
Default: 10
.PP
\fB-allinput\fR
.IP
Have x11vnc read and process all available client input
before proceeding.
.PP
\fB-input_eagerly\fR
.IP
Similar to \fB-allinput\fR but use the handleEventsEagerly
mechanism built into LibVNCServer.
.PP
\fB-speeds\fR \fIrd,bw,lat\fR
.IP
x11vnc tries to estimate some speed parameters that
are used to optimize scheduling (e.g. \fB-pointer_mode\fR
4, \fB-wireframe,\fR \fB-scrollcopyrect)\fR and other things.
Use the \fB-speeds\fR option to set these manually.
The triple \fIrd,bw,lat\fR corresponds to video h/w
read rate in MB/sec, network bandwidth to clients in
KB/sec, and network latency to clients in milliseconds,
respectively.  If a value is left blank, e.g. "-speeds
,100,15", then the internal scheme is used to estimate
the empty value(s).
.IP
Typical PC video cards have read rates of 5-10 MB/sec.
If the framebuffer is in main memory instead of video
h/w (e.g. SunRay, shadowfb, dummy driver, Xvfb), the
read rate may be much faster.  "x11perf \fB-getimage500"\fR
can be used to get a lower bound (remember to factor
in the bytes per pixel).  It is up to you to estimate
the network bandwith and latency to clients.  For the
latency the 
.IR ping (1)
command can be used.
.IP
For convenience there are some aliases provided,
e.g. "\fB-speeds\fR \fImodem\fR".  The aliases are: "modem" for
6,4,200; "dsl" for 6,100,50; and "lan" for 6,5000,1
.PP
\fB-wmdt\fR \fIstring\fR
.IP
For some features, e.g. \fB-wireframe\fR and \fB-scrollcopyrect,\fR
x11vnc has to work around issues for certain window
managers or desktops (currently kde and xfce).
By default it tries to guess which one, but it can
guess incorrectly.  Use this option to indicate which
wm/dt.  \fIstring\fR can be "gnome", "kde", "cde",
"xfce", or "root" (classic X wm).  Anything else
is interpreted as "root".
.PP
\fB-debug_pointer\fR
.IP
Print debugging output for every pointer event.
.PP
\fB-debug_keyboard\fR
.IP
Print debugging output for every keyboard event.
.PP
Same as \fB-dp\fR and \fB-dk,\fR respectively.  Use multiple
times for more output.
.PP
\fB-defer\fR \fItime\fR
.IP
Time in ms to delay sending updates to connected clients
(deferUpdateTime)  Default: 20
.PP
\fB-wait\fR \fItime\fR
.IP
Time in ms to pause between screen polls.  Used to cut
down on load.  Default: 20
.PP
\fB-extra_fbur\fR \fIn\fR
.IP
Perform extra FrameBufferUpdateRequests checks to
try to be in better sync with the client's requests.
What this does is perform extra polls of the client
socket at critical times (before '-defer' and '-wait'
calls.)  The default is n=1.  Set to a larger number to
insert more checks or set to n=0 to disable.  A downside
of these extra calls is that more mouse input may be
processed than desired.
.PP
\fB-wait_ui\fR \fIfactor\fR
.IP
Factor by which to cut the \fB-wait\fR time if there
has been recent user input (pointer or keyboard).
Improves response, but increases the load whenever you
are moving the mouse or typing.  Default: 2.00
.PP
\fB-setdefer\fR \fIn\fR
.IP
When the \fB-wait_ui\fR mechanism cuts down the wait time ms,
set the defer time to the same ms value. n=1 to enable,
0 to disable, and -1 to set defer to 0 (no delay).
Similarly, 2 and -2 indicate 'urgent_update' mode should
be used to push the updates even sooner.  Default: 1
.PP
\fB-nowait_bog\fR
.IP
Do not detect if the screen polling is "bogging down"
and sleep more.  Some activities with no user input can
slow things down a lot: consider a large terminal window
with a long build running in it continuously streaming
text output.  By default x11vnc will try to detect this
(3 screen polls in a row each longer than 0.25 sec with
no user input), and sleep up to 1.5 secs to let things
"catch up".  Use this option to disable that detection.
.PP
\fB-slow_fb\fR \fItime\fR
.IP
Floating point time in seconds to delay all screen
polling.  For special purpose usage where a low frame
rate is acceptable and desirable, but you want the
user input processed at the normal rate so you cannot
use \fB-wait.\fR
.PP
\fB-xrefresh\fR \fItime\fR
.IP
Floating point time in seconds to indicate how often to
do the equivalent of 
.IR xrefresh (1)
to force all windows
(in the viewable area if \fB-id,\fR \fB-sid,\fR or \fB-clip\fR is used)
to repaint themselves.  Use this only if applications
misbehave by not repainting themselves properly.
See also \fB-noxdamage.\fR
.PP
\fB-nap,\fR \fB-nonap\fR
.IP
Monitor activity and if it is low take longer naps
between screen polls to really cut down load when idle.
Default: take naps
.PP
\fB-sb\fR \fItime\fR
.IP
Time in seconds after NO activity (e.g. screen blank)
to really throttle down the screen polls (i.e. sleep
for about 1.5 secs). Use 0 to disable.  Default: 60
Set the env. var. X11VNC_SB_FACTOR to scale it.
.PP
\fB-readtimeout\fR \fIn\fR
.IP
Set LibVNCServer rfbMaxClientWait to n seconds. On
slow links that take a long time to paint the first
screen LibVNCServer may hit the timeout and drop the
connection.  Default: 20 seconds.
.PP
\fB-ping\fR \fIn\fR
.IP
Send a 1x1 framebuffer update to all clients every n
seconds (e.g. to try to keep a network connection alive)
.PP
\fB-nofbpm,\fR \fB-fbpm\fR
.IP
If the system supports the FBPM (Frame Buffer Power
Management) extension (i.e. some Sun systems), then
prevent the video h/w from going into a reduced power
state when VNC clients are connected.
.IP
FBPM capable video h/w save energy when the workstation
is idle by going into low power states (similar to DPMS
for monitors).  This interferes with x11vnc's polling
of the framebuffer data.
.IP
"\fB-nofbpm\fR" means prevent FBPM low power states whenever
VNC clients are connected, while "\fB-fbpm\fR" means to not
monitor the FBPM state at all.  See the 
.IR xset (1)
manpage
for details.  \fB-nofbpm\fR is basically the same as running
"xset fbpm force on" periodically.  Default: \fB-fbpm\fR
.PP
\fB-nodpms,\fR \fB-dpms\fR
.IP
If the system supports the DPMS (Display Power Management
Signaling) extension, then prevent the monitor from
going into a reduced power state when VNC clients
are connected.
.IP
DPMS reduced power monitor states are a good thing
and you normally want the power down to take place
(usually x11vnc has no problem exporting the display in
this state).  You probably only want to use "\fB-nodpms\fR"
to work around problems with Screen Savers kicking
on in DPMS low power states.  There is known problem
with kdesktop_lock on KDE where the screen saver keeps
kicking in every time user input stops for a second
or two.  Specifying "\fB-nodpms\fR" works around it.
.IP
"\fB-nodpms\fR" means prevent DPMS low power states whenever
VNC clients are connected, while "\fB-dpms\fR" means to not
monitor the DPMS state at all.  See the 
.IR xset (1)
manpage
for details.  \fB-nodpms\fR is basically the same as running
"xset dpms force on" periodically.  Default: \fB-dpms\fR
.PP
\fB-forcedpms\fR
.IP
If the system supports the DPMS (Display Power
Management Signaling) extension, then try to keep the
monitor in a powered off state.  This is to prevent
nosey people at the physical display from viewing what
is on the screen.  Be sure to lock the screen before
disconnecting.
.IP
This method is far from bullet proof, e.g. suppose
someone attaches a non-DPMS monitor, or loads the
machine so that there is a gap of time before x11vnc
restores the powered off state?  On many machines if
he floods it with keyboard and mouse input he can see
flashes of what is on the screen before the DPMS off
state is reestablished.  For this to work securely
there would need to be support in the X server to do
this exactly rather than approximately with DPMS.
.PP
\fB-clientdpms\fR
.IP
As \fB-forcedpms\fR but only when VNC clients are connected.
.PP
\fB-noserverdpms\fR
.IP
The UltraVNC ServerInput extension is supported.
This allows the VNC viewer to click a button that will
cause the server (x11vnc) to try to disable keyboard
and mouse input at the physical display and put the
monitor in dpms powered off state.  Use this option to
skip powering off the monitor.
.PP
\fB-noultraext\fR
.IP
Disable the following UltraVNC extensions: SingleWindow
and ServerInput.  The others managed by LibVNCServer
(textchat, 1/n scaling, rfbEncodingUltra) are not.
.PP
\fB-chatwindow\fR
.IP
Place a local UltraVNC chat window on the X11 display
that x11vnc is polling.  That way the person on the VNC
viewer-side can chat with the person at the physical
X11 console. (e.g. helpdesk w/o telephone)
.IP
For this to work the SSVNC package (version 1.0.21 or
later) MUST BE installed on the system where x11vnc runs
and the 'ssvnc' command must be available in $PATH.
The ssvncviewer is used as a chat window helper.
See http://www.karlrunge.com/x11vnc/ssvnc.html
.IP
This option implies '-rfbversion 3.6' so as to trick
UltraVNC viewers, otherwise they assume chat is not
available.  To specify a different rfbversion, place
it after the \fB-chatwindow\fR option on the cmdline.
.IP
See also the remote control 'chaton' and 'chatoff'
actions.  These can also be set from the tkx11vnc GUI.
.PP
\fB-noxdamage\fR
.IP
Do not use the X DAMAGE extension to detect framebuffer
changes even if it is available.  Use \fB-xdamage\fR if your
default is to have it off.
.IP
x11vnc's use of the DAMAGE extension: 1) significantly
reduces the load when the screen is not changing much,
and 2) detects changed areas (small ones by default)
more quickly.
.IP
Currently the DAMAGE extension is overly conservative
and often reports large areas (e.g. a whole terminal
or browser window) as damaged even though the actual
changed region is much smaller (sometimes just a few
pixels).  So heuristics were introduced to skip large
areas and use the damage rectangles only as "hints"
for the traditional scanline polling.  The following
tuning parameters are introduced to adjust this
behavior:
.PP
\fB-xd_area\fR \fIA\fR
.IP
Set the largest DAMAGE rectangle area \fIA\fR (in
pixels: width * height) to trust as truly damaged:
the rectangle will be copied from the framebuffer
(slow) no matter what.  Set to zero to trust *all*
rectangles. Default: 20000
.PP
\fB-xd_mem\fR \fIf\fR
.IP
Set how long DAMAGE rectangles should be "remembered",
\fIf\fR is a floating point number and is in units of the
scanline repeat cycle time (32 iterations).  The default
(1.0) should give no painting problems. Increase it if
there are problems or decrease it to live on the edge
(perhaps useful on a slow machine).
.PP
\fB-sigpipe\fR \fIstring\fR
.IP
Broken pipe (SIGPIPE) handling.  \fIstring\fR can be
"ignore" or "exit".  For "ignore" LibVNCServer
will handle the abrupt loss of a client and continue,
for "exit" x11vnc will cleanup and exit at the 1st
broken connection.
.IP
This option is not really needed since LibVNCServer
is doing the correct thing now for quite some time.
However, for convenience you can use it to ignore other
signals, e.g. "\fB-sigpipe\fR \fIignore:HUP,INT,TERM\fR" in case
that would be useful for some sort of application.
You can also put "exit:.." in the list to have x11vnc
cleanup on the listed signals. "\fB-sig\fR" is an alias
for this option if you don't like the 'pipe'. Example:
\fB-sig\fR ignore:INT,TERM,exit:USR1
.PP
\fB-threads,\fR \fB-nothreads\fR
.IP
Whether or not to use the threaded LibVNCServer
algorithm [rfbRunEventLoop] if libpthread is available.
In this mode new threads (one for input and one
for output) are created to handle each new client.
Default: \fB-nothreads.\fR
.IP
Thread stability is much improved in version 0.9.8.
.IP
Multiple clients in threaded mode should be stable
for the ZRLE encoding on all platforms.  The Tight and
Zlib encodings are currently only stable on Linux for
multiple clients.  Compile with \fB-DTLS=__thread\fR if your
OS and compiler and linker support it.
.IP
For resizes (randr, etc.) set this env. var. to the number
of milliseconds to sleep: X11VNC_THREADS_NEW_FB_SLEEP
at various places in the do_new_fb() action.  This is to
let various activities settle.  Default is about 500ms.
.IP
Multiple clients in threaded mode could yield better
performance for 'class-room' broadcasting usage; also in
\fB-appshare\fR broadcast mode.  See also the \fB-reflect\fR option.
.PP
\fB-fs\fR \fIf\fR
.IP
If the fraction of changed tiles in a poll is greater
than f, the whole screen is updated.  Default: 0.75
.PP
\fB-gaps\fR \fIn\fR
.IP
Heuristic to fill in gaps in rows or cols of n or
less tiles.  Used to improve text paging.  Default: 4
.PP
\fB-grow\fR \fIn\fR
.IP
Heuristic to grow islands of changed tiles n or wider
by checking the tile near the boundary.  Default: 3
.PP
\fB-fuzz\fR \fIn\fR
.IP
Tolerance in pixels to mark a tiles edges as changed.
Default: 2
.PP
\fB-debug_tiles\fR
.IP
Print debugging output for tiles, fb updates, etc.
.PP
\fB-snapfb\fR
.IP
Instead of polling the X display framebuffer (fb)
for changes, periodically copy all of X display fb
into main memory and examine that copy for changes.
(This setting also applies for non-X \fB-rawfb\fR modes).
Under some circumstances this will improve interactive
response, or at least make things look smoother, but in
others (most!) it will make the response worse.  If the
video h/w fb is such that reading small tiles is very
slow this mode could help.  To keep the "framerate"
up the screen size x bpp cannot be too large.  Note that
this mode is very wasteful of memory I/O resources
(it makes full screen copies even if nothing changes).
It may be of use in video capture-like applications,
webcams, or where window tearing is a problem.
.PP
\fB-rawfb\fR \fIstring\fR
.IP
Instead of polling X, poll the memory object specified
in \fIstring\fR.
.IP
For file polling, to memory map 
.IR mmap (2)
a file use:
"map:/path/to/a/file@WxHxB", with framebuffer Width,
Height, and Bits per pixel.  "mmap:..." is the
same.
.IP
If there is trouble with mmap, use "file:/..."
for slower 
.IR lseek (2)
based reading.
.IP
Use "snap:..." to imply \fB-snapfb\fR mode and the "file:"
access (this is for unseekable devices that only provide
the fb all at once, e.g. a video camera provides the
whole frame).
.IP
For shared memory segments string is of the form:
"shm:N@WxHxB" which specifies a shmid N and with
WxHxB as above.  See 
.IR shmat (1)
and 
.IR ipcs (1)
.IP
If you do not supply a type "map" is assumed if
the file exists (see the next paragraphs for some
exceptions to this.)
.IP
If string is "setup:cmd", then the command "cmd"
is run and the first line from it is read and used
as \fIstring\fR.  This allows initializing the device,
determining WxHxB, etc. These are often done as root
so take care.
.IP
If the string begins with "video", see the VIDEO4LINUX
discussion below where the device may be queried for
(and possibly set) the framebuffer parameters.
.IP
If the string begins with "console", "/dev/fb",
"fb", or "vt", see the LINUX CONSOLE discussion
below where the framebuffer device is opened and
keystrokes (and possibly mouse events) are inserted
into the console.
.IP
If the string begins with "vnc", see the VNC HOST
discussion below where the framebuffer is taken as that
of another remote VNC server.
.IP
Optional suffixes are ":R/G/B" and "+O" to specify
red, green, and blue masks (in hex) and an offset into
the memory object.  If the masks are not provided x11vnc
guesses them based on the bpp (if the colors look wrong,
you need to provide the masks.)
.IP
Another optional suffix is the Bytes Per Line which in
some cases is not WxB/8.  Specify it as WxHxB-BPL
e.g. 800x600x16-2048.  This could be a normal width
1024 at 16bpp fb, but only width 800 shows up.
.IP
So the full format is: mode:file@WxHxB:R/G/B+O-BPL
.IP
Examples:
.IP
\fB-rawfb\fR shm:210337933@800x600x32:ff/ff00/ff0000
.IP
\fB-rawfb\fR map:/dev/fb0@1024x768x32
.IP
\fB-rawfb\fR map:/tmp/Xvfb_screen0@640x480x8+3232
.IP
\fB-rawfb\fR file:/tmp/my.pnm@250x200x24+37
.IP
\fB-rawfb\fR file:/dev/urandom@128x128x8
\fB-rawfb\fR snap:/dev/video0@320x240x24 \fB-24to32\fR
\fB-rawfb\fR video0
\fB-rawfb\fR video \fB-pipeinput\fR VID
\fB-rawfb\fR console
\fB-rawfb\fR vt2
\fB-rawfb\fR vnc:somehost:0
.IP
(see 
.IR ipcs (1)
and 
.IR fbset (1)
for the first two examples)
.IP
In general all user input is discarded by default (see
the \fB-pipeinput\fR option for how to use a helper program
to insert).  Most of the X11 (screen, keyboard, mouse)
options do not make sense and many will cause this
mode to crash, so please think twice before setting or
changing them in a running x11vnc.
.IP
If you DO NOT want x11vnc to close the X DISPLAY in
rawfb mode, prepend a "+" e.g. +file:/dev/fb0...
Keeping the display open enables the default
remote-control channel, which could be useful.
Alternatively, if you specify \fB-noviewonly,\fR then the
mouse and keyboard input are STILL sent to the X
display, this usage should be very rare, i.e. doing
something strange with /dev/fb0.
.IP
If the device is not "seekable" (e.g. webcam) try
reading it all at once in full snaps via the "snap:"
mode (note: this is a resource hog).  If you are using
file: or map: AND the device needs to be reopened for
*every* snapfb snapshot, set the environment variable:
SNAPFB_RAWFB_RESET=1 as well.
.IP
If you want x11vnc to dynamically transform a 24bpp
rawfb to 32bpp (note that this will be slower) also
supply the \fB-24to32\fR option.  This would be useful for,
say, a video camera that delivers the pixel data as
24bpp packed RGB.  This is the default under "video"
mode if the bpp is 24.
.IP
Normally the bits per pixel, B, is 8, 16, or 32 (or
rarely 24), however there is also some support for
B < 8 (e.g. old graphics displays 4 bpp or 1 bpp).
In this case you certainly must supply the masks as
well: WxHxB:R/G/B.  The pixels will be padded out to
8 bpp using depth 8 truecolor.  The scheme currently
does not work with snap fb (ask if interested.) B=1
monochrome example: file:/dev/urandom@128x128x1:1/1/1
Some other like this are 128x128x2:3/3/3 128x128x4:7/7/7
.IP
For B < 8 framebuffers you can also set the env. var
RAWFB_CGA=1 to try a CGA mapping for B=4 (e.g. linux
vga16fb driver.)  Note with low bpp and/or resolution
VGA and VGA16 modes on the Linux console one's attempt
to export them via x11vnc can often be thwarted due to
special color palettes, pixel packings, and even video
painting buffering.  OTOH, often experimenting with the
RGB masks can yield something recognizable.
.IP
VIDEO4LINUX: on Linux some attempt is made to handle
video devices (webcams or TV tuners) automatically.
The idea is the WxHxB will be extracted from the
device itself.  So if you do not supply "@WxHxB...
parameters x11vnc will try to determine them.  It first
tries the v4l API if that support has been compiled in.
Otherwise it will run the v4l-
.IR info (1)
external program
if it is available.
.IP
The simplest examples are "\fB-rawfb\fR \fIvideo\fR" and "-rawfb
video1" which imply the device file /dev/video and
/dev/video1, respectively.  You can also supply the
/dev if you like, e.g. "\fB-rawfb\fR \fI/dev/video0\fR"
.IP
Since the video capture device framebuffer usually
changes continuously (e.g. brightness fluctuations),
you may want to use the \fB-wait,\fR \fB-slow_fb,\fR or \fB-defer\fR
options to lower the "framerate" to cut down on
network VNC traffic.
.IP
A more sophisticated video device scheme allows
initializing the device's settings using:
.IP
\fB-rawfb\fR video:<settings>
.IP
The prefix could also be, as above, e.g. "video1:" to
specify the device file.  The v4l API must be available
for this to work.  Otherwise, you will need to try
to initialize the device with an external program,
e.g. xawtv, spcaview, and hope they persist when x11vnc
re-opens the device.
.IP
<settings> is a comma separated list of key=value pairs.
The device's brightness, color, contrast, and hue can
be set to percentages, e.g. br=80,co=50,cn=44,hu=60.
.IP
The device filename can be set too if needed (if it
does not start with "video"), e.g. fn=/dev/qcam.
.IP
The width, height and bpp of the framebuffer can be
set via, e.g., w=160,h=120,bpp=16.
.IP
Related to the bpp above, the pixel format can be set
via the fmt=XXX, where XXX can be one of: GREY, HI240,
RGB555, RGB565, RGB24, and RGB32 (with bpp 8, 8, 16, 16,
24, and 32 respectively).  See http://www.linuxtv.org
for more info (V4L api).
.IP
For TV/rf tuner cards one can set the tuning mode
via tun=XXX where XXX can be one of PAL, NTSC, SECAM,
or AUTO.
.IP
One can switch the input channel by the inp=XXX setting,
where XXX is the name of the input channel (Television,
Composite1, S-Video, etc).  Use the name that is in the
information about the device that is printed at startup.
.IP
For input channels with tuners (e.g. Television) one
can change which station is selected by the sta=XXX
setting.  XXX is the station number.  Currently only
the ntsc-cable-us (US cable) channels are built into
x11vnc.  See the \fB-freqtab\fR option below to supply one
from xawtv. If XXX is greater than 500, then it is
interpreted as a raw frequency in KHz.
.IP
Example:
.IP
\fB-rawfb\fR video:br=80,w=320,h=240,fmt=RGB32,tun=NTSC,sta=47
.IP
one might need to add inp=Television too for the input
channel to be TV if the card doesn't come up by default
in that one.
.IP
Note that not all video capture devices will support
all of the above settings.
.IP
See the \fB-pipeinput\fR VID option below for a way to control
the settings through the VNC Viewer via keystrokes.
As a shortcut, if the string begins "Video.." instead
of "video.." then \fB-pipeinput\fR VID is implied.
.IP
As above, if you specify a "@WxHxB..." after the
<settings> string they are used verbatim: the device
is not queried for the current values.  Otherwise the
device will be queried.
.IP
LINUX CONSOLE:  The following describes some ways to
view and possibly interact with the Linux text/graphics
console (i.e. not X11 XFree86/Xorg)
.IP
Note: If the LibVNCServer LinuxVNC program is on your
system you may want to use that instead of the following
method because it will be faster and more accurate
for the Linux text console and includes mouse support.
There is, however, the basic LinuxVNC functionality in
x11vnc if you replace "console" with "vt" in the
examples below.
.IP
If the rawfb string begins with "console" the
framebuffer device /dev/fb0 is opened and /dev/tty0 is
opened too.  The latter is used to inject keystrokes
(not all are supported, but the basic ones are).
You will need to be root to inject keystrokes, but
not necessarily to open /dev/fb0.  /dev/tty0 refers to
the active VT, to indicate one explicitly, use, e.g.,
"console2" for /dev/tty2, etc. by indicating the
specific VT number.
.IP
For the Linux framebuffer device, /dev/fb0, (fb1,
etc) to be enabled the appropriate kernel drivers must
be loaded.  E.g. vesafb or vga16fb and also by setting
the boot parameter vga=0x301 (or 0x314, 0x317, etc.)
(The vga=... method is the preferred way; set your
machines up that way.)  Otherwise there will be a
\'No such device' error.  You can also load a Linux
framebuffer driver specific to your make of video card
for more functionality.  Once the machine is booted one
can often 'modprobe' the fb driver as root to obtain
a framebuffer device.
.IP
If you cannot get /dev/fb0 working on Linux, try
using the LinuxVNC emulation mode by "\fB-rawfb\fR \fIvtN\fR"
where N = 1, ... 6 is the Linux Virtual Terminal (aka
virtual console) you wish to view, e.g. "\fB-rawfb\fR \fIvt2\fR".
Unlike /dev/fb mode, it need not be the active Virtual
Terminal.  Note that this mode can only show text and
not graphics.  x11vnc polls the text in /dev/vcsaN
.IP
Set the env. var. RAWFB_VCSA_BW=1 to disable colors in
the "vtN" mode (i.e. black and white only.)  If you
do not prefer the default 16bpp set RAWFB_VCSA_BPP to
8 or 32.  If you need to tweak the rawfb parameters by
using the 'console_guess' string printed at startup,
be sure to indicate the snap: method.
.IP
uinput: If the Linux version appears to be 2.6
or later and the "uinput" module appears to be
present (modprobe uinput), then the uinput method
will be used instead of /dev/ttyN.  uinput allows
insertion of BOTH keystrokes and mouse input and so it
preferred when accessing graphical (e.g. QT-embedded)
linux console apps.  It also provides more accurate
keystroke insertion.  See \fB-pipeinput\fR UINPUT below for
more information on this mode; you will have to use
\fB-pipeinput\fR if you want to tweak any UINPUT parameters.
You may also want to also use the \fB-nodragging\fR and
\fB-cursor\fR none options.  Use "console0", etc  or
\fB-pipeinput\fR CONSOLE to force the /dev/ttyN method.
.IP
Note you can change the Linux VT remotely using the
.IR chvt (1)
command to make the one you want be the active
one (e.g. 'chvt 3').  Sometimes switching out and back
corrects the framebuffer's graphics state.  For the
"\fB-rawfb\fR \fIvtN\fR" mode there is no need to switch the VT's.
.IP
To skip input injecting entirely use "consolex"
or "vtx".
.IP
The string "/dev/fb0" (1, etc.) can be used instead
of "console".  This can be used to specify a different
framebuffer device, e.g. /dev/fb1.  As a shortcut the
"/dev/" can be dropped.  If the name is something
nonstandard, use "console:/dev/foofb"
.IP
If you do not want x11vnc to guess the framebuffer's
WxHxB and masks automatically (sometimes the kernel
gives incorrect information), specify them with a @WxHxB
(and optional :R/G/B masks) at the end of the string.
.IP
Examples:
\fB-rawfb\fR console
\fB-rawfb\fR /dev/fb0           (same)
\fB-rawfb\fR console3           (force /dev/tty3)
\fB-rawfb\fR consolex           (no keystrokes or mouse)
\fB-rawfb\fR console:/dev/nonstd
\fB-rawfb\fR console \fB-pipeinput\fR UINPUT:accel=4.0
\fB-rawfb\fR vt3                (/dev/tty3 w/o /dev/fb0)
.IP
VNC HOST: if the \fB-rawfb\fR string is of the form
"vnc:host:N" then the VNC display "N" on the remote
VNC server "host" is connected to (i.e. x11vnc acts as
a VNC client itself) and that framebuffer is exported.
.IP
This mode is really only of use if you are trying
to improve performance in the case of many (e.g. >
10) simultaneous VNC viewers, and you try a divide
and conquer scheme to reduce bandwidth and improve
responsiveness.  (However, another user found this mode
useful to export a demo display through a slow link:
then multiple demo viewers connected to the reflecting
x11vnc on the fast side of the link, and so avoided
all of the demo viewers going through the slow link.)
.IP
For example, if there will be 64 simultaneous VNC
viewers this can lead to a lot of redundant VNC traffic
to and from the server host:N, extra CPU usage,
and all viewers response can be reduced by having
to wait for writes to the slowest client to finish.
However, if you set up 8 reflectors/repeaters started
with option \fB-rawfb\fR vnc:host:N, then there are only
8 connections to host:N.  Each repeater then handles
8 vnc viewer connections thereby spreading the load
around.  In classroom broadcast usage, try to put the
repeaters on different switches.  This mode is the same
as \fB-reflect\fR host:N.  Replace "host:N" by "listen"
or "listen:port" for a reverse connection.
.IP
Overall performance will not be as good as a single
direct connection because, among other things,
there is an additional level of framebuffer polling
and pointer motion can still induce many changes per
second that must be propagated.  Tip: if the remote VNC
is x11vnc doing wireframing, or an X display that does
wireframing that gives much better response than opaque
window dragging.  Consider the \fB-nodragging\fR option if
the problem is severe.
.IP
The env. var. X11VNC_REFLECT_PASSWORD can be set to
the password needed to log into the vnc host server, or
to "file:path_to_file" to indicate a file containing
the password as its first line.
.IP
To set the pixel format that x11vnc requests as a VNC
CLIENT set the env. vars: X11VNC_REFLECT_bitsPerSample
X11VNC_REFLECT_samplesPerPixel, and
X11VNC_REFLECT_bytesPerPixel; the defaults are 8, 3, 4.
2, 3, 1 would give a low color mode.  See the function
rfbGetClient() in libvncclient for more info.
.IP
The VNC HOST mode implies \fB-shared.\fR  Use \fB-noshared\fR as
a subsequent cmdline option to disable sharing.
.PP
\fB-freqtab\fR \fIfile\fR
.IP
For use with "\fB-rawfb\fR \fIvideo\fR" for TV tuner devices to
specify station frequencies.  Instead of using the built
in ntsc-cable-us mapping of station number to frequency,
use the data in file.  For stations that are not
numeric, e.g. SE20, they are placed above the highest
numbered station in the order they are found.  Example:
"\fB-freqtab\fR \fI/usr/X11R6/share/xawtv/europe-west.list\fR"
You can make your own freqtab by copying the xawtv
format.
.PP
\fB-pipeinput\fR \fIcmd\fR
.IP
This option lets you supply an external command in
\fIcmd\fR that x11vnc will pipe all of the user input
events to in a simple format.  In \fB-pipeinput\fR mode by
default x11vnc will not process any of the user input
events.  If you prefix \fIcmd\fR with "tee:" it will
both send them to the pipe command and process them.
For a description of the format run "-pipeinput
tee:/bin/cat".  Another prefix is "reopen" which
means to reopen pipe if it exits.  Separate multiple
prefixes with commas.
.IP
In combination with \fB-rawfb\fR one might be able to
do amusing things (e.g. control non-X devices).
To facilitate this, if \fB-rawfb\fR is in effect then the
value is stored in X11VNC_RAWFB_STR for the pipe command
to use if it wants. Do 'env | grep X11VNC' for more.
.IP
Built-in pipeinput modes (no external program required):
.IP
If cmd is "VID" and you are using the \fB-rawfb\fR for a
video capture device, then an internal list of keyboard
mappings is used to set parameters of the video.
The mappings are:
.IP
"B" and "b" adjust the brightness up and down.
"H" and "h" adjust the hue.
"C" and "c" adjust the colour.
"N" and "n" adjust the contrast.
"S" and "s" adjust the size of the capture screen.
"I" and "i" cycle through input channels.
Up and Down arrows adjust the station (if a tuner)
F1, F2, ..., F6 will switch the video capture pixel
format to HI240, RGB565, RGB24, RGB32, RGB555, and
GREY respectively.  See \fB-rawfb\fR video for details.
.IP
If cmd is "CONSOLE" or "CONSOLEn" where n
is a Linux console number, then the linux console
keystroke insertion to /dev/ttyN (see \fB-rawfb\fR console)
is performed.
.IP
If cmd begins with "UINPUT" then the Linux uinput
module is used to insert both keystroke and mouse events
to the Linux console (see \fB-rawfb\fR above).  This usually
is the /dev/input/uinput device file (you may need to
create it with "mknod /dev/input/uinput c 10 223"
and insert the module with "modprobe uinput".
.IP
The UINPUT mode currently only does US keyboards (a
scan code option may be added), and not all keysyms
are supported.  But it is probably more accurate than
the "CONSOLE" method.
.IP
You may want to use the options \fB-cursor\fR none and
\fB-nodragging\fR in this mode.
.IP
Additional tuning options may be supplied via:
UINPUT:opt1,opt2,... (a comma separated list). If an
option begins with "/" it is taken as the uinput
device file.
.IP
Which uinput is injected can be controlled by an option
string made of the characters "K", "M", and "B"
(see the \fB-input\fR option), e.g. "KM" allows keystroke
and motion but not button clicks.
.IP
A UINPUT option of the form: accel=f, or accel=fx+fy
sets the mouse motion "acceleration".  This is used
to correct raw mouse relative motion into how much the
application cursor moves (x11vnc has no control over,
or knowledge of how the windowing application interprets
the raw mouse motions).  Typically the acceleration
for an X display is 2 (see xset "m" option).  "f"
is a floating point number, e.g. 3.0.  Use "fx+fy"
if you need to supply different corrections for x and y.
.IP
Note: the default acceleration is 2.0 since it seems
both X and qt-embedded often (but not always) use
this value.
.IP
Even with a correct accel setting the mouse position
will get out of sync (probably due to a mouse
"threshold" setting where the acceleration doe not
apply, set 
.IR xset (1)
).  The option reset=N sets the
number of ms (default 150) after which the cursor is
attempted to be reset (by forcing the mouse to (0,
0) via small increments and then back out to (x, y)
in 1 jump), This correction seems to be needed but can
cause jerkiness or unexpected behavior with menus, etc.
Use reset=0 to disable.
.IP
If you set the env. var X11VNC_UINPUT_THRESHOLDS then
the thresh=n mode will be enabled.  It is currently
not working well.  If |dx| <= thresh and |dy| < thresh
no acceleration is applied.  Use "thresh=+n" |dx| +
|dy| < thresh to be used instead (X11?)
.IP
Example:
\fB-pipeinput\fR UINPUT:accel=4.0 \fB-cursor\fR none
.IP
If the uinput device has an absolute pointer (as opposed
to a normal mouse that is a relative pointer) you can
specify the option "abs".  Note that a touchpad
on a laptop is an absolute device to some degree.
This (usually) avoids all the problems with mouse
acceleration.  If x11vnc has trouble deducing the
size of the device, use "abs=WxH".  Furthermore,
if the device is a touchscreen (assumed to have an
absolute pointer) use "touch" or "touch=WxH".
For touchscreens, when a mouse button is pressed,
a pressure increase is injected, and when the button
is released a pressure of zero is injected.
.IP
If touch has been set, use "touch_always=1" to
indicate whenever the mouse moves with no button
pressed, a touch event of zero pressure should be
sent anyway.  Also use "btn_touch=1" to indicate a
BTN_TOUCH keystroke press or release should be sent
instead of a pressure change.  Set "dragskip=n" to
skip n dragged mouse touches (with pressure applied)
before injecting one.  To indicate the pressure that
should be sent when there is a button click for a
touchscreen device, specify pressure=n, e.g. n=5. The
default is n=1.
.IP
If a touch screen is being used ("touch" above)
and it is having its input processed by tslib, you can
specify the tslib calibration file via tslib_cal=<file>.
For example, tslib_cal=/etc/pointercal.  To get accurate
or even usable positioning this is required when tslib
is in use.
.IP
The Linux uinput mechanism can be bypassed and one can
write input events DIRECTLY to the devices instead.
To do this, specify one or more of the following
for the input classes: direct_rel=<device>
direct_abs=<device> direct_btn=<device> or
direct_key=<device>.  The <device> file is usually
something like /dev/input/event1 but you can specify
any device file or pipe.  You must specify each one
of the above classes even if they correspond to the
same device file (rel/abs and btn are often the same.)
Look at the file /proc/bus/input/devices to get an idea
what is available and the device filenames.  Note:
The /dev/input/mouse* devices do not seem to work,
use the corresponding /dev/input/event* file instead.
Any input class not directly specified as above will be
handled via the uinput mechanism.  To disable creating a
uinput device (and thereby discarding unhandled input),
specify "nouinput".
.IP
Examples:
.IP
\fB-pipeinput\fR UINPUT:direct_abs=/dev/input/event1
.IP
this was used on a qtmoko Neo freerunner (armel):
.IP
\fB-pipeinput\fR UINPUT:touch,tslib_cal=/etc/pointercal,
direct_abs=/dev/input/event1,nouinput,dragskip=4
.IP
(where the long line has been split into two.)
.IP
You can set the env. var X11VNC_UINPUT_DEBUG=1 or higher
to get debugging output for UINPUT mode.
.PP
\fB-macnodim\fR
.IP
For the native MacOSX server, disable dimming.
.PP
\fB-macnosleep\fR
.IP
For the native MacOSX server, disable display sleep.
.PP
\fB-macnosaver\fR
.IP
For the native MacOSX server, disable screensaver.
.PP
\fB-macnowait\fR
.IP
For the native MacOSX server, do not wait for the
user to switch back to his display.
.PP
\fB-macwheel\fR \fIn\fR
.IP
For the native MacOSX server, set the mouse wheel
speed to n (default 5).
.PP
\fB-macnoswap\fR
.IP
For the native MacOSX server, do not swap mouse
buttons 2 and 3.
.PP
\fB-macnoresize\fR
.IP
For the native MacOSX server, do not resize or reset
the framebuffer even if it is detected that the screen
resolution or depth has changed.
.PP
\fB-maciconanim\fR \fIn\fR
.IP
For the native MacOSX server, set n to the number
of milliseconds that the window iconify/deiconify
animation takes.  In \fB-ncache\fR mode this value will be
used to skip the animation if possible. (default 400)
.PP
\fB-macmenu\fR
.IP
For the native MacOSX server, in \fB-ncache\fR client-side
caching mode, try to cache pull down menus (not perfect
because they have animated fades, etc.)
.PP
\fB-macuskbd\fR
.IP
For the native MacOSX server, use the original
keystroke insertion code based on a US keyboard.
.PP
\fB-macnoopengl\fR
.IP
For the native MacOSX server, do not use OpenGL for
screen capture, but rather use the original, deprecated
raw memory access method: addr = CGDisplayBaseAddress().
.PP
\fB-macnorawfb\fR
.IP
For the native MacOSX server, disable the raw memory
address screen capture method.
.IP
MACOSX NOTE: There are some deprecated MacOSX interfaces
to inject keyboard and mouse events and the raw memory
access method is deprecated as well (however, OpenGL
will be preferred if available because it is faster.)
One can force not using any deprecated interfaces at
compile time by setting \fB-DX11VNC_MACOSX_NO_DEPRECATED=1\fR
in CPPFLAGS.  Or to turn them off one by one:
\fB-DX11VNC_MACOSX_NO_DEPRECATED_LOCALEVENTS=1,\fR
\fB-DX11VNC_MACOSX_NO_DEPRECATED_POSTEVENTS=1\fR or
\fB-DX11VNC_MACOSX_NO_DEPRECATED_FRAMEBUFFER=1\fR
At run time, for testing and workarounds, one can
disable them by using:
\fB-env\fR X11VNC_MACOSX_NO_DEPRECATED=1
\fB-env\fR X11VNC_MACOSX_NO_DEPRECATED_LOCALEVENTS=1
\fB-env\fR X11VNC_MACOSX_NO_DEPRECATED_POSTEVENTS=1 or
\fB-env\fR X11VNC_MACOSX_NO_DEPRECATED_FRAMEBUFFER=1
Note: When doing either of these for the mouse input
not everything works currently, e.g. double clicks and
wireframing.  Also, screen resolution and pixel depth
changes will not be automatically detected unless the
deprecated framebuffer interfaces are allowed.
.IP
Conversely, if you are compiling on an
older machine that does not have some of
the newer interfaces, you may need to specify
\fB-DX11VNC_MACOSX_NO_CGEVENTCREATESCROLLWHEELEVENT\fR
\fB-DX11VNC_MACOSX_NO_CGEVENTCREATEMOUSEEVENT\fR or
\fB-DX11VNC_MACOSX_NO_CGEVENTCREATEKEYBOARDEVENT.\fR  Use
\fB-DX11VNC_MACOSX_USE_GETMAINDEVICE\fR to regain the very
old QuickDraw GetMainDevice() interface (rare...)
.PP
\fB-gui\fR \fI[gui-opts]\fR
.IP
Start up a simple tcl/tk gui based on the remote
control options \fB-remote/-query\fR described below.
Requires the "wish" program to be installed on the
machine.  "gui-opts" is not required: the default
is to start up both the full gui and x11vnc with the
gui showing up on the X display in the environment
variable DISPLAY.
.IP
"gui-opts" can be a comma separated list of items.
Currently there are these types of items: 1) a gui
mode, a 2) gui "simplicity", 3) the X display the
gui should display on, 4) a "tray" or "icon" mode,
and 5) a gui geometry.
.IP
1) The gui mode can be "start", "conn", or "wait"
"start" is the default mode above and is not required.
"conn" means do not automatically start up x11vnc,
but instead just try to connect to an existing x11vnc
process.  "wait" means just start the gui and nothing
else (you will later instruct the gui to start x11vnc
or connect to an existing one.)
.IP
2) The gui simplicity is off by default (a power-user
gui with all options is presented) To start with
something less daunting supply the string "simple"
("ez" is an alias for this).  Once the gui is
started you can toggle between the two with "Misc ->
simple_gui".
.IP
3) Note the possible confusion regarding the potentially
two different X displays: x11vnc polls one, but you
may want the gui to appear on another.  For example, if
you ssh in and x11vnc is not running yet you may want
the gui to come back to you via your ssh redirected X
display (e.g. localhost:10).
.IP
If you do not specify a gui X display in "gui-opts"
then the DISPLAY environment variable and \fB-display\fR
option are tried (in that order).  Regarding the x11vnc
X display the gui will try to communication with, it
first tries \fB-display\fR and then DISPLAY.  For example,
"x11vnc \fB-display\fR :0 \fB-gui\fR otherhost:0", will remote
control an x11vnc polling :0 and display the gui on
otherhost:0 The "tray/icon" mode below reverses this
preference, preferring to display on the x11vnc display.
.IP
4) When "tray" or "icon" is specified, the gui
presents itself as a small icon with behavior typical
of a "system tray" or "dock applet".  The color
of the icon indicates status (connected clients) and
there is also a balloon status.  Clicking on the icon
gives a menu from which properties, etc, can be set and
the full gui is available under "Advanced".  To be
fully functional, the gui mode should be "start"
(the default).
.IP
Note that tray or icon mode will imply the \fB-forever\fR
x11vnc option (if the x11vnc server is started along
with the gui) unless \fB-connect\fR or \fB-connect_or_exit\fR has
been specified.  So x11vnc (and the tray/icon gui)
will wait for more connections after the first client
disconnects.  If you want only one viewer connection
include the \fB-once\fR option.
.IP
For "icon" the gui just a small standalone window.
For "tray" it will attempt to embed itself in the
"system tray" if possible. If "=setpass" is appended then
at startup the X11 user will be prompted to set the
VNC session password.  If =<hexnumber> is appended
that icon will attempt to embed itself in the window
given by hexnumber.  Use =noadvanced to disable the
full gui. (To supply more than one, use "+" sign).
E.g. \fB-gui\fR tray=setpass and \fB-gui\fR icon=0x3600028
.IP
Other modes: "full", the default and need not be
specified.  "\fB-gui\fR \fInone\fR", do not show a gui, useful
to override a ~/.x11vncrc setting, etc.
.IP
5) When "geom=+X+Y" is specified, that geometry
is passed to the gui toplevel.  This is the icon in
icon/tray mode, or the full gui otherwise.  You can
also specify width and height, i.e. WxH+X+Y, but it
is not recommended.  In "tray" mode the geometry is
ignored unless the system tray manager does not seem
to be running.  One could imagine using something like
"\fB-gui\fR \fItray,geom=+4000+4000\fR" with a display manager
to keep the gui invisible until someone logs in...
.IP
More icon tricks, "icon=minimal" gives an icon just
with the VNC display number.  You can also set the font
with "iconfont=...".  The following could be useful:
"\fB-gui\fR \fIicon=minimal,iconfont=5x8,geom=24x10+0-0\fR"
.IP
General examples of the \fB-gui\fR option: "x11vnc \fB-gui",\fR
"x11vnc \fB-gui\fR ez" "x11vnc \fB-gui\fR localhost:10",
"x11vnc \fB-gui\fR conn,host:0", "x11vnc \fB-gui\fR tray,ez"
"x11vnc \fB-gui\fR tray=setpass"
.IP
If you do not intend to start x11vnc from the gui
(i.e. just remote control an existing one), then the
gui process can run on a different machine from the
x11vnc server as long as X permissions, etc. permit
communication between the two.
.IP
FONTS: On some systems the tk fonts can be too small,
jagged, or otherwise unreadable.  There are 4 env vars
you can set to be the tk font you prefer:
.IP
X11VNC_FONT_BOLD   main font for menus and buttons.
X11VNC_FONT_FIXED  font for fixed width text.
.IP
X11VNC_FONT_BOLD_SMALL  tray icon font.
X11VNC_FONT_REG_SMALL   tray icon menu font.
.IP
The last two only apply for the tray icon mode.
.IP
Here are some examples:
.IP
\fB-env\fR X11VNC_FONT_BOLD='Helvetica \fB-16\fR bold'
\fB-env\fR X11VNC_FONT_FIXED='Courier \fB-14'\fR
\fB-env\fR X11VNC_FONT_REG_SMALL='Helvetica \fB-12'\fR
.IP
You can put the lines like the above (without the
quotes) in your ~/.x11vncrc file to avoid having to
specify them on the x11vnc command line.
.PP
\fB-remote\fR \fIcommand\fR
.IP
Remotely control some aspects of an already running
x11vnc server.  "\fB-R\fR" and "\fB-r\fR" are aliases for
"\fB-remote\fR".  After the remote control command is
sent to the running server the 'x11vnc \fB-remote\fR ...'
x11vnc command exits.  You can often use the \fB-query\fR
command (see below) to see if the x11vnc server
processed your \fB-remote\fR command.
.IP
The default communication channel is that of X
properties (specifically X11VNC_REMOTE), and so this
command must be run with correct settings for DISPLAY
and possibly XAUTHORITY to connect to the X server
and set the property.  Alternatively, use the \fB-display\fR
and \fB-auth\fR options to set them to the correct values.
The running server cannot use the \fB-novncconnect\fR option
because that disables the communication channel.
See below for alternate channels.
.IP
For example: 'x11vnc \fB-remote\fR stop' (which is the same as
\'x11vnc \fB-R\fR stop') will close down the x11vnc server.
\'x11vnc \fB-R\fR shared' will enable shared connections, and
\'x11vnc \fB-R\fR scale:3/4' will rescale the desktop.
.IP
To use a different name for the X11 property (e.g. to
have separate communication channels for multiple
x11vnc's on the same display) set the X11VNC_REMOTE
environment variable to the string you want, for
example: \fB-env\fR X11VNC_REMOTE=X11VNC_REMOTE_12345
Both sides of the channel must use the same unique name.
.IP
To run a bunch of commands in a sequence use something
like: x11vnc \fB-R\fR 'script:firstcmd;secondcmd;...'
.IP
Use x11vnc \fB-R\fR script:file=/path/to/file to read commands
from a file (can be multi-line and use the comment '#'
character in the normal way.  The ';' separator must
still be used to separate each command.)
.IP
To not try to contact another x11vnc process and instead
just run the command (or query) directly, prefix the
command with the string "DIRECT:"
.IP
.IP
The following \fB-remote/-R\fR commands are supported:
.IP
stop            terminate the server, same as "quit"
"exit" or "shutdown".
.IP
ping            see if the x11vnc server responds.
return is: ans=ping:<display>
.IP
ping:mystring   as above, but use your own unique string.
return is: ans=ping:mystring:<xdisplay>
.IP
blacken         try to push a black fb update to all
clients (due to timings a client
could miss it). Same as "zero", also
"zero:x1,y1,x2,y2" for a rectangle.
.IP
refresh         send the entire fb to all clients.
.IP
reset           recreate the fb, polling memory, etc.
.IP
id:windowid     set \fB-id\fR window to "windowid". empty
or "root" to go back to root window
.IP
sid:windowid    set \fB-sid\fR window to "windowid"
.IP
id_cmd:cmd      cmds: raise, lower, map, unmap, iconify,
move:dXdY, resize:dWdH, geom:WxH+X+Y. dX
dY, dW, and dH must have a leading "+"
or "-" e.g.: move:-30+10 resize:+20+35
also: wm_delete, wm_name:string and
icon_name:string. Also id_cmd:win=N:cmd
.IP
waitmapped      wait until subwin is mapped.
.IP
nowaitmapped    do not wait until subwin is mapped.
.IP
clip:WxH+X+Y    set \fB-clip\fR mode to "WxH+X+Y"
.IP
flashcmap       enable  \fB-flashcmap\fR mode.
.IP
noflashcmap     disable \fB-flashcmap\fR mode.
.IP
shiftcmap:n     set \fB-shiftcmap\fR to n.
.IP
notruecolor     enable  \fB-notruecolor\fR mode.
.IP
truecolor       disable \fB-notruecolor\fR mode.
.IP
overlay         enable  \fB-overlay\fR mode (if applicable).
.IP
nooverlay       disable \fB-overlay\fR mode.
.IP
overlay_cursor  in \fB-overlay\fR mode, enable cursor drawing.
.IP
overlay_nocursor disable cursor drawing. same as
nooverlay_cursor.
.IP
8to24           enable  \fB-8to24\fR mode (if applicable).
.IP
no8to24         disable \fB-8to24\fR mode.
.IP
8to24_opts:str  set the \fB-8to24\fR opts to "str".
.IP
24to32          enable  \fB-24to32\fR mode (if applicable).
.IP
no24to32        disable \fB-24to32\fR mode.
.IP
visual:vis      set \fB-visual\fR to "vis"
.IP
scale:frac      set \fB-scale\fR to "frac"
.IP
scale_cursor:f  set \fB-scale_cursor\fR to "f"
.IP
viewonly        enable  \fB-viewonly\fR mode.
.IP
noviewonly      disable \fB-viewonly\fR mode.
.IP
shared          enable  \fB-shared\fR mode.
.IP
noshared        disable \fB-shared\fR mode.
.IP
forever         enable  \fB-forever\fR mode.
.IP
noforever       disable \fB-forever\fR mode.
.IP
timeout:n       reset \fB-timeout\fR to n, if there are
currently no clients, exit unless one
connects in the next n secs.
.IP
tightfilexfer   enable  filetransfer for NEW clients.
.IP
notightfilexfer disable filetransfer for NEW clients.
.IP
ultrafilexfer   enable  filetransfer for clients.
.IP
noultrafilexfer disable filetransfer for clients.
.IP
rfbversion:n.m  set \fB-rfbversion\fR for new clients.
.IP
http            enable  http client connections.
.IP
nohttp          disable http client connections.
.IP
deny            deny any new connections, same as "lock"
.IP
nodeny          allow new connections, same as "unlock"
.IP
avahi           enable  avahi service advertising.
.IP
noavahi         disable avahi service advertising.
.IP
mdns            enable  avahi service advertising.
.IP
nomdns          disable avahi service advertising.
.IP
zeroconf        enable  avahi service advertising.
.IP
nozeroconf      disable avahi service advertising.
.IP
connect:host    do reverse connection to host, "host"
may be a comma separated list of hosts
or host:ports.  See \fB-connect.\fR  Passwords
required as with fwd connections.
See X11VNC_REVERSE_CONNECTION_NO_AUTH=1
.IP
disconnect:host disconnect any clients from "host"
same as "close:host".  Use host
"all" to close all current clients.
If you know the client internal hex ID,
e.g. 0x3 (returned by "\fB-query\fR \fIclients\fR"
and RFB_CLIENT_ID) you can use that too.
.IP
proxy:host:port set reverse connection proxy (empty to
disable).
.IP
allowonce:host  For the next connection only, allow
connection from "host". In \fB-ssl\fR mode
two connections are allowed (i.e. Fetch
Cert) unless X11VNC_NO_SSL_ALLOW_TWICE=1
.IP
allow:hostlist  set \fB-allow\fR list to (comma separated)
"hostlist". See \fB-allow\fR and \fB-localhost.\fR
Do not use with \fB-allow\fR /path/to/file
Use "+host" to add a single host, and
use "\fB-host\fR" to delete a single host
.IP
localhost       enable  \fB-localhost\fR mode
.IP
nolocalhost     disable \fB-localhost\fR mode
.IP
listen:str      set \fB-listen\fR to str, empty to disable.
.IP
noipv6          enable  \fB-noipv6\fR mode.
.IP
ipv6            disable \fB-noipv6\fR mode.
.IP
noipv4          enable  \fB-noipv4\fR mode.
.IP
ipv4            disable \fB-noipv4\fR mode.
.IP
6               enable  -6 IPv6 listening mode.
.IP
no6             disable -6 IPv6 listening mode.
.IP
lookup          disable \fB-nolookup\fR mode.
.IP
nolookup        enable  \fB-nolookup\fR mode.
.IP
lookup          disable \fB-nolookup\fR mode.
.IP
input:str       set \fB-input\fR to "str", empty to disable.
.IP
grabkbd         enable  \fB-grabkbd\fR mode.
.IP
nograbkbd       disable \fB-grabkbd\fR mode.
.IP
grabptr         enable  \fB-grabptr\fR mode.
.IP
nograbptr       disable \fB-grabptr\fR mode.
.IP
grabalways      enable  \fB-grabalways\fR mode.
.IP
nograbalways    disable \fB-grabalways\fR mode.
.IP
grablocal:n     set \fB-grablocal\fR to n.
.IP
client_input:str set the K, M, B \fB-input\fR on a per-client
basis.  select which client as for
disconnect, e.g. client_input:host:MB
or client_input:0x2:K
.IP
accept:cmd      set \fB-accept\fR "cmd" (empty to disable).
.IP
afteraccept:cmd set \fB-afteraccept\fR (empty to disable).
.IP
gone:cmd        set \fB-gone\fR "cmd" (empty to disable).
.IP
noshm           enable  \fB-noshm\fR mode.
.IP
shm             disable \fB-noshm\fR mode (i.e. use shm).
.IP
flipbyteorder   enable \fB-flipbyteorder\fR mode, you may need
to set noshm for this to do something.
.IP
noflipbyteorder disable \fB-flipbyteorder\fR mode.
.IP
onetile         enable  \fB-onetile\fR mode. (you may need to
set shm for this to do something)
.IP
noonetile       disable \fB-onetile\fR mode.
.IP
solid           enable  \fB-solid\fR mode
.IP
nosolid         disable \fB-solid\fR mode.
.IP
solid_color:color set \fB-solid\fR color (and apply it).
.IP
blackout:str    set \fB-blackout\fR "str" (empty to disable).
See \fB-blackout\fR for the form of "str"
(basically: WxH+X+Y,...)
Use "+WxH+X+Y" to append a single
rectangle use "-WxH+X+Y" to delete one
.IP
xinerama        enable  \fB-xinerama\fR mode. (if applicable)
.IP
noxinerama      disable \fB-xinerama\fR mode.
.IP
xtrap           enable  \fB-xtrap\fR input mode(if applicable)
.IP
noxtrap         disable \fB-xtrap\fR input mode.
.IP
xrandr          enable  \fB-xrandr\fR mode. (if applicable)
.IP
noxrandr        disable \fB-xrandr\fR mode.
.IP
xrandr_mode:mode set the \fB-xrandr\fR mode to "mode".
.IP
rotate:mode     set the \fB-rotate\fR mode to "mode".
.IP
padgeom:WxH     set \fB-padgeom\fR to WxH (empty to disable)
If WxH is "force" or "do" the padded
geometry fb is immediately applied.
.IP
quiet           enable  \fB-quiet\fR mode.
.IP
noquiet         disable \fB-quiet\fR mode.
.IP
modtweak        enable  \fB-modtweak\fR mode.
.IP
nomodtweak      enable  \fB-nomodtweak\fR mode.
.IP
xkb             enable  \fB-xkb\fR modtweak mode.
.IP
noxkb           disable \fB-xkb\fR modtweak mode.
.IP
capslock        enable  \fB-capslock\fR mode.
.IP
nocapslock      disable \fB-capslock\fR mode.
.IP
skip_lockkeys   enable  \fB-skip_lockkeys\fR mode.
.IP
noskip_lockkeys disable \fB-skip_lockkeys\fR mode.
.IP
skip_keycodes:str enable \fB-xkb\fR \fB-skip_keycodes\fR "str".
.IP
sloppy_keys     enable  \fB-sloppy_keys\fR mode.
.IP
nosloppy_keys   disable \fB-sloppy_keys\fR mode.
.IP
skip_dups       enable  \fB-skip_dups\fR mode.
.IP
noskip_dups     disable \fB-skip_dups\fR mode.
.IP
add_keysyms     enable \fB-add_keysyms\fR mode.
.IP
noadd_keysyms   stop adding keysyms. those added will
still be removed at exit.
.IP
clear_mods      enable  \fB-clear_mods\fR mode and clear them.
.IP
noclear_mods    disable \fB-clear_mods\fR mode.
.IP
clear_keys      enable  \fB-clear_keys\fR mode and clear them.
.IP
noclear_keys    disable \fB-clear_keys\fR mode.
.IP
clear_locks     do the clear_locks action.
.IP
clear_all       do the clear_all action.
.IP
keystate        have x11vnc print current keystate.
.IP
remap:str       set \fB-remap\fR "str" (empty to disable).
See \fB-remap\fR for the form of "str"
(basically: key1-key2,key3-key4,...)
Use "+key1-key2" to append a single
keymapping, use "-key1-key2" to delete.
.IP
norepeat        enable  \fB-norepeat\fR mode.
.IP
repeat          disable \fB-norepeat\fR mode.
.IP
nofb            enable  \fB-nofb\fR mode.
.IP
fb              disable \fB-nofb\fR mode.
.IP
bell            enable  bell (if supported).
.IP
nobell          disable bell.
.IP
sendbell        ring the bell now.
.IP
nosel           enable  \fB-nosel\fR mode.
.IP
sel             disable \fB-nosel\fR mode.
.IP
noprimary       enable  \fB-noprimary\fR mode.
.IP
primary         disable \fB-noprimary\fR mode.
.IP
nosetprimary    enable  \fB-nosetprimary\fR mode.
.IP
setprimary      disable \fB-nosetprimary\fR mode.
.IP
noclipboard     enable  \fB-noclipboard\fR mode.
.IP
clipboard       disable \fB-noclipboard\fR mode.
.IP
nosetclipboard  enable  \fB-nosetclipboard\fR mode.
.IP
setclipboard    disable \fB-nosetclipboard\fR mode.
.IP
seldir:str      set \fB-seldir\fR to "str"
.IP
resend_cutbuffer resend the most recent CUTBUFFER0 copy
.IP
resend_clipboard resend the most recent CLIPBOARD copy
.IP
resend_primary   resend the most recent PRIMARY copy
.IP
cursor:mode     enable  \fB-cursor\fR "mode".
.IP
show_cursor     enable  showing a cursor.
.IP
noshow_cursor   disable showing a cursor. (same as
"nocursor")
.IP
cursor_drag     enable  cursor changes during drag.
.IP
nocursor_drag   disable cursor changes during drag.
.IP
arrow:n         set \fB-arrow\fR to alternate n.
.IP
xfixes          enable  xfixes cursor shape mode.
.IP
noxfixes        disable xfixes cursor shape mode.
.IP
alphacut:n      set \fB-alphacut\fR to n.
.IP
alphafrac:f     set \fB-alphafrac\fR to f.
.IP
alpharemove     enable  \fB-alpharemove\fR mode.
.IP
noalpharemove   disable \fB-alpharemove\fR mode.
.IP
alphablend      disable \fB-noalphablend\fR mode.
.IP
noalphablend    enable  \fB-noalphablend\fR mode.
.IP
cursorshape     disable \fB-nocursorshape\fR mode.
.IP
nocursorshape   enable  \fB-nocursorshape\fR mode.
.IP
cursorpos       disable \fB-nocursorpos\fR mode.
.IP
nocursorpos     enable  \fB-nocursorpos\fR mode.
.IP
xwarp           enable  \fB-xwarppointer\fR mode.
.IP
noxwarp         disable \fB-xwarppointer\fR mode.
.IP
always_inject   enable  \fB-always_inject\fR mode.
.IP
noalways_inject disable \fB-always_inject\fR mode.
.IP
buttonmap:str   set \fB-buttonmap\fR "str", empty to disable
.IP
dragging        disable \fB-nodragging\fR mode.
.IP
nodragging      enable  \fB-nodragging\fR mode.
.IP
ncache          reenable \fB-ncache\fR mode.
.IP
noncache        disable  \fB-ncache\fR mode.
.IP
ncache_size:n   set \fB-ncache\fR size to n.
.IP
ncache_cr       enable  \fB-ncache_cr\fR mode.
.IP
noncache_cr     disable \fB-ncache_cr\fR mode.
.IP
ncache_no_moveraise     enable  no_moveraise mode.
.IP
noncache_no_moveraise   disable no_moveraise mode.
.IP
ncache_no_dtchange      enable  ncache_no_dtchange mode.
.IP
noncache_no_dtchange    disable ncache_no_dtchange mode.
.IP
ncache_old_wm           enable  ncache_old_wm mode.
.IP
noncache_old_wm         disable ncache_old_wm mode.
.IP
ncache_no_rootpixmap    enable  ncache_no_rootpixmap.
.IP
noncache_no_rootpixmap  disable ncache_no_rootpixmap.
.IP
ncache_reset_rootpixmap recheck the root pixmap, ncrp
.IP
ncache_keep_anims       enable  ncache_keep_anims.
.IP
noncache_keep_anims     disable ncache_keep_anims.
.IP
ncache_pad:n    set \fB-ncache_pad\fR to n.
.IP
wireframe       enable  \fB-wireframe\fR mode. same as "wf"
.IP
nowireframe     disable \fB-wireframe\fR mode. same as "nowf"
.IP
wireframe:str   enable  \fB-wireframe\fR mode string.
.IP
wireframe_mode:str enable  \fB-wireframe\fR mode string.
.IP
wireframelocal  enable  wireframelocal. same as "wfl"
.IP
nowireframe     disable wireframelocal. same as "nowfl"
.IP
wirecopyrect:str set \fB-wirecopyrect\fR string. same as "wcr:"
.IP
scrollcopyrect:str set \fB-scrollcopyrect\fR string. same "scr"
.IP
noscrollcopyrect disable \fB-scrollcopyrect__mode_.\fR "noscr"
.IP
scr_area:n      set \fB-scr_area\fR to n
.IP
scr_skip:list   set \fB-scr_skip\fR to "list"
.IP
scr_inc:list    set \fB-scr_inc\fR to "list"
.IP
scr_keys:list   set \fB-scr_keys\fR to "list"
.IP
scr_term:list   set \fB-scr_term\fR to "list"
.IP
scr_keyrepeat:str set \fB-scr_keyrepeat\fR to "str"
.IP
scr_parms:str   set \fB-scr_parms\fR parameters.
.IP
fixscreen:str   set \fB-fixscreen\fR to "str".
.IP
noxrecord       disable all use of RECORD extension.
.IP
xrecord         enable  use of RECORD extension.
.IP
reset_record    reset RECORD extension (if avail.)
.IP
pointer_mode:n  set \fB-pointer_mode\fR to n. same as "pm"
.IP
input_skip:n    set \fB-input_skip\fR to n.
.IP
allinput        enable  use of \fB-allinput\fR mode.
.IP
noallinput      disable use of \fB-allinput\fR mode.
.IP
input_eagerly   enable  use of \fB-input_eagerly\fR mode.
.IP
noinput_eagerly disable use of \fB-input_eagerly\fR mode.
.IP
ssltimeout:n    set \fB-ssltimeout\fR to n.
.IP
speeds:str      set \fB-speeds\fR to str.
.IP
wmdt:str        set \fB-wmdt\fR to str.
.IP
debug_pointer   enable  \fB-debug_pointer,\fR same as "dp"
.IP
nodebug_pointer disable \fB-debug_pointer,\fR same as "nodp"
.IP
debug_keyboard   enable  \fB-debug_keyboard,\fR same as "dk"
.IP
nodebug_keyboard disable \fB-debug_keyboard,\fR same as "nodk"
.IP
keycode:n       inject keystroke 'keycode' (xmodmap \fB-pk)\fR
.IP
keycode:n,down  inject 'keycode' (down=0,1)
.IP
keysym:str      inject keystroke 'keysym' (number/name)
.IP
keysym:str,down inject 'keysym' (down=0,1)
.IP
ptr:x,y,mask    inject pointer event x, y, button-mask
.IP
fakebuttonevent:button,down direct XTestFakeButtonEvent.
.IP
sleep:t         sleep floating point time t.
.IP
get_xprop:p     get X property named 'p'.
.IP
set_xprop:p:val set X property named 'p' to 'val'.
p -> id=NNN:p for hex/dec window id.
.IP
wininfo:id      get info about X window id.  use 'root'
for root window, use +id for children.
.IP
grab_state      get state of pointer and keyboard grab.
.IP
pointer_pos     print XQueryPointer x,y cursor position.
.IP
pointer_x       print XQueryPointer x cursor position.
.IP
pointer_y       print XQueryPointer y cursor position.
.IP
pointer_same    print XQueryPointer ptr on same screen.
.IP
pointer_root    print XQueryPointer curr ptr rootwin.
.IP
pointer_mask    print XQueryPointer button and mods mask
.IP
mouse_x         print x11vnc's idea of cursor position.
.IP
mouse_y         print x11vnc's idea of cursor position.
.IP
noop            do nothing.
.IP
defer:n         set \fB-defer\fR to n ms,same as deferupdate:n
.IP
wait:n          set \fB-wait\fR to n ms.
.IP
extra_fbur:n    set \fB-extra_fbur\fR to n.
.IP
wait_ui:f       set \fB-wait_ui\fR factor to f.
.IP
setdefer:n      set \fB-setdefer\fR to \fB-2,-1,0,1,\fR or 2.
.IP
wait_bog        disable \fB-nowait_bog\fR mode.
.IP
nowait_bog      enable  \fB-nowait_bog\fR mode.
.IP
slow_fb:f       set \fB-slow_fb\fR to f seconds.
.IP
xrefresh:f      set \fB-xrefresh\fR to f seconds.
.IP
readtimeout:n   set read timeout to n seconds.
.IP
nap             enable  \fB-nap\fR mode.
.IP
nonap           disable \fB-nap\fR mode.
.IP
sb:n            set \fB-sb\fR to n s, same as screen_blank:n
.IP
fbpm            disable \fB-nofbpm\fR mode.
.IP
nofbpm          enable  \fB-nofbpm\fR mode.
.IP
dpms            disable \fB-nodpms\fR mode.
.IP
nodpms          enable  \fB-nodpms\fR mode.
.IP
forcedpms       enable  \fB-forcedpms\fR mode.
.IP
noforcedpms     disable \fB-forcedpms\fR mode.
.IP
clientdpms      enable  \fB-clientdpms\fR mode.
.IP
noclientdpms    disable \fB-clientdpms\fR mode.
.IP
noserverdpms    enable  \fB-noserverdpms\fR mode.
.IP
serverdpms      disable \fB-noserverdpms\fR mode.
.IP
noultraext      enable  \fB-noultraext\fR mode.
.IP
ultraext        disable \fB-noultraext\fR mode.
.IP
chatwindow      enable  local chatwindow mode.
.IP
nochatwindow    disable local chatwindow mode.
.IP
chaton          begin chat using local window.
.IP
chatoff         end   chat using local window.
.IP
xdamage         enable  xdamage polling hints.
.IP
noxdamage       disable xdamage polling hints.
.IP
xd_area:A       set \fB-xd_area\fR max pixel area to "A"
.IP
xd_mem:f        set \fB-xd_mem\fR remembrance to "f"
.IP
fs:frac         set \fB-fs\fR fraction to "frac", e.g. 0.5
.IP
gaps:n          set \fB-gaps\fR to n.
.IP
grow:n          set \fB-grow\fR to n.
.IP
fuzz:n          set \fB-fuzz\fR to n.
.IP
snapfb          enable  \fB-snapfb\fR mode.
.IP
nosnapfb        disable \fB-snapfb\fR mode.
.IP
rawfb:str       set \fB-rawfb\fR mode to "str".
.IP
uinput_accel:f  set uinput_accel to f.
.IP
uinput_thresh:n set uinput_thresh to n.
.IP
uinput_reset:n  set uinput_reset to n ms.
.IP
uinput_always:n set uinput_always to 1/0.
.IP
progressive:n   set LibVNCServer \fB-progressive\fR slice
height parameter to n.
.IP
desktop:str     set \fB-desktop\fR name to str for new clients.
.IP
rfbport:n       set \fB-rfbport\fR to n.
.IP
macnosaver      enable  \fB-macnosaver\fR mode.
.IP
macsaver        disable \fB-macnosaver\fR mode.
.IP
macnowait       enable  \fB-macnowait\fR  mode.
.IP
macwait         disable \fB-macnowait\fR  mode.
.IP
macwheel:n      set \fB-macwheel\fR to n.
.IP
macnoswap       enable  \fB-macnoswap\fR mouse button mode.
.IP
macswap         disable \fB-macnoswap\fR mouse button mode.
.IP
macnoresize     enable  \fB-macnoresize\fR mode.
.IP
macresize       disable \fB-macnoresize\fR mode.
.IP
maciconanim:n   set \fB-maciconanim\fR to n.
.IP
macmenu         enable  \fB-macmenu\fR  mode.
.IP
macnomenu       disable \fB-macmenu\fR  mode.
.IP
macuskbd        enable  \fB-macuskbd\fR mode.
.IP
macnouskbd      disable \fB-macuskbd\fR mode.
.IP
httpport:n      set \fB-httpport\fR to n.
.IP
httpdir:dir     set \fB-httpdir\fR to dir (and enable http).
.IP
enablehttpproxy   enable  \fB-enablehttpproxy\fR mode.
.IP
noenablehttpproxy disable \fB-enablehttpproxy\fR mode.
.IP
alwaysshared     enable  \fB-alwaysshared\fR mode.
.IP
noalwaysshared   disable \fB-alwaysshared\fR mode.
(may interfere with other options)
.IP
nevershared      enable  \fB-nevershared\fR mode.
.IP
nonevershared    disable \fB-nevershared\fR mode.
(may interfere with other options)
.IP
dontdisconnect   enable  \fB-dontdisconnect\fR mode.
.IP
nodontdisconnect disable \fB-dontdisconnect\fR mode.
(may interfere with other options)
.IP
debug_xevents   enable  debugging X events.
.IP
nodebug_xevents disable debugging X events.
.IP
debug_xdamage   enable  debugging X DAMAGE mechanism.
.IP
nodebug_xdamage disable debugging X DAMAGE mechanism.
.IP
debug_wireframe enable   debugging wireframe mechanism.
.IP
nodebug_wireframe disable debugging wireframe mechanism.
.IP
debug_scroll    enable  debugging scrollcopy mechanism.
.IP
nodebug_scroll  disable debugging scrollcopy mechanism.
.IP
debug_tiles     enable  \fB-debug_tiles\fR
.IP
nodebug_tiles   disable \fB-debug_tiles\fR
.IP
debug_grabs     enable  \fB-debug_grabs\fR
.IP
nodebug_grabs   disable \fB-debug_grabs\fR
.IP
debug_sel       enable  \fB-debug_sel\fR
.IP
nodebug_sel     disable \fB-debug_sel\fR
.IP
debug_ncache    enable  \fB-debug_ncache\fR
.IP
nodebug_ncache  disable \fB-debug_ncache\fR
.IP
dbg             enable  \fB-dbg\fR crash shell
.IP
nodbg           disable \fB-dbg\fR crash shell
.IP
.IP
noremote        disable the \fB-remote\fR command processing,
it cannot be turned back on.
.IP
.IP
bcx_xattach:str  This remote control command is for
use with the BARCO xattach program or the x2x program.
Both of these programs are for 'pointer and keyboard'
sharing between separate X displays.  In general the
two displays are usually nearby, e.g. on the same desk,
and this allows the user to share a single pointer and
keyboard between them.  The user moves the mouse to
an edge and then the mouse pointer appears to 'jump'
to the other display screen.  Thus it emulates what a
single X server would do for two screens (e.g. :0.0 and
:0.1) The illusion of a single Xserver with multiple
screens is achieved by forwarding events to the 2nd
one via the XTEST extension.
.IP
What the x11vnc bcx_xattach command does is to perform
some pointer movements to try to INDUCE xattach/x2x
to 'jump' to the other display.  In what follows the
\'master' display refers to the one that when it has
\'focus' it is basically doing nothing besides watching
for the mouse to go over an edge.  The 'slave'
display refers to the one to which the mouse and
keyboard is redirected to once an edge in the master
has been crossed.  Note that the x11vnc executing the
bcx_xattach command MUST be the one connected to the
*master* display.
.IP
Also note that when input is being redirected (via
XTEST) from the master display to the slave display,
the master display's pointer and keyboard are *grabbed*
by xattach/x2x.  x11vnc can use this info to verify that
the master/slave mode change has taken place correctly.
If you specify the "ifneeded" option (see below)
and the initial grab state is that of the desired
final state, then no pointer movements are injected
and "DONE,GRAB_OK" is returned.
.IP
"str" must contain one of "up", "down", "left",
or "right" to indicate the direction of the 'jump'.
"str" must also contain one of "master_to_slave"
or "slave_to_master" to indicate the type of mode
change induced by the jump.  Use "M2S" and "S2M"
as shorter aliases.
.IP
"str" may be a "+" separated list of additional
tuning options.  The "shift=n" option indicates an
offset shift position away from (0,0) (default 20).
"final=x+y" specifies the final position of the cursor
at the end of the normal move sequence; default 30+30.
"extra_move=x+y" means to do one more pointer move
after "final" to x+y.  "dt=n" sets the sleep time
in milliseconds between pointer moves (default: 40ms)
"retry=n" specifies the maximum number of retries if
the grab state change fails. "ifneeded" means to not
apply the pointer movements if the initial grab state is
that of the desired final state. "nograbcheck" means
to not check if the grab state changed as expected and
only apply the pointer movements (default is to check
the grab states.)
.IP
If you do not specify "up", etc., to bcx_xattach
nothing will be attempted and the command returns
the string FAIL,NO_DIRECTION_SPECIFIED.  If you do
not specify "master_to_slave" or "M2S", etc., to
bcx_xattach nothing will be attempted and the command
returns the string FAIL,NO_MODE_CHANGE_SPECIFIED.
.IP
Otherwise, the returned string will contain "DONE".
It will be "DONE,GRAB_OK" if the grab state changed
as expected (or if "ifneeded" was supplied and
the initial grab state was already the desired
one.)  If the initial grab state was incorrect,
but the final grab state was correct then it is
"DONE,GRAB_FAIL_INIT".  If the initial grab state
was correct, but the final grab state was incorrect
then it is "DONE,GRAB_FAIL_FINAL".  If both are
incorrect it will be "DONE,GRAB_FAIL".  Under grab
failure the string will be followed by ":p1,k1-p2,k2"
where  p1,k1 indicates the initial pointer and keyboard
grab states and p2,k2 the final ones. If GRAB_FAIL or
GRAB_FAIL_FINAL occurs, the action will be retried up
to 3 times; trying to reset the state and sleeping a
bit between each try.  Set retry=n to adjust the number
of retries, zero to disable retries.
.IP
Examples:
\fB-R\fR bcx_xattach:down+M2S
\fB-R\fR bcx_xattach:up+S2M
\fB-R\fR bcx_xattach:up+S2M+nograbcheck+dt=30
\fB-R\fR bcx_xattach:down+M2S+extra_move=100+100
.IP
or use \fB-Q\fR instead of \fB-R\fR to retrieve the result text.
.IP
End of the bcx_xattach:str description.
.IP
The 
.IR vncconnect (1)
command from standard VNC
distributions may also be used if string is prefixed
with "cmd=" E.g. 'vncconnect cmd=stop'.  Under some
circumstances 
.IR xprop (1)
can used if it supports \fB-set\fR
(see the FAQ).
.IP
If "\fB-connect\fR \fI/path/to/file\fR" has been supplied to the
running x11vnc server then that file can be used as a
communication channel (this is the only way to remote
control one of many x11vnc's polling the same X display)
Simply run: 'x11vnc \fB-connect\fR /path/to/file \fB-remote\fR ...'
or you can directly write to the file via something
like: "echo cmd=stop > /path/to/file", etc.
.PP
\fB-query\fR \fIvariable\fR
.IP
Like \fB-remote,\fR except just query the value of
\fIvariable\fR.  "\fB-Q\fR" is an alias for "\fB-query\fR".
Multiple queries can be done by separating variables
by commas, e.g. \fB-query\fR var1,var2. The results come
back in the form ans=var1:value1,ans=var2:value2,...
to the standard output.  If a variable is read-only,
it comes back with prefix "aro=" instead of "ans=".
.IP
Some \fB-remote\fR commands are pure actions that do not make
sense as variables, e.g. "stop" or "disconnect", in
these cases the value returned is "N/A".  To direct a
query straight to the X11VNC_REMOTE property or connect
file use "qry=..." instead of "cmd=..."
.IP
ans= stop quit exit shutdown ping resend_cutbuffer
resend_clipboard resend_primary blacken zero refresh
reset close disconnect id_cmd id sid waitmapped
nowaitmapped clip flashcmap noflashcmap shiftcmap
truecolor notruecolor overlay nooverlay overlay_cursor
overlay_yescursor nooverlay_nocursor nooverlay_cursor
nooverlay_yescursor overlay_nocursor 8to24 no8to24
8to24_opts 24to32 no24to32 visual scale scale_cursor
viewonly noviewonly shared noshared forever noforever
once timeout tightfilexfer notightfilexfer ultrafilexfer
noultrafilexfer rfbversion deny lock nodeny unlock avahi
mdns zeroconf noavahi nomdns nozeroconf connect proxy
allowonce allow noipv6 ipv6 noipv4 ipv4 no6 6 localhost
nolocalhost listen lookup nolookup accept afteraccept
gone shm noshm flipbyteorder noflipbyteorder onetile
noonetile solid_color solid nosolid blackout xinerama
noxinerama xtrap noxtrap xrandr noxrandr xrandr_mode
rotate padgeom quiet q noquiet modtweak nomodtweak xkb
noxkb capslock nocapslock skip_lockkeys noskip_lockkeys
skip_keycodes sloppy_keys nosloppy_keys skip_dups
noskip_dups add_keysyms noadd_keysyms clear_mods
noclear_mods clear_keys noclear_keys clear_all
clear_locks keystate remap repeat norepeat fb nofb bell
nobell sendbell sel nosel primary noprimary setprimary
nosetprimary clipboard noclipboard setclipboard
nosetclipboard seldir cursorshape nocursorshape
cursorpos nocursorpos cursor_drag nocursor_drag cursor
show_cursor noshow_cursor nocursor arrow xfixes noxfixes
xdamage noxdamage xd_area xd_mem alphacut alphafrac
alpharemove noalpharemove alphablend noalphablend
xwarppointer xwarp noxwarppointer noxwarp always_inject
noalways_inject buttonmap dragging nodragging ncache_cr
noncache_cr ncache_no_moveraise noncache_no_moveraise
ncache_no_dtchange noncache_no_dtchange
ncache_no_rootpixmap noncache_no_rootpixmap
ncache_reset_rootpixmap ncrp ncache_keep_anims
noncache_keep_anims ncache_old_wm noncache_old_wm
ncache_pad ncache noncache ncache_size debug_ncache
nodebug_ncache wireframe_mode wireframe wf nowireframe
nowf wireframelocal wfl nowireframelocal nowfl
wirecopyrect wcr nowirecopyrect nowcr scr_area
scr_skip scr_inc scr_keys scr_term scr_keyrepeat
scr_parms scrollcopyrect scr noscrollcopyrect
noscr fixscreen noxrecord xrecord reset_record
pointer_mode pm input_skip allinput noallinput
input_eagerly noinput_eagerly input grabkbd nograbkbd
grabptr nograbptr grabalways nograbalways grablocal
client_input ssltimeout speeds wmdt debug_pointer dp
nodebug_pointer nodp debug_keyboard dk nodebug_keyboard
nodk keycode keysym ptr fakebuttonevent sleep get_xprop
set_xprop wininfo bcx_xattach deferupdate defer
setdefer extra_fbur wait_ui wait_bog nowait_bog
slow_fb xrefresh wait readtimeout nap nonap sb
screen_blank fbpm nofbpm dpms nodpms clientdpms
noclientdpms forcedpms noforcedpms noserverdpms
serverdpms noultraext ultraext chatwindow nochatwindow
chaton chatoff fs gaps grow fuzz snapfb nosnapfb
rawfb uinput_accel uinput_thresh uinput_reset
uinput_always progressive rfbport http nohttp httpport
httpdir enablehttpproxy noenablehttpproxy alwaysshared
noalwaysshared nevershared noalwaysshared dontdisconnect
nodontdisconnect desktop debug_xevents nodebug_xevents
debug_xevents debug_xdamage nodebug_xdamage
debug_xdamage debug_wireframe nodebug_wireframe
debug_wireframe debug_scroll nodebug_scroll debug_scroll
debug_tiles dbt nodebug_tiles nodbt debug_tiles
debug_grabs nodebug_grabs debug_sel nodebug_sel dbg
nodbg macnosaver macsaver nomacnosaver macnowait macwait
nomacnowait macwheel macnoswap macswap nomacnoswap
macnoresize macresize nomacnoresize maciconanim macmenu
macnomenu nomacmenu macuskbd nomacuskbd noremote
.IP
aro=  noop display vncdisplay icon_mode autoport
loop loopbg desktopname guess_desktop guess_dbus
http_url auth xauth users rootshift clipshift scale_str
scaled_x scaled_y scale_numer scale_denom scale_fac_x
scale_fac_y scaling_blend scaling_nomult4 scaling_pad
scaling_interpolate inetd privremote unsafe safer nocmds
passwdfile unixpw unixpw_nis unixpw_list ssl ssl_pem
sslverify stunnel stunnel_pem https httpsredir usepw
using_shm logfile o flag rmflag rc norc h help V version
lastmod bg sigpipe threads readrate netrate netlatency
pipeinput clients client_count pid ext_xtest ext_xtrap
ext_xrecord ext_xkb ext_xshm ext_xinerama ext_overlay
ext_xfixes ext_xdamage ext_xrandr rootwin num_buttons
button_mask mouse_x mouse_y grab_state pointer_pos
pointer_x pointer_y pointer_same pointer_root
pointer_mask bpp depth indexed_color dpy_x dpy_y wdpy_x
wdpy_y off_x off_y cdpy_x cdpy_y coff_x coff_y rfbauth
passwd viewpasswd
.PP
\fB-QD\fR \fIvariable\fR
.IP
Just like \fB-query\fR variable, but returns the default
value for that parameter (no running x11vnc server
is consulted)
.PP
\fB-sync\fR
.IP
By default \fB-remote\fR commands are run asynchronously, that
is, the request is posted and the program immediately
exits.  Use \fB-sync\fR to have the program wait for an
acknowledgement from the x11vnc server that command was
processed (somehow).  On the other hand \fB-query\fR requests
are always processed synchronously because they have
to wait for the answer.
.IP
Also note that if both \fB-remote\fR and \fB-query\fR requests are
supplied on the command line, the \fB-remote\fR is processed
first (synchronously: no need for \fB-sync),\fR and then
the \fB-query\fR request is processed in the normal way.
This allows for a reliable way to see if the \fB-remote\fR
command was processed by querying for any new settings.
Note however that there is timeout of a few seconds
(see the next paragraph) so if the x11vnc takes longer
than that to process the requests the requester will
think that a failure has taken place.
.IP
The default is to wait 3.5 seconds.  Or if cmd=stop
only 1.0 seconds.  If cmd matches 'script:' then it
will wait up to 10.0 seconds.  Set X11VNC_SYNC_TIMEOUT
to the number of seconds you want it to wait.
.PP
\fB-query_retries\fR \fIstr\fR
.IP
If a query fails to get a response from an x11vnc
server, retry up to n times.  \fIstr\fR is specified as
n[:t][/match]  Optionally the delay between tries may
be specified by "t" a floating point time (default
0.5 seconds.)  Note: the response is not checked for
validity or whether it corresponds to the query sent.
The query "ping:mystring" may be used to help uniquely
identify the query.  Optionally, a matching string after
a "/" will be used to check the result text.  Up to
n retries will take place until the matching string is
found in the output text.  If the match string is never
found the program's exit code is 1; if the match is
found it exits with 0.  Note that there may be stdout
printed for each retry (i.e. multiple lines printed
out to stdout.)
Example: \fB-query_retries\fR 4:1.5/grab_state
.PP
\fB-remote_prefix\fR \fIstr\fR
.IP
Enable a remote-control communication channel for
connected VNC clients.  str is a non-empty string. If a
VNC client sends rfbCutText having the prefix \fIstr\fR
then the part after it is processed as though it were
sent via 'x11vnc \fB-remote\fR ...'.  If it begins with
neither 'cmd=' nor 'qry=' then 'qry=' is assumed.
Any corresponding output text for that remote control
command is sent back to all client as rfbCutText.
The returned output is also prefixed with \fIstr\fR.
Example: \fB-remote_prefix\fR DO_THIS:
.IP
Note that enabling \fB-remote_prefix\fR allows the remote
VNC viewers to run x11vnc \fB-remote\fR commands.  Do not
use this option if they are not to be trusted.
.PP
\fB-noremote,\fR \fB-yesremote\fR
.IP
Do not process any remote control commands or queries.
Do process remote control commands or queries.
Default: \fB-yesremote\fR
.IP
A note about security wrt remote control commands.
If someone can connect to the X display and change
the property X11VNC_REMOTE, then they can remotely
control x11vnc.  Normally access to the X display is
protected.  Note that if they can modify X11VNC_REMOTE
on the X server, they have enough permissions to also
run their own x11vnc and thus have complete control
of the desktop.  If the  "\fB-connect\fR \fI/path/to/file\fR"
channel is being used, obviously anyone who can write
to /path/to/file can remotely control x11vnc.  So be
sure to protect the X display and that file's write
permissions.  See \fB-privremote\fR below.
.IP
If you are paranoid and do not think \fB-noremote\fR is
enough, to disable the X11VNC_REMOTE property channel
completely use \fB-novncconnect,\fR or use the \fB-safer\fR option
that shuts many things off.
.PP
\fB-unsafe\fR
.IP
A few remote commands are disabled by default
(currently: id:pick, accept:<cmd>, gone:<cmd>, and
rawfb:setup:<cmd>) because they are associated with
running external programs.  If you specify \fB-unsafe,\fR then
these remote-control commands are allowed.  Note that
you can still specify these parameters on the command
line, they just cannot be invoked via remote-control.
.PP
\fB-safer\fR
.IP
Equivalent to: \fB-novncconnect\fR \fB-noremote\fR and prohibiting
\fB-gui\fR and the \fB-connect\fR file. Shuts off communcation
channels.
.PP
\fB-privremote\fR
.IP
Perform some sanity checks and disable remote-control
commands if it appears that the X DISPLAY and/or
connectfile can be accessed by other users.  Once
remote-control is disabled it cannot be turned back on.
.PP
\fB-nocmds\fR
.IP
No external commands (e.g. 
.IR system (3)
, 
.IR popen (3)
, 
.IR exec (3)
)
will be run at all.
.PP
\fB-allowedcmds\fR \fIlist\fR
.IP
\fIlist\fR contains a comma separated list of the only
external commands that can be run.  The full list of
associated options is:
.IP
stunnel, ssl, unixpw, WAIT, zeroconf, id, accept,
afteraccept, gone, pipeinput, v4l-info, rawfb-setup,
dt, gui, ssh, storepasswd, passwdfile, custom_passwd,
findauth, crash.
.IP
See each option's help to learn the associated external
command.  Note that the \fB-nocmds\fR option takes precedence
and disables all external commands.
.PP
\fB-deny_all\fR
.IP
For use with \fB-remote\fR nodeny: start out denying all
incoming clients until "\fB-remote\fR \fInodeny\fR" is used to
let them in.
.PP
These options are passed to LibVNCServer:
.PP
\fB-rfbport\fR \fIport\fR
.IP
TCP port for RFB protocol
.PP
\fB-rfbwait\fR \fItime\fR
.IP
max time in ms to wait for RFB client
.PP
\fB-rfbauth\fR \fIpasswd-file\fR
.IP
use authentication on RFB protocol
(use 'x11vnc \fB-storepasswd\fR pass file' to create a password file)
.PP
\fB-rfbversion\fR \fI3.x\fR
.IP
Set the version of the RFB we choose to advertise
.PP
\fB-permitfiletransfer\fR
.IP
permit file transfer support
.PP
\fB-passwd\fR \fIplain-password\fR
.IP
use authentication
(use plain-password as password, USE AT YOUR RISK)
.PP
\fB-deferupdate\fR \fItime\fR
.IP
time in ms to defer updates (default 40)
.PP
\fB-deferptrupdate\fR \fItime\fR
.IP
time in ms to defer pointer updates (default none)
.PP
\fB-desktop\fR \fIname\fR
.IP
VNC desktop name (default "LibVNCServer")
.PP
\fB-alwaysshared\fR
.IP
always treat new clients as shared
.PP
\fB-nevershared\fR
.IP
never treat new clients as shared
.PP
\fB-dontdisconnect\fR
.IP
don't disconnect existing clients when a new non-shared
connection comes in (refuse new connection instead)
.PP
\fB-httpdir\fR \fIdir-path\fR
.IP
enable http server using dir-path home
.PP
\fB-httpport\fR \fIportnum\fR
.IP
use portnum for http connection
.PP
\fB-enablehttpproxy\fR
.IP
enable http proxy support
.PP
\fB-progressive\fR \fIheight\fR
.IP
enable progressive updating for slow links
.PP
\fB-listen\fR \fIipaddr\fR
.IP
listen for connections only on network interface with
addr ipaddr. '-listen localhost' and hostname work too.
.PP
libvncserver-tight-extension options:
.PP
\fB-disablefiletransfer\fR
.IP
disable file transfer
.PP
\fB-ftproot\fR \fIstring\fR
.IP
set ftp root
.SH "FILES"
.IR $HOME/.x11vncrc ,
.IR $HOME/.Xauthority
.SH "ENVIRONMENT"
.IR DISPLAY ,
.IR XAUTHORITY ,
.IR HOME
.PP
The following are set for the auxiliary commands
run by \fB-accept\fR, \fB-gone\fR and other cases:
.PP
.IR RFB_CLIENT_IP ,
.IR RFB_CLIENT_PORT ,
.IR RFB_SERVER_IP ,
.IR RFB_SERVER_PORT ,
.IR RFB_X11VNC_PID ,
.IR RFB_CLIENT_ID ,
.IR RFB_CLIENT_COUNT ,
.IR RFB_MODE
.IR RFB_STATE
.IR RFB_LOGIN_VIEWONLY
.IR RFB_LOGIN_TIME
.IR RFB_CURRENT_TIME
.IR RFB_USERNAME
.IR RFB_SSL_CLIENT_CERT
.SH "SEE ALSO"
.IR vncviewer (1),
.IR vncpasswd (1),
.IR vncconnect (1),
.IR vncserver (1),
.IR Xvnc (1),
.IR xev (1),
.IR xdpyinfo (1),
.IR xwininfo (1),
.IR xprop (1),
.IR xmodmap (1),
.IR xrandr (1),
.IR Xserver (1),
.IR xauth (1),
.IR xhost (1),
.IR Xsecurity (7),
.IR xmessage (1),
.IR XGetImage (3X11),
.IR ipcrm (1),
.IR inetd (1),
.IR xdm (1),
.IR gdm (1),
.IR kdm (1),
.IR ssh (1),
.IR stunnel (8),
.IR su (1),
.IR http://www.tightvnc.com ,
.IR http://www.realvnc.com ,
.IR http://www.karlrunge.com/x11vnc/ ,
.IR http://www.karlrunge.com/x11vnc/#faq
.SH AUTHORS
x11vnc was written by Karl J. Runge <runge@karlrunge.com>,
it is part of the LibVNCServer project <http://sf.net/projects/libvncserver>.
This manual page is based one the one written by Ludovic Drolez
<ldrolez@debian.org>, for the Debian project (both may be used by others).
