1
2 Copyright (C) 2002-2010 Karl J. Runge <runge (a] karlrunge.com>
3 All rights reserved.
4
5 x11vnc README file Date: Mon Dec 27 20:58:57 EST 2010
6
7 The following information is taken from these URLs:
8
9 http://www.karlrunge.com/x11vnc/index.html
10 http://www.karlrunge.com/x11vnc/x11vnc_opts.html
11 ...
12
13 they contain the most up to date info.
14
15
16 =======================================================================
17 http://www.karlrunge.com/x11vnc/index.html:
18
19
20 _________________________________________________________________
21
22 x11vnc: a VNC server for real X displays
23 (to FAQ) (to Downloads) (to Building) (to Beta Test)
24 (to Donations) [PayPal]
25
26 x11vnc allows one to view remotely and interact with real X displays
27 (i.e. a display corresponding to a physical monitor, keyboard, and
28 mouse) with any VNC viewer. In this way it plays the role for Unix/X11
29 that WinVNC plays for Windows.
30
31 It has built-in SSL/TLS encryption and 2048 bit RSA authentication,
32 including VeNCrypt support; UNIX account and password login support;
33 server-side scaling; single port HTTPS/HTTP+VNC; Zeroconf service
34 advertising; and TightVNC and UltraVNC file-transfer. It has also been
35 extended to work with non-X devices: natively on Mac OS X Aqua/Quartz,
36 webcams and TV tuner capture devices, and embedded Linux systems such
37 as Qtopia Core. Full IPv6 support is provided. More features are
38 described here.
39
40 It also provides an encrypted Terminal Services mode (-create, -svc,
41 or -xdmsvc options) based on Unix usernames and Unix passwords where
42 the user does not need to memorize his VNC display/port number.
43 Normally a virtual X session (Xvfb) is created for each user, but it
44 also works with X sessions on physical hardware. See the tsvnc
45 terminal services mode of the SSVNC viewer for one way to take
46 advantage of this mode.
47
48 I wrote x11vnc back in 2002 because x0rfbserver was basically
49 impossible to build on Solaris and had poor performance. The primary
50 x0rfbserver build problems centered around esoteric C++ toolkits.
51 x11vnc is written in plain C and needs only standard libraries and so
52 should work on nearly all Unixes, even very old ones. I also created
53 enhancements to improve the interactive response, added many features,
54 and etc.
55
56 This page including the FAQ contains much information [*]; solutions
57 to many problems; and interesting applications, but nevertheless
58 please feel free to contact me if you have problems or questions (and
59 if I save you time or expense by giving you some of my time, please
60 consider a PayPal Donation.) Do check the FAQ and this page first; I
61 realize the pages are massive, but you can often use your browser's
62 find-in-page search action using a keyword to find the answer to your
63 problem or question.
64
65 SSVNC: An x11vnc side-project provides an Enhanced TightVNC Viewer
66 package (SSVNC) for Unix, Windows, and Mac OS X with automatic SSL
67 and/or SSH tunnelling support, SSL Certificate creation, Saved
68 connection profiles, Zeroconf, VeNCrypt, and built-in Proxy support.
69 Added features for the TightVNC Unix viewer: NewFBSize, ZRLE encoding,
70 Viewer-side Scaling, cursor alphablending, low color modes, and
71 enhanced popup menu; UltraVNC extensions support for: File Transfer,
72 Text Chat, Single Window, Server Input, and 1/n Scaling extensions,
73 and UltraVNC DSM encryption. The SSVNC bundle could be placed on, say,
74 a USB memory stick for SSL/SSH VNC viewing from nearly any networked
75 computer.
76
77 _________________________________________________________________
78
79 Announcements:
80
81 Important: If you created any permanent SSL certificates (e.g. via
82 "x11vnc -ssl SAVE ...") on a Debian or Ubuntu system from Sept. 2006
83 through May 2008, then those keys are likely extremely weak and can be
84 easily cracked. The certificate files should be deleted and recreated
85 on a non-Debian system or an updated one. See
86 http://www.debian.org/security/2008/dsa-1571 for details. The same
87 applies to SSH keys (not used by x11vnc directly, but many people use
88 SSH tunnels for VNC access.)
89
90 FAQ moved: The huge FAQ has finally been moved to its own page. If you
91 are trying to follow someone's link to an FAQ once on this page it is
92 now a broken link. Try inserting the string "faq.html", e.g.:
93 from: http://www.karlrunge.com/x11vnc/#faq-singleclick
94 to: http://www.karlrunge.com/x11vnc/faq.html#faq-singleclick
95
96 Apologies for the inconvenience, unfortunately it is not possible to
97 automatically redirect to the new page since the '#' anchor is not
98 sent to the webserver.
99
100 _________________________________________________________________
101
102 Background:
103
104 VNC (Virtual Network Computing) is a very useful network graphics
105 protocol (applications running on one computer but displaying their
106 windows on another) in the spirit of X, however, unlike X, the
107 viewing-end is very simple and maintains no state. It is a remote
108 framebuffer (RFB) protocol.
109
110 Some VNC links:
111 * http://www.realvnc.com
112 * http://www.tightvnc.com
113 * http://www.ultravnc.com/
114 * http://www.testplant.com/products/vine_server/OS_X
115
116 For Unix, the traditional VNC implementation includes a "virtual" X11
117 server Xvnc (usually launched via the vncserver command) that is not
118 associated with a physical display, but provides a "fake" one X11
119 clients (xterm, firefox, etc.) can attach to. A remote user then
120 connects to Xvnc via the VNC client vncviewer from anywhere on the
121 network to view and interact with the whole virtual X11 desktop.
122
123 The VNC protocol is in most cases better suited for remote connections
124 with low bandwidth and high latency than is the X11 protocol because
125 it involves far fewer "roundtrips" (an exception is the cached pixmap
126 data on the viewing-end provided by X.) Also, with no state maintained
127 the viewing-end can crash, be rebooted, or relocated and the
128 applications and desktop continue running. Not so with X11.
129
130 So the standard Xvnc/vncserver program is very useful, I use it for
131 things like:
132 * Desktop conferencing with other users (e.g. code reviews.)
133 * Long running apps/tasks I want to be able to view from many places
134 (e.g. from home and work.)
135 * Motif, GNOME, and similar applications that would yield very poor
136 performance over a high latency link.
137
138 However, sometimes one wants to connect to a real X11 display (i.e.
139 one attached to a physical monitor, keyboard, and mouse: a Workstation
140 or a SunRay session) from far away. Maybe you want to close down an
141 application cleanly rather than using kill, or want to work a bit in
142 an already running application, or would like to help a distant
143 colleague solve a problem with their desktop, or would just like to
144 work out on the deck for a while. This is where x11vnc is useful.
145 _________________________________________________________________
146
147 How to use x11vnc:
148
149 In this basic example let's assume the remote machine with the X
150 display you wish to view is "far-away.east:0" and the workstation you
151 are presently working at is "sitting-here.west".
152
153 Step 0. Download x11vnc (see below) and have it available to run on
154 far-away.east (on some linux distros it is as easy as "apt-get install
155 x11vnc", "emerge x11vnc", etc.) Similarly, have a VNC viewer (e.g.
156 vncviewer) ready to run on sitting-here.west. We recommend TightVNC
157 Viewers (see also our SSVNC viewer.)
158
159 Step 1. By some means log in to far-away.east and get a command shell
160 running there. You can use ssh, or even rlogin, telnet, or any other
161 method to do this. We do this because the x11vnc process needs to be
162 run on the same machine the X server process is running on (otherwise
163 things would be extremely slow.)
164
165 Step 2. In that far-away.east shell (with command prompt "far-away>"
166 in this example) run x11vnc directed at the far-away.east X session
167 display:
168
169 far-away> x11vnc -display :0
170
171 You could have also set the environment variable DISPLAY=:0 instead of
172 using "-display :0". This step attaches x11vnc to the far-away.east:0
173 X display (i.e. no viewer clients yet.)
174
175 Common Gotcha: To get X11 permissions right, you may also need to set
176 the XAUTHORITY environment variable (or use the -auth option) to point
177 to the correct MIT-MAGIC-COOKIE file (e.g. /home/joe/.Xauthority.) If
178 x11vnc does not have the authority to connect to the display it exits
179 immediately. More on how to fix this below.
180
181 If you suspect an X11 permissions problem do this simple test: while
182 sitting at the physical X display open a terminal window
183 (gnome-terminal, xterm, etc.) You should be able to run x11vnc
184 successfully in that terminal without any need for command line
185 options. If that works OK then you know X11 permissions are the only
186 thing preventing it from working when you try to start x11vnc via a
187 remote shell. Then fix this with the tips below.
188
189 Note as of Feb/2007 you can also try the -find option instead of
190 "-display ..." and see if that finds your display and Xauthority. Note
191 as of Dec/2009 the -findauth and "-auth guess" options may be helpful
192 as well.
193 (End of Common Gotcha)
194
195 When x11vnc starts up there will then be much chatter printed out (use
196 "-q" to quiet it), until it finally says something like:
197 .
198 .
199 13/05/2004 14:59:54 Autoprobing selected port 5900
200 13/05/2004 14:59:54 screen setup finished.
201 13/05/2004 14:59:54
202 13/05/2004 14:59:54 The VNC desktop is far-away:0
203 PORT=5900
204
205 which means all is OK, and we are ready for the final step.
206
207 Step 3. At the place where you are sitting (sitting-here.west in this
208 example) you now want to run a VNC viewer program. There are VNC
209 viewers for Unix, Windows, MacOS, Java-enabled web browsers, and even
210 for PDA's like the Palm Pilot and Cell Phones! You can use any of them
211 to connect to x11vnc (see the above VNC links under "Background:" on
212 how to obtain a viewer for your platform or see this FAQ. For Solaris,
213 vncviewer is available in the Companion CD package SFWvnc.)
214
215 In this example we'll use the Unix vncviewer program on sitting-here
216 by typing the following command in a second terminal window:
217
218 sitting-here> vncviewer far-away.east:0
219
220 That should pop up a viewer window on sitting-here.west showing and
221 allowing interaction with the far-away.east:0 X11 desktop. Pretty
222 nifty! When finished, exit the viewer: the remote x11vnc process will
223 shutdown automatically (or you can use the -forever option to have it
224 wait for additional viewer connections.)
225
226 Common Gotcha: Nowadays there will likely be a host-level firewall on
227 the x11vnc side that is blocking remote access to the VNC port (e.g.
228 5900.) You will either have to open up that port (or a range of ports)
229 in your firewall administration tool, or try the SSH tunnelling method
230 below (even still the firewall must allow in the SSH port, 22.)
231
232
233 Shortcut: Of course if you left x11vnc running on far-away.east:0 in a
234 terminal window with the -forever option or as a service, you'd only
235 have to do Step 3 as you moved around. Be sure to use a VNC Password
236 or other measures if you do that.
237
238
239 Super Shortcut: Here is a potentially very easy way to get all of it
240 working.
241 * Have x11vnc (0.9.3 or later) available to run on the remote host
242 (i.e. in $PATH.)
243 * Download and unpack a SSVNC bundle (1.0.19 or later, e.g.
244 ssvnc_no_windows-1.0.28.tar.gz) on the Viewer-side machine.
245 * Start the SSVNC Terminal Services mode GUI: ./ssvnc/bin/tsvnc
246 * Enter your remote username@hostname (e.g. fred (a] far-away.east) in
247 the "VNC Terminal Server" entry.
248 * Click "Connect".
249
250 That will do an SSH to username@hostname and start up x11vnc and then
251 connect a VNC Viewer through the SSH encrypted tunnel.
252
253 There are a number of things assumed here, first that you are able to
254 SSH into the remote host; i.e. that you have a Unix account there and
255 the SSH server is running. On Unix and MacOS X it is assumed that the
256 ssh client command is available on the local machine (on Windows a
257 plink binary is included in the SSVNC bundle.) Finally, it is assumed
258 that you are already logged into an X session on the remote machine,
259 e.g. your workstation (otherwise, a virtual X server, e.g. Xvfb, will
260 be started for you.)
261
262 In some cases the remote SSH server will not run commands with the
263 same $PATH that you normally have in your shell there. In this case
264 click on Options -> Advanced -> X11VNC Options, and type in the
265 location of the x11vnc binary under "Full Path". (End of Super
266 Shortcut)
267
268
269 Desktop Sharing: The above more or less assumed nobody was sitting at
270 the workstation display "far-away.east:0". This is often the case: a
271 user wants to access her workstation remotely. Another usage pattern
272 has the user sitting at "far-away.east:0" and invites one or more
273 other people to view and interact with his desktop. Perhaps the user
274 gives a demo or presentation this way (using the telephone for vocal
275 communication.) A "Remote Help Desk" mode would be similar: a
276 technician connects remotely to the user's desktop to interactively
277 solve a problem the user is having.
278
279 For these cases it should be obvious how it is done. The above steps
280 will work, but more easily the user sitting at far-away.east:0 simply
281 starts up x11vnc from a terminal window, after which the guests would
282 start their VNC viewers. For this usage mode the "-connect
283 host1,host2" option may be of use to automatically connect to the
284 vncviewers in "-listen" mode on the list of hosts.
285 _________________________________________________________________
286
287 Tunnelling x11vnc via SSH:
288
289 The above example had no security or privacy at all. When logging into
290 remote machines (certainly when going over the internet) it is best to
291 use ssh, or use a VPN (for a VPN, Virtual Private Network, the above
292 example should be pretty safe.)
293
294 For x11vnc one can tunnel the VNC protocol through an encrypted ssh
295 channel. It would look something like running the following commands:
296 sitting-here> ssh -t -L 5900:localhost:5900 far-away.east 'x11vnc -localhost
297 -display :0'
298
299 (you will likely have to provide passwords/passphrases to login from
300 sitting-here into your far-away.east Unix account; we assume you have
301 a login account on far-away.east and it is running the SSH server)
302
303 And then in another terminal window on sitting-here run the command:
304 sitting-here> vncviewer -encodings "copyrect tight zrle hextile" localhost:0
305
306 Note: The -encodings option is very important: vncviewer will often
307 default to "raw" encoding if it thinks the connection is to the local
308 machine, and so vncviewer gets tricked this way by the ssh
309 redirection. "raw" encoding will be extremely slow over a networked
310 link, so you need to force the issue with -encodings "copyrect tight
311 ...". Nowadays, not all viewers use the -encodings option, try
312 "-PreferredEncoding=ZRLE" (although the newer viewers seem to
313 autodetect well when to use raw or not.)
314
315 Note that "x11vnc -localhost ..." limits incoming vncviewer
316 connections to only those from the same machine. This is very natural
317 for ssh tunnelling (the redirection appears to come from the same
318 machine.) Use of a VNC password is also strongly recommended.
319
320 Note also the -t we used above (force allocate pseudoterminal), it
321 actually seems to improve interactive typing response via VNC!
322
323 You may want to add the -C option to ssh to enable compression. The
324 VNC compression is not perfect, and so this may help a bit. However,
325 over a fast LAN you probably don't want to enable SSH compression
326 because it can slow things down. Try both and see which is faster.
327
328 If your username is different on the remote machine use something
329 like: "fred (a] far-away.east" in the above ssh command line.
330
331 Some VNC viewers will do the ssh tunnelling for you automatically, the
332 TightVNC Unix vncviewer does this when the "-via far-away.east" option
333 is supplied to it (this requires x11vnc to be already running on
334 far-away.east or having it started by inetd(8).) See the 3rd script
335 example below for more info.
336
337 SSVNC: You may also want to look at the Enhanced TightVNC Viewer
338 (ssvnc) bundles because they contain scripts and GUIs to automatically
339 set up SSH tunnels (e.g. the GUI, "ssvnc", does it automatically and
340 so does this command: "ssvnc_cmd -ssh user (a] far-away.east:0") and can
341 even start up x11vnc as well.
342
343 The Terminal Services mode of SSVNC is perhaps the easiest way to use
344 x11vnc. You just need to have x11vnc available in $PATH on the remote
345 side (and can SSH to the host), and then on the viewer-side you type
346 something like:
347 tsvnc fred (a] far-away.east
348
349 everything else is done automatically for you. Normally this will
350 start a virtual Terminal Services X session (RAM-only), but if you
351 already have a real X session up on the physical hardware it will find
352 that one for you.
353
354 Gateways: If the machine you SSH into is not the same machine with
355 the X display you wish to view (e.g. your company provides incoming
356 SSH access to a gateway machine), then you need to change the above
357 to, e.g.: "-L 5900:OtherHost:5900":
358 sitting-here> ssh -t -L 5900:OtherHost:5900 gateway.east
359
360 Where gateway.east is the internet hostname (or IP) of the gateway
361 machine (SSH server.) 'OtherHost' might be, e.g., freds-pc or
362 192.168.2.33 (it is OK for these to be private hostnames or private IP
363 addresses, the host in -L is relative to the remote server side.)
364
365 Once logged in, you'll need to do a second login (ssh, rsh, etc.) to
366 the workstation machine 'OtherHost' and then start up x11vnc on it (if
367 it isn't already running.) (The "-connect gateway:59xx" option may be
368 another alternative here with the viewer already in -listen mode.) For
369 an automatic way to use a gateway and have all the network traffic
370 encrypted (including inside the firewall) see Chaining SSH's.
371
372 These gateway access modes also can be done automatically for you via
373 the "Proxy/Gateway" setting in SSVNC (including the Chaining SSH's
374 case, "Double Proxy".)
375
376 Firewalls/Routers:
377
378 A lot of people have inexpensive devices for home or office that act
379 as a Firewall and Router to the machines inside on a private LAN. One
380 can usually configure the Firewall/Router from inside the LAN via a
381 web browser.
382
383 Often having a Firewall/Router sitting between the vncviewer and
384 x11vnc will make it impossible for the viewer to connect to x11vnc.
385
386 One thing that can be done is to redirect a port on the
387 Firewall/Router to, say, the SSH port (22) on an inside machine (how
388 to do this depends on your particular Firewall/Router, often the
389 router config URL is http://192.168.100.1 See www.portforward.com for
390 more info.) This way you reach these computers from anywhere on the
391 Internet and use x11vnc to view X sessions running on them.
392
393 Suppose you configured the Firewall/Router to redirect these ports to
394 two internal machines:
395 Port 12300 -> 192.168.1.3, Port 22 (SSH)
396 Port 12301 -> 192.168.1.4, Port 22 (SSH)
397
398 (where 192.168.1.3 is "jills-pc" and 192.168.1.4 is "freds-pc".) Then
399 the ssh's would look something like:
400 sitting-here> ssh -t -p 12300 -L 5900:localhost:5900 jill (a] far-away.east 'x11v
401 nc -localhost -display :0'
402 sitting-here> ssh -t -p 12301 -L 5900:localhost:5900 fred (a] far-away.east 'x11v
403 nc -localhost -display :0'
404
405 Where far-away.east means the hostname (or IP) that the
406 Router/Firewall is using (for home setups this is usually the IP
407 gotten from your ISP via DHCP, the site http://www.whatismyip.com/ is
408 a convenient way to determine what it is.)
409
410 It is a good idea to add some obscurity to accessing your system via
411 SSH by using some high random port (e.g. 12300 in the above example.)
412 If you can't remember it, or are otherwise not worried about port
413 scanners detecting the presence of your SSH server and there is just
414 one internal PC involved you could map 22:
415 Port 22 -> 192.168.1.3, Port 22 (SSH)
416
417 Again, this SSH gateway access can be done automatically for you via
418 the "Proxy/Gateway" setting in SSVNC. And under the "Remote SSH
419 Command" setting you can enter the x11vnc -localhost -display :0.
420
421 Host-Level-Firewalls: even with the hardware Firewall/Router problem
422 solved via a port redirection, most PC systems have their own Host
423 level "firewalls" enabled to protect users from themselves. I.e. the
424 system itself blocks all incoming connections. So you will need to see
425 what is needed to configure it to allow in the port (e.g. 22) that you
426 desire. E.g. Yast, Firestarter, iptables(1), etc..
427
428 VNC Ports and Firewalls: The above discussion was for configuring the
429 Firewall/Router to let in port 22 (SSH), but the same thing can be
430 done for the default VNC port 5900:
431 Port 5900 -> 192.168.1.3, Port 5900 (VNC)
432 Port 5901 -> 192.168.1.4, Port 5900 (VNC)
433
434 (where 192.168.1.3 is "jills-pc" and 192.168.1.4 is "freds-pc".) This
435 could be used for normal, unencrypted connections and also for SSL
436 encrypted ones.
437
438 The VNC displays to enter in the VNC viewer would be, say,
439 "far-away.east:0" to reach jills-pc and "far-away.east:1" to reach
440 freds-pc. We assume above that x11vnc is using port 5900 (and any
441 Host-Level-firewalls on jills-pc has been configured to let that port
442 in.) Use the "-rfbport" option to tell which port x11vnc should listen
443 on.
444
445 For a home system one likely does not have a hostname and would have
446 to use the IP address, say, "24.56.78.93:0". E.g.:
447 vncviewer 24.56.78.93:0
448
449 You may want to choose a more obscure port on the router side, e.g.
450 5944, to avoid a lot of port scans finding your VNC server. For 5944
451 you would tell the viewer to use:
452 vncviewer 24.56.78.93:44
453
454 The IP address would need to be communicated to the person running the
455 VNC Viewer. The site http://www.whatismyip.com/ can help here.
456
457 _________________________________________________________________
458
459 Scripts to automate ssh tunneling: As discussed below, there may be
460 some problems with port 5900 being available. If that happens, the
461 above port and display numbers may change a bit (e.g. -> 5901 and :1).
462 However, if you "know" port 5900 will be free on the local and remote
463 machines, you can easily automate the above two steps by using the
464 x11vnc option -bg (forks into background after connection to the
465 display is set up) or using the -f option of ssh. Some example scripts
466 are shown below. Feel free to try the ssh -C to enable its compression
467 and see if that speeds things up noticeably.
468 _________________________________________________________________
469
470 #1. A simple example script, assuming no problems with port 5900 being
471 taken on the local or remote sides, looks like:
472 #!/bin/sh
473 # usage: x11vnc_ssh <host>:<xdisplay>
474 # e.g.: x11vnc_ssh snoopy.peanuts.com:0
475 # (user@host:N also works)
476
477 host=`echo $1 | awk -F: '{print $1}'`
478 disp=`echo $1 | awk -F: '{print $2}'`
479 if [ "x$disp" = "x" ]; then disp=0; fi
480
481 cmd="x11vnc -display :$disp -localhost -rfbauth .vnc/passwd"
482 enc="copyrect tight zrle hextile zlib corre rre raw"
483
484 ssh -f -t -L 5900:localhost:5900 $host "$cmd"
485
486 for i in 1 2 3
487 do
488 sleep 2
489 if vncviewer -encodings "$enc" :0; then break; fi
490 done
491
492 See also rx11vnc.pl below.
493 _________________________________________________________________
494
495 #2. Another method is to start the VNC viewer in listen mode
496 "vncviewer -listen" and have x11vnc initiate a reverse connection
497 using the -connect option:
498 #!/bin/sh
499 # usage: x11vnc_ssh <host>:<xdisplay>
500 # e.g.: x11vnc_ssh snoopy.peanuts.com:0
501 # (user@host:N also works)
502
503 host=`echo $1 | awk -F: '{print $1}'`
504 disp=`echo $1 | awk -F: '{print $2}'`
505 if [ "x$disp" = "x" ]; then disp=0; fi
506
507 cmd="x11vnc -display :$disp -localhost -connect localhost" # <== note new opt
508 ion
509 enc="copyrect tight zrle hextile zlib corre rre raw"
510
511 vncviewer -encodings "$enc" -listen &
512 pid=$!
513 ssh -t -R 5500:localhost:5500 $host "$cmd"
514 kill $pid
515
516 Note the use of the ssh option "-R" instead of "-L" to set up a remote
517 port redirection.
518 _________________________________________________________________
519
520 #3. A third way is specific to the TightVNC vncviewer special option
521 -via for gateways. The only tricky part is we need to start up x11vnc
522 and give it some time (5 seconds in this example) to start listening
523 for connections (so we cannot use the TightVNC default setting for
524 VNC_VIA_CMD):
525 #!/bin/sh
526 # usage: x11vnc_ssh <host>:<xdisplay>
527 # e.g.: x11vnc_ssh snoopy.peanuts.com:0
528
529 host=`echo $1 | awk -F: '{print $1}'`
530 disp=`echo $1 | awk -F: '{print $2}'`
531 if [ "x$disp" = "x" ]; then disp=0; fi
532
533 VNC_VIA_CMD="ssh -f -t -L %L:%H:%R %G x11vnc -localhost -rfbport 5900 -display
534 :$disp; sleep 5"
535 export VNC_VIA_CMD
536
537 vncviewer -via $host localhost:0 # must be TightVNC vncviewer.
538
539 Of course if you already have the x11vnc running waiting for
540 connections (or have it started out of inetd(8)), you can simply use
541 the TightVNC "vncviewer -via gateway host:port" in its default mode to
542 provide secure ssh tunnelling.
543 _________________________________________________________________
544
545
546
547 VNC password file: Also note in the #1. example script that the option
548 "-rfbauth .vnc/passwd" provides additional protection by requiring a
549 VNC password for every VNC viewer that connects. The vncpasswd or
550 storepasswd programs, or the x11vnc -storepasswd option can be used to
551 create the password file. x11vnc also has the slightly less secure
552 -passwdfile and "-passwd XXXXX" options to specify passwords.
553
554 Very Important: It is up to YOU to tell x11vnc to use password
555 protection (-rfbauth or -passwdfile), it will NOT do it for you
556 automatically or force you to (use -usepw if you want to be forced
557 to.) The same goes for encrypting the channel between the viewer and
558 x11vnc: it is up to you to use ssh, stunnel, -ssl mode, a VPN, etc.
559 (use the Enhanced TightVNC Viewer (SSVNC) GUI if you want to be forced
560 to use SSL or SSH.) For additional safety, also look into the -allow
561 and -localhost options and building x11vnc with tcp_wrappers support
562 to limit host access.
563
564 _________________________________________________________________
565
566 Tunnelling x11vnc via SSL/TLS:
567
568 One can also encrypt the VNC traffic using an SSL/TLS tunnel such as
569 stunnel.mirt.net (also stunnel.org) or using the built-in (Mar/2006)
570 -ssl openssl mode. A SSL-enabled Java applet VNC Viewer is also
571 provided in the x11vnc package (and https can be used to download it.)
572
573 Although not as ubiquitous as ssh, SSL tunnelling still provides a
574 useful alternative. See this FAQ on -ssl and -stunnel modes for
575 details and examples.
576
577 The Enhanced TightVNC Viewer (SSVNC) bundles contain some convenient
578 utilities to automatically set up an SSL tunnel from the viewer-side
579 (i.e. to connect to "x11vnc -ssl ...".) And many other enhancements
580 too.
581 _________________________________________________________________
582
583 Downloading x11vnc:
584
585 x11vnc is a contributed program to the LibVNCServer project at
586 SourceForge.net. I use libvncserver for all of the VNC aspects; I
587 couldn't have done without it. The full source code may be found and
588 downloaded (either file-release tarball or GIT tree) from the above
589 link. As of Sep 2010, the x11vnc-0.9.12.tar.gz source package is
590 released (recommended download). The x11vnc 0.9.12 release notes.
591
592 The x11vnc package is the subset of the libvncserver package needed to
593 build the x11vnc program. Also, you can get a copy of my latest,
594 bleeding edge x11vnc-0.9.13-dev.tar.gz tarball to build the most up to
595 date one.
596
597 Precompiled Binaries/Packages: See the FAQ below for information
598 about where you might obtain a precompiled x11vnc binary from 3rd
599 parties and some ones I create.
600
601 VNC Viewers: To obtain VNC viewers for the viewing side (Windows, Mac
602 OS, or Unix) try these links:
603 * http://www.tightvnc.com/download.html
604 * http://www.realvnc.com/download-free.html
605 * http://sourceforge.net/projects/cotvnc/
606 * http://www.ultravnc.com/
607 * Our Enhanced TightVNC Viewer (SSVNC)
608
609 [ssvnc.gif]
610
611
612 More tools: Here is a ssh/rsh wrapper script rx11vnc that attempts to
613 automatically do the above Steps 1-3 for you (provided you have
614 ssh/rsh login permission on the machine x11vnc is to be run on.) The
615 above example would be: "rx11vnc far-away.east:0" typed into a shell
616 on sitting-here.west. Also included is an experimental script
617 rx11vnc.pl that attempts to tunnel the vnc traffic through an ssh port
618 redirection (and does not assume port 5900 is free.) Have a look at
619 them to see what they do and customize as needed:
620 * rx11vnc wrapper script
621 * rx11vnc.pl wrapper script to tunnel traffic thru ssh
622
623 _________________________________________________________________
624
625 Building x11vnc:
626
627 Make sure you have all the needed build/compile/development packages
628 installed (e.g. Linux distributions foolishly don't install them by
629 default.) See this build FAQ for more details.
630
631 If your OS has libjpeg.so and libz.so in standard locations you can
632 build as follows (example given for the 0.9.12 release of x11vnc:
633 replace with the version you downloaded):
634 (un-tar the x11vnc+libvncserver tarball)
635 # gzip -dc x11vnc-0.9.12.tar.gz | tar -xvf -
636
637 (cd to the source directory)
638 # cd x11vnc-0.9.12
639
640 (run configure and then run make)
641 # ./configure
642 # make
643
644 (if all went OK, copy x11vnc to the desired destination, e.g. $HOME/bin)
645 # cp ./x11vnc/x11vnc $HOME/bin
646
647 Or do make install, it will probably install to /usr/local/bin (run
648 ./configure --help for information on customizing your configuration,
649 e.g. --prefix=/my/place.) You can now run it via typing "x11vnc",
650 "x11vnc -help | more", "x11vnc -forever -shared -display :0", etc.
651
652
653 Note: Currently gcc is recommended to build libvncserver. In some
654 cases it will build with non-gcc compilers, but the resulting binary
655 sometimes fails to run properly. For Solaris pre-built gcc binaries
656 are at http://www.sunfreeware.com/. Some Solaris pre-built x11vnc
657 binaries are here.
658
659 However, one user reports it does work fine when built with Sun Studio
660 10, so YMMV. In fact, here is a little build script to do this on
661 Solaris 10:
662 #!/bin/sh
663 PATH=/usr/ccs/bin:/opt/SUNWspro/bin:$PATH; export PATH
664
665 CC='cc' \
666 CFLAGS='-xO4' \
667 LDFLAGS='-L/usr/sfw/lib -L/usr/X11/lib -R/usr/sfw/lib -R/usr/X11/lib' \
668 CPPFLAGS='-I /usr/sfw/include -I/usr/X11/include' \
669 ./configure
670
671 MAKE="make -e"
672 AM_CFLAGS=""
673 export MAKE AM_CFLAGS
674 $MAKE
675
676 In general you can use the "make -e" trick if you don't like
677 libvncserver's choice of AM_CFLAGS. See the build scripts below for
678 more ideas. Scripts similar to the above have been shown to work with
679 vendor C compilers on HP-UX (ccom: HP92453-01) and Tru64 (Compaq C
680 V6.5-011.)
681
682 You can find information on Misc. Build problems here.
683
684 _________________________________________________________________
685
686 Building on Solaris, FreeBSD, etc: Depending on your version of
687 Solaris or other Unix OS the jpeg and/or zlib libraries may be in
688 non-standard places (e.g. /usr/local, /usr/sfw, /opt/sfw, etc.)
689
690 Note: If configure cannot find these two libraries then TightVNC and
691 ZRLE encoding support will be disabled, and you don't want that!!! The
692 TightVNC encoding gives very good compression and performance, it even
693 makes a noticeable difference over a fast LAN.
694
695
696 Shortcuts: On Solaris 10 you can pick up almost everything just by
697 insuring that your PATH has /usr/sfw/bin (for gcc) and /usr/ccs/bin
698 (for other build tools), e.g.:
699 env PATH=/usr/sfw/bin:/usr/ccs/bin:$PATH sh -c './configure; make'
700
701 (The only thing this misses is /usr/X11/lib/libXrandr.so.2, which is
702 for the little used -xrandr option, see the script below to pick it up
703 as well.)
704
705
706 libjpeg is included in Solaris 9 and later (/usr/sfw/include and
707 /usr/sfw/lib), and zlib in Solaris 8 and later (/usr/include and
708 /usr/lib.) So on Solaris 9 you can pick up everything with something
709 like this:
710 env PATH=/usr/local/bin:/usr/ccs/bin:$PATH sh -c './configure --with-jpeg=/us
711 r/sfw; make'
712
713 assuming your gcc is in /usr/local/bin and x11vnc 0.7.1 or later.
714 These are getting pretty long, see those assignments split up in the
715 build script below.
716
717
718 If your system does not have these libraries at all you can get the
719 source for the libraries to build them: libjpeg is available at
720 ftp://ftp.uu.net/graphics/jpeg/ and zlib at http://www.gzip.org/zlib/.
721 See also http://www.sunfreeware.com/ for Solaris binary packages of
722 these libraries as well as for gcc. Normally they will install into
723 /usr/local but you can install them anywhere with the
724 --prefix=/path/to/anywhere, etc.
725
726
727 Here is a build script that indicates one way to pass the library
728 locations information to the libvncserver configuration via the
729 CPPFLAGS and LDFLAGS environment variables.
730 ---8<---8<---8<---8<---8<---8<---8<---8<---8<---8<---8<---8<---8<---8<---8<---8
731 <---
732 #!/bin/sh
733
734 # Build script for Solaris, etc, with gcc, libjpeg and libz in
735 # non-standard locations.
736
737 # set to get your gcc, etc:
738 #
739 PATH=/path/to/gcc/bin:/usr/ccs/bin:/usr/sfw/bin:$PATH
740
741 JPEG=/path/to/jpeg # set to maybe "/usr/local", "/usr/sfw", or "/opt/sfw"
742 ZLIB=/path/to/zlib # set to maybe "/usr/local", "/usr/sfw", or "/opt/sfw"
743
744 # Below we assume headers in $JPEG/include and $ZLIB/include and the
745 # shared libraries are in $JPEG/lib and $ZLIB/lib. If your situation
746 # is different change the locations in the two lines below.
747 #
748 CPPFLAGS="-I $JPEG/include -I $ZLIB/include"
749 LDFLAGS="-L$JPEG/lib -R $JPEG/lib -L$ZLIB/lib -R $ZLIB/lib"
750
751 # These two lines may not be needed on more recent Solaris releases:
752 #
753 CPPFLAGS="$CPPFLAGS -I /usr/openwin/include"
754 LDFLAGS="$LDFLAGS -L/usr/openwin/lib -R /usr/openwin/lib"
755
756 # These are for libXrandr.so on Solaris 10:
757 #
758 CPPFLAGS="$CPPFLAGS -I /usr/X11/include"
759 LDFLAGS="$LDFLAGS -L/usr/X11/lib -R /usr/X11/lib"
760
761 # Everything needs to built with _REENTRANT for thread safe errno:
762 #
763 CPPFLAGS="$CPPFLAGS -D_REENTRANT"
764
765 export PATH CPPFLAGS LDFLAGS
766
767 ./configure
768 make
769
770 ls -l ./x11vnc/x11vnc
771
772 ---8<---8<---8<---8<---8<---8<---8<---8<---8<---8<---8<---8<---8<---8<---8<---8
773 <---
774
775 Then do make install or copy the x11vnc binary to your desired
776 destination.
777
778 BTW, To run a shell script, just cut-and-paste the above into a file,
779 say "myscript", then modify the "/path/to/..." items to correspond to
780 your system/environment, and then type: "sh myscript" to run it.
781
782 Note that on Solaris make is /usr/ccs/bin/make, so that is why the
783 above puts /usr/ccs/bin in PATH. Other important build utilities are
784 there too: ld, ar, etc. Also, it is probably a bad idea to have
785 /usr/ucb in your PATH while building.
786
787 Starting with the 0.7.1 x11vnc release the "configure --with-jpeg=DIR
788 --with-zlib=DIR" options are handy if you want to avoid making a
789 script.
790
791 If you need to link OpenSSL libssl.a on Solaris see this method.
792
793 If you need to build on Solaris 2.5.1 or earlier or other older Unix
794 OS's, see this workaround FAQ.
795
796
797 Building on FreeBSD, OpenBSD, ...: The jpeg libraries seem to be in
798 /usr/local or /usr/pkg on these OS's. You won't need the openwin stuff
799 in the above script (but you may need /usr/X11R6/....) Also starting
800 with the 0.7.1 x11vnc release, this usually works:
801 ./configure --with-jpeg=/usr/local
802 make
803
804
805 Building on HP-UX: For jpeg and zlib you will need to do the same
806 sort of thing as described above for Solaris. You set CPPFLAGS and
807 LDFLAGS to find them (see below for an example.) You do not need to do
808 any of the above /usr/openwin stuff. Also, HP-UX does not seem to
809 support -R, so get rid of the -R items in LDFLAGS. Because of this, at
810 runtime you may need to set LD_LIBRARY_PATH or SHLIB_PATH to indicate
811 the directory paths so the libraries can be found. It is a good idea
812 to have static archives, e.g. libz.a and libjpeg.a for the nonstandard
813 libraries so that they get bolted into the x11vnc binary (and so won't
814 get "lost".)
815
816 Here is what we recently did to build x11vnc 0.7.2 on HP-UX 11.11
817 ./configure --with-jpeg=$HOME/hpux/jpeg --with-zlib=$HOME/hpux/zlib
818 make
819
820 Where we had static archives (libjpeg.a, libz.a) only and header files
821 in the $HOME/hpux/... directories as discussed for the build script.
822
823 On HP-UX 11.23 and 11.31 we have had problems compiling with gcc.
824 "/usr/include/rpc/auth.h:87: error: field 'syncaddr' has incomplete
825 type". As a workaround for x11vnc 0.9.4 and later set your CPPFLAGS to
826 include:
827 CPPFLAGS="-DIGNORE_GETSPNAM"
828 export CPPFLAGS
829
830 This disables a very rare usage mode for -unixpw_nis by not trying
831 getspnam(3).
832
833 Using HP-UX's C compiler on 11.23 and 11.31 we have some severe
834 compiler errors that have not been worked around yet. If you need to
835 do this, contact me and I will give you a drastic recipe that will
836 produce a working binary.
837
838
839 Building on AIX: AIX: one user had to add the "X11.adt" package to
840 AIX 4.3.3 and 5.2 to get build header files like XShm.h, etc. You may
841 also want to make sure that /usr/lpp/X11/include, etc is being picked
842 up by the configure and make.
843
844 For a recent build on AIX 5.3 we needed to add these CFLAGS to be able
845 to build with gcc:
846 env CFLAGS='-maix64 -Xlinker -bbigtoc' ./configure ...
847
848 we also built our own libjpeg and libz using -maix64.
849
850 BTW, one way to run an Xvfb-like virtual X server for testing on AIX
851 is something like "/usr/bin/X11/X -force -vfb -ac :1".
852
853
854 Building on Mac OS X: There is now native Mac OS X support for
855 x11vnc by using the raw framebuffer feature. This mode does not use or
856 need X11 at all. To build you may need to disable X11:
857 ./configure --without-x ...
858 make
859
860 However, if your system has the Mac OS X build package for X11 apps
861 you will not need to supply the "--without-x" option (in this case the
862 resulting x11vnc would be able to export both the native Mac OS X
863 display and windows displayed in the XDarwin X server.) Be sure to
864 include the ./configure option to find libjpeg on your system.
865
866
867 OpenSSL: Starting with version 0.8.3 x11vnc can now be built with
868 SSL/TLS support. For this to be enabled the libssl.so library needs to
869 be available at build time. So you may need to have additional
870 CPPFLAGS and LDFLAGS items if your libssl.so is in a non-standard
871 place. As of x11vnc 0.9.4 there is also the --with-ssl=DIR configure
872 option.
873
874 On Solaris using static archives libssl.a and libcrypto.a instead of
875 .so shared libraries (e.g. from www.sunfreeware.com), we found we
876 needed to also set LDFLAGS as follows to get the configure to work:
877 env LDFLAGS='-lsocket -ldl' ./configure --with-ssl=/path/to/openssl ...
878 make
879
880 _________________________________________________________________
881
882 Beta Testing:
883
884 I don't have any formal beta-testers for the releases of x11vnc, so
885 I'd appreciate any additional testing very much.
886
887 Thanks to those who suggested features and helped beta test x11vnc
888 0.9.12 released in Sep 2010!
889
890 Please help test and debug the 0.9.13 version for release sometime in
891 Winter 2010.
892
893 The version 0.9.13 beta tarball is kept here:
894 x11vnc-0.9.13-dev.tar.gz
895
896 There are also some Linux, Solaris, Mac OS X, and other OS test
897 binaries here. Please kick the tires and report bugs, performance
898 regressions, undesired behavior, etc. to me.
899
900 To aid testing of the built-in SSL/TLS support for x11vnc, a number of
901 VNC Viewer packages for Unix, Mac OS X, and Windows have been created
902 that provide SSL Support for the TightVNC Viewer (this is done by
903 wrapper scripts and a GUI that starts STUNNEL.) It should be pretty
904 convenient for automatic SSL and SSH connections. It is described in
905 detail at and can be downloaded from the Enhanced TightVNC Viewer
906 (SSVNC) page. The SSVNC Unix viewer also supports x11vnc's symmetric
907 key encryption ciphers (see the 'UltraVNC DSM Encryption Plugin'
908 settings panel.)
909
910
911 Here are some features that will appear in the 0.9.13 release:
912 * Improved support for non-X11 touchscreen devices (e.g. handheld or
913 cell phone) via Linux uinput input injection. Additional tuning
914 parameters are added. TSLIB touchscreen calibration is supported.
915 Tested on Qtmoko Neo Freerunner. A tool, misc/uinput.pl, is
916 provided to diagnose uinput behavior on new devices. The env.
917 vars. X11VNC_UINPUT_BUS and X11VNC_UINPUT_VERSION are available if
918 leaving them unset does not work.
919 * The Linux uinput non-X11 input injection can now be bypassed:
920 events can be directly written to the /dev/input/event devices
921 specified by the user (direct_abs=..., etc.) A -pipeinput input
922 injection helper script, misc/qt_tslib_inject.pl is provided as a
923 tweakable non-builtin direct input injection method.
924 * The list of new uinput parameters for the above two features is:
925 pressure, tslib_cal, touch_always, dragskip, btn_touch;
926 direct_rel, direct_abs, direct_btn, direct_key.
927 * The MacOSX native server can now use OpenGL for the screen
928 capture. In nearly all cases this is faster than the raw
929 framebuffer capture method. There are build and run time flags,
930 X11VNC_MACOSX_NO_DEPRECATED, etc. to disable use of deprecated
931 input injection and screen access interfaces. Cursor shape now
932 works for 64bit binaries.
933 * The included SSL enabled Java VNC Viewers now handle Mouse Wheel
934 events.
935 * miscellaneous new features and changes:
936 * In -reflect mode, the libvncclient connection can now have the
937 pixel format modified via the environment variables
938 X11VNC_REFLECT_bitsPerSample, X11VNC_REFLECT_samplesPerPixel, and
939 X11VNC_REFLECT_bytesPerPixel
940 * In -create mode the following environment variables are added to
941 fine tune the behavior: FIND_DISPLAY_NO_LSOF: do not use lsof(1)
942 to try to determine the Linux VT, FIND_DISPLAY_NO_VT_FIND: do not
943 try to determine the Linux VT at all, X11VNC_CREATE_LC_ALL_C_OK:
944 do not bother undoing the setting LC_ALL=C that the create_display
945 script sets. The performance of the -create script has been
946 improved for large installations (100's of user sessions on one
947 machine.)
948 * In -unixpw mode, one can now Tab from login: to Password.
949 * An environment variable, X11VNC_SB_FACTOR, allows one to scale the
950 -sb screenblank sleep time from the default 2 secs.
951 * An experimental option -unixsock is available for testing. Note,
952 however, that it requires a manual change to
953 libvncserver/rfbserver.c for it to work.
954 * Documented that -grabkbd is no longer working with some/most
955 window managers (it can prevent resizing and menu posting.)
956
957
958 Here are some features that appeared in the 0.9.12 release (Sep/2010):
959 * One can now specify the maximum number of displays that can be
960 created in -create mode via the env. var.
961 X11VNC_CREATE_MAX_DISPLAYS
962 * The X11VNC_NO_LIMIT_SHM env. var. is added to skip any automatic
963 shared memory reduction.
964 * The kdm display manager is now detected when trying not to get
965 killed by the display manager.
966 * A compile time bug is fixed so that configuring using
967 --with-system-libvncserver pointing to LibVNCServer 0.9.7 works
968 again. A bug from forced use of Xdefs.h is worked around.
969
970
971 Here are some features that appeared in the 0.9.11 release (Aug/2010):
972 * The source tree is synchronized with the most recent libvncclient
973 (this only affects -reflect mode.) Build is fixed for
974 incompatibilities when using an external LibVNCServer (e.g.
975 ./configure --with-system-libvncserver...) Please help test these
976 build and runtime aspects and report back what you find, thanks.
977 * The SSL enabled Java VNC Viewer Makefile has been modified so that
978 the jar files that are built are compatible back to Java 1.4.
979 * In -create/-unixpw mode, the env. var. FD_USERPREFS may be set to
980 a filename in the user's home directory that includes default
981 username:options values (so the options do not need to be typed
982 every time at the login prompt.)
983 * In -reflect mode cursor position updates are now handled
984 correctly.
985
986
987 Here are some features that appeared in the 0.9.10 release (May/2010):
988 * The included SSL enabled Java applet viewer now supports Chained
989 SSL Certificates. The debugCerts=yes applet parameter aids
990 troubleshooting certificate validation. The x11vnc -ssl mode has
991 always supported chained SSL certificates (simply put the
992 intermediate certificates, in order, after the server certificate
993 in the pem file.)
994 * A demo CGI script desktop.cgi shows how to create an SSL
995 encrypted, multi-user x11vnc web login desktop service. The script
996 requires x11vnc version 0.9.10. The user logs into a secure web
997 site and gets his/her own virtual desktop (Xvfb.) x11vnc's SSL
998 enabled Java Viewer Applet is launched by the web browser for
999 secure viewing (and so no software needs to be installed on the
1000 viewer-side.) One can use the desktop.cgi script for ideas to
1001 create their own fancier or customized web login desktop service
1002 (e.g. user-creation, PHP, SQL, specialized desktop application,
1003 etc.) More info here. There is also an optional 'port redirection'
1004 mode that allows redirection to other SSL enabled VNC servers
1005 running inside the firewall.
1006 * Built-in support for IPv6 (128 bit internet addresses) is now
1007 provided. See the -6 and -connect options for details.
1008 Additionally, in case there are still problems with built-in IPv6
1009 support, a transitional tool is provided in inet6to4 that allows
1010 x11vnc (or any other IPv4 application) to receive connections over
1011 IPv6.
1012 * The Xdummy wrapper script for Xorg's dummy driver is updated and
1013 no longer requires being run as root. New service options are
1014 provided to select Xdummy over Xvfb as the virtual X server to be
1015 created.
1016 * The "%" unix password verification tricks for the -unixpw option
1017 are now documented. They have also been extended to run a command
1018 as the user if one sets the environment variable UNIXPW_CMD. The
1019 desktop.cgi demo script takes advantage of this new feature.
1020 * A bug has been fixed that would prevent the Java applet viewer
1021 from being downloaded successfully in single-port HTTPS/VNC inetd
1022 mode. The env. var. X11VNC_HTTPS_DOWNLOAD_WAIT_TIME can be used to
1023 adjust for how many seconds a -inetd or -https httpd download is
1024 waited for (default 15 seconds.) The applet will now autodetect
1025 x11vnc and use GET=1 for faster connecting. Many other
1026 improvements and fixes.
1027 * The TightVNC security type (TightVNC features enabler) now works
1028 for RFB version 3.8.
1029 * The X property X11VNC_TRAP_XRANDR can be set on a desktop to force
1030 x11vnc to use the -xrandr screen size change trapping code.
1031 * New remote control query options: pointer_x, pointer_y,
1032 pointer_same, pointer_root, and pointer_mask. A demo script using
1033 them misc/panner.pl is provided.
1034 * The -sslScripts option prints out the SSL certificate management
1035 scripts.
1036
1037
1038 Here are some features that appeared in the 0.9.9 release (Dec/2009):
1039 * The -unixpw_system_greeter option, when used in combined unixpw
1040 and XDMCP FINDCREATEDISPLAY mode (for example: -xdmsvc), enables
1041 the user to press Escape to jump directly to the XDM/GDM/KDM login
1042 greeter screen. This way the user avoids entering his unix
1043 password twice at X session creation time. Also, the unixpw login
1044 panel now has a short help displayed if the user presses 'F1'.
1045 * x11vnc now tries to be a little bit more aggressive in keeping up
1046 with VNC client's framebuffer update requests. Some broken VNC
1047 clients like Eggplant and JollysFastVNC continuously spray these
1048 requests at VNC servers (regardless of whether they have received
1049 any updates or not.) Under some circumstances this could lead to
1050 x11vnc falling behind. The -extra_fbur option allows one to fine
1051 tune the setting. Additionally, one may also dial down delays:
1052 e.g. "-defer 5" and "-wait 5" (or to 1 or even 0) or -nonap or
1053 -allinput to keep up with these VNC clients at the expense of
1054 increased system load.
1055 * Heuristics are applied to try to determine if the X display is
1056 currently in a Display Manager Greeter Login panel (e.g. GDM) If
1057 so, x11vnc's creation of any windows and use of XFIXES are
1058 delayed. This is to try to avoid x11vnc being killed after the
1059 user logs in if the GDM KillInitClients=true is in effect. So one
1060 does not need to set KillInitClients=false. Note that in recent
1061 GDM the KillInitClients option has been removed. Also delayed is
1062 the use of the XFIXES cursor fetching functionality; this avoids
1063 an Xorg bug that causes Xorg to crash right after the user logs
1064 in.
1065 * A new option -findauth runs the FINDDISPLAY script that applies
1066 heuristics that try to determine the XAUTHORITY file. The use of
1067 '-auth guess' will use the XAUTHORITY that -findauth reveals. This
1068 can be handy in with the lastest GDM where the ability to store
1069 cookies in ~/.Xauthority has been removed. If x11vnc is running as
1070 root (e.g. inetd) and you add -env FD_XDM=1 to the above -findauth
1071 or -auth guess command lines, it will find the correct XAUTHORITY
1072 for the given display (this works for XDM/GDM/KDM if the login
1073 greeter panel is up or if someone has already logged into an X
1074 session.)
1075 * The FINDDISPLAY and FINDCREATEDISPLAY modes (i.e. "-display
1076 WAIT:cmd=...", -find, -create) now work correctly for the
1077 user-supplied login program scheme "-unixpw_cmd ...", as long as
1078 the login program supports running commands specified in the
1079 environment variable "RFB_UNIXPW_CMD_RUN" as the logged-in user.
1080 The mode "-unixpw_nis ..." has also been made more consistent.
1081 * The -stunnel option (like -ssl but uses stunnel as an external
1082 helper program) now works with the -ssl "SAVE" and "TMP" special
1083 certificate names. The -sslverify and -sslCRL options now work
1084 correctly in -stunnel mode. Single port HTTPS connections are also
1085 supported for this mode.
1086 * There is an experimental Application Sharing mode that improves
1087 upon the -id/-sid single window sharing: -appshare (run "x11vnc
1088 -appshare -help" for more info.) It is still very primitive and
1089 approximate, but at least it displays multiple top-level windows.
1090 * The remote control command -R can be used to instruct x11vnc to
1091 resend its most recent copy of the Clipboard, Primary, or
1092 Cutbuffer selections: "x11vnc -R resend_clipboard", "x11vnc -R
1093 resend_primary", and "x11vnc -R resend_cutbuffer".
1094 * The fonts in the GUI (-gui) can now by set via environment
1095 variables, e.g. -env X11VNC_FONT_BOLD='Helvetica -16 bold' and
1096 -env X11VNC_FONT_FIXED='Courier -14'.
1097 * The XDAMAGE mechanism is now automatically disabled for a period
1098 of time if a game or screensaver generates too many XDAMAGE
1099 rectangles per second. This avoids the X11 event queue from
1100 soaking up too much memory.
1101 * There is an experimental workaround: "-env X11VNC_WATCH_DX_DY=1"
1102 that tries to avoid problems with poorly constructed menu themes
1103 that place the initial position of the mouse cursor inside a menu
1104 item's active zone. More information can be found here.
1105
1106
1107 Here are some features that appeared in the 0.9.8 release (Jul/2009):
1108 * Stability improvements to -threads mode. Running x11vnc this way
1109 is more reliable now. Threaded operation sometimes gives better
1110 interactive response and faster updates: try it out. The threaded
1111 mode now supports multiple VNC viewers using the same VNC
1112 encoding. The threaded mode can also yield a performance
1113 enhancement in the many client case (e.g. class-room broadcast.)
1114 We have tested with 30 to 50 simultaneous clients. See also
1115 -reflect.
1116 For simultaneous clients: the ZRLE encoding is thread safe on all
1117 platforms, and the Tight and Zlib encodings are currently only
1118 thread safe on Linux where thread local storage, __thread, is
1119 used. If your non-Linux system and compiler support __thread one
1120 can supply -DTLS=__thread to enable it. When there is only one
1121 connected client, all encodings are safe on all platforms. Note
1122 that some features (e.g. scroll detection and -ncache) may be
1123 disabled or run with reduced functionality in -threads mode.
1124 * Automatically tries to work around an Xorg server and GNOME bug
1125 involving infinitely repeating keys when turning off key
1126 repeating. Use -repeat if the automatic workaround fails.
1127 * Improved reliability of the Single Port SSL VNC and HTTPS java
1128 viewer applet delivery mechanism.
1129 * The -clip mode works under -rawfb.
1130
1131
1132 Here are some features that appeared in the 0.9.7 release (Mar/2009):
1133 * Support for polling Linux Virtual Terminals (also called virtual
1134 consoles) directly instead of using /dev/fb. The option to use is,
1135 for example, "-rawfb vt2" for Virtual Terminal 2, etc. In this
1136 case the special file /dev/vcsa2 is used to retrieve vt2's current
1137 text. Text and colors are shown, but no graphics.
1138 * Support for less than 8 bits per pixel framebuffers (e.g. 4 or 1
1139 bpp) in the -rawfb mode.
1140 * The SSL enabled UltraVNC Java viewer applet now has a [Home] entry
1141 in the "drives" drop down menu. This menu can be configured with
1142 the ftpDropDown applet parameter. All of the applet parameters are
1143 documented in classes/ssl/README.
1144 * Experimental support for VirtualGL's TurboVNC (an enhanced
1145 TightVNC for fast LAN high framerate usage.)
1146 * The CUPS Terminal Services helper mode has been improved.
1147 * Improvements to the -ncache_cr that allows smooth opaque window
1148 motions using the 'copyrect' encoding when using -ncache mode.
1149 * The -rmflag option enables a way to indicate to other processes
1150 x11vnc has exited.
1151 * Reverse connections using anonymous Diffie Hellman SSL encryption
1152 now work.
1153
1154
1155 Here are some features that appeared in the 0.9.6 release (Dec/2008):
1156 * Support for VeNCrypt SSL/TLS encrypted connections. It is enabled
1157 by default in the -ssl mode. VNC Viewers like vinagre,
1158 gvncviewer/gtk-vnc, the vencrypt package, SSVNC, and others
1159 support this encryption mode. It can also be used with the -unixpw
1160 option to enable Unix username and password authentication
1161 (VeNCrypt's "*Plain" modes.) A similar but older VNC security type
1162 "ANONTLS" (used by vino) is supported as well. See the -vencrypt
1163 and -anontls options for additional control. The difference
1164 between x11vnc's normal -ssl mode and VeNCrypt is that the former
1165 wraps the entire VNC connection in SSL (like HTTPS does for HTTP,
1166 i.e. "vncs://") while VeNCrypt switches on the SSL/TLS at a
1167 certain point during the VNC handshake. Use -sslonly to disable
1168 both VeNCrypt and ANONTLS (vino.)
1169 * The "-ssl ANON" option enables Anonymous Diffie-Hellman (ADH) key
1170 exchange for x11vnc's normal SSL/TLS operation. Note that
1171 Anonymous Diffie-Hellman uses encryption for privacy, but provides
1172 no authentication and so is susceptible to Man-In-The-Middle
1173 attacks (and so we do not recommend it: we prefer you use "-ssl
1174 SAVE", etc. and have the VNC viewer verify the cert.) The ANONTLS
1175 mode (vino) only supports ADH. VeNCrypt mode supports both ADH and
1176 regular X509 SSL certificates modes. For these ADH is enabled by
1177 default. See -vencrypt and -anontls for how to disable ADH.
1178 * For x11vnc's SSL/TLS modes, one can now specify a Certificate
1179 Revocation List (CRL) with the -sslCRL option. This will only be
1180 useful for wide deployments: say a company-wide x11vnc SSL access
1181 deployment using a central Certificate Authority (CA) via
1182 -sslGenCA and -sslGenCert. This way if a user has his laptop lost
1183 or stolen, you only have to revoke his key instead of creating a
1184 new Certificate Authority and redeploying new keys to all users.
1185 * The default SSL/TLS mode, "-ssl" (no pem file parameter supplied),
1186 is now the same as "-ssl SAVE" and will save the generated
1187 self-signed cert in "~/.vnc/certs/server.pem". Previously "-ssl"
1188 would create a temporary self-signed cert that was discarded when
1189 x11vnc exited. The reason for the change is to at least give the
1190 chance for the VNC Viewer side (e.g. SSVNC) to remember the cert
1191 to authenticate subsequent connections to the same x11vnc server.
1192 Use "-ssl TMP" to regain the previous behavior. Use "-ssl
1193 SAVE_NOPROMPT" to avoid being prompted about using passphrase when
1194 the certificate is created.
1195 * The option -http_oneport enables single-port HTTP connections via
1196 the Java VNC Viewer. So, for example, the web browser URL
1197 "http://myhost.org:5900" works the same as
1198 "http://myhost.org:5800", but with the convenience of only
1199 involving one port instead of two. This works for both unencrypted
1200 connections and for SSH tunnels (see -httpsredir if the tunnel
1201 port differs.) Note that HTTPS single-port operation in -ssl SSL
1202 encrypted mode has been available since x11vnc version 0.8.3.
1203 * For the -avahi/-zeroconf Service Advertizing mode, if x11vnc was
1204 not compiled with the avahi-client library, then an external
1205 helper program, either avahi-publish(1) (on Unix) or dns-sd(1) (on
1206 Mac OS X), is used instead.
1207 * The "-rfbport PROMPT" option will prompt the user via the GUI to
1208 select the VNC port (e.g. 5901) to listen on, and a few other
1209 basic settings. This enables a handy GUI mode for naive users:
1210 x11vnc -gui tray=setpass -rfbport PROMPT -logfile $HOME/.x11vnc.log.%VNCDISP
1211 LAY
1212 suitable for putting in a launcher or menu, e.g. x11vnc.desktop.
1213 The -logfile expansion is new too. In the GUI, the tray=setpass
1214 Properties panel has been improved.
1215 * The -solid solid background color option now works for the Mac OS
1216 X console.
1217 * The -reopen option instructs x11vnc to try to reopen the X display
1218 if it is prematurely closed by, say, the display manager (e.g.
1219 GDM.)
1220
1221
1222 Here are some features that appeared in the 0.9.5 release (Oct/2008):
1223 * Symmetric key encryption ciphers. ARC4, AES-128, AES-256,
1224 blowfish, and 3des are supported. Salt and initialization vector
1225 seeding is provided. These compliment the more widely used SSL and
1226 SSH encryption access methods. SSVNC also supports these
1227 encryption modes.
1228 * Scaling differently along the X- and Y-directions. E.g. "-scale
1229 1280x1024" or "-scale 0.8x0.75" Also, "-geometry WxH" is an
1230 alias for "-scale WxH"
1231 * By having SSVNC version 1.0.21 or later available in your $PATH,
1232 the -chatwindow option allows a UltraVNC Text Chat window to
1233 appear on the local X11 console/display (this way the remote
1234 viewer can chat with the person at the physical display; e.g.
1235 helpdesk mode.) This also works on the Mac OS X console if the
1236 Xquartz X11 server (enabled by default on leopard) is running for
1237 the chatwindow.
1238 * The HTTP Java viewer applet jar, classes/VncViewer.jar, has been
1239 updated with an improved implementation based on the code used by
1240 the classes/ssl applets.
1241
1242
1243 Here are some features that appeared in the 0.9.4 release (Sep/2008):
1244 * Improvements to the -find and -create X session finding or
1245 creating modes: new desktop types and service redirection options.
1246 Personal cupsd daemon and SSH port redirection helper for use with
1247 SSVNC's Terminal Services feature.
1248 * Reverse VNC connections via -connect work in the -find, -create
1249 and related -display WAIT:... modes.
1250 * Reverse VNC connections (either normal or SSL) can use a Web Proxy
1251 or a SOCKS proxy, or a SSH connection, or even a CGI URL to make
1252 the outgoing connection. See: -proxy. Forward connections can also
1253 use: -ssh.
1254 * Reverse VNC connections via the UltraVNC repeater proxy (either
1255 normal or SSL) are supported. Use either the "-connect
1256 repeater=ID:NNNN+host:port" or "-connect
1257 repeater://host:port+ID:NNNN" notation. The SSVNC VNC viewer also
1258 supports the UltraVNC repeater. Also, a perl repeater implemention
1259 is here: ultravnc_repeater.pl
1260 * Support for indexed colormaps (PseudoColor) with depths other than
1261 8 (from 1 to 16 now work) for non-standard hardware. Option
1262 "-advertise_truecolor" to handle some workaround in this mode.
1263 * Support for the ZYWRLE encoding, this is the RealVNC ZRLE encoding
1264 extended to do motion video and photo regions more efficiently by
1265 way of a Wavelet based transformation.
1266 * The -finddpy and -listdpy utilities help to debug and configure
1267 the -find, -create, and -display WAIT:... modes.
1268 * Some automatic detection of screen resizes are handled even if the
1269 -xrandr option is not supplied.
1270 * The -autoport options gives more control over the VNC port x11vnc
1271 chooses.
1272 * The -ping secs can be used to help keep idle connections alive.
1273 * Pasting of the selection/clipboard into remote applications (e.g.
1274 Java) has been improved.
1275 * Fixed a bug if a client disconnects during the 'speed-estimation'
1276 phase.
1277 * To unset Caps_Lock, Num_Lock and raise all keys in the X server
1278 use -clear_all.
1279 * Usage with dvorak keyboards has been improved. See also: -xkb.
1280 * The Java Viewer applet source code is now included in the
1281 x11vnc-0.9.*.tar.gz tarball. This means you can now build the Java
1282 viewer applet jar files from source. If you stopped shipping the
1283 Java viewer applet jar files due to lack of source code, you can
1284 start again.
1285
1286
1287 Here are some features that appeared in the 0.9.3 release (Oct/2007):
1288 * Viewer-side pixmap caching. A large area of pixels (at least 2-3
1289 times as big as the framebuffer itself; the bigger the better...
1290 default is 10X) is placed below the framebuffer to act as a
1291 buffer/cache area for pixel data. The VNC CopyRect encoding is
1292 used to move it around, so any viewer can take advantage of it.
1293 Until we start modifying viewers you will be able to see the cache
1294 area if you scroll down (this makes it easier to debug!) For
1295 testing the default is "-ncache 10". The unix Enhanced TightVNC
1296 Viewer ssvnc has a nice -ycrop option to help hide the pixel cache
1297 area from view.
1298
1299
1300 Here are some features that appeared in the 0.9.2 release (Jun/2007):
1301 * Building with no OpenSSL libssl available (or with --without-ssl)
1302 has been fixed.
1303 * One can configure x11vnc via "./configure
1304 --with-system-libvncserver" to use a system installed libvncserver
1305 library instead of the one bundled in the release tarball.
1306 * If UltraVNC file transfer or chat is detected, then VNC clients
1307 are "pinged" more often to prevent these side channels from
1308 becoming serviced too infrequently.
1309 * In -unixpw mode in the username and password dialog no text will
1310 be echoed if the first character sent is "Escape". This enables a
1311 convenience feature in SSVNC to send the username and password
1312 automatically.
1313
1314
1315 Here are some features that appeared in the 0.9.1 release (May/2007):
1316 * The UltraVNC Java viewer has been enhanced to support SSL (as the
1317 TightVNC viewer had been previously.) The UltraVNC Java supports
1318 ultravnc filetransfer, and so can be used as a VNC viewer on Unix
1319 that supports ultravnc filetransfer. It is in the
1320 classes/ssl/UltraViewerSSL.jar file (that is pointed to by
1321 ultra.vnc.) The signed applet SignedUltraViewerSSL.jar version
1322 (pointed to by ultrasigned.vnc) will be needed to access the local
1323 drive if you are using it for file transfer via a Web browser.
1324 Some other bugs in the UltraVNC Java viewer were fixed and a few
1325 improvements to the UI made.
1326 * A new Unix username login mode for VNC Viewers authenticated via a
1327 Client SSL Certificate: "-users sslpeer=". The emailAddress
1328 subject field is inspected for username@hostname and then acts as
1329 though "-users +username" has been supplied. This way the Unix
1330 username is identified by (i.e. simply extracted from) the Client
1331 SSL Certificate. This could be useful with -find, -create and -svc
1332 modes if you are also have set up and use VNC Client SSL
1333 Certificate authentication.
1334 * For external display finding/creating programs (e.g. WAIT:cmd=...)
1335 if the VNC Viewer is authenticated via a Client SSL Certificate,
1336 then that Certificate is available in the environment variable
1337 RFB_SSL_CLIENT_CERT.
1338
1339
1340 Here are some features that appeared in the 0.9 release (Apr/2007):
1341 * VNC Service advertising via mDNS / ZeroConf / BonJour with the
1342 Avahi client library. Enable via "-avahi" or "-zeroconf".
1343 * Implementations of UltraVNC's TextChat, SingleWindow, and
1344 ServerInput extensions (requires ultravnc viewer or ssvnc Unix
1345 viewer.) They toggle the selection of a single window (-id), and
1346 disable (friendly) user input and viewing (monitor blank) at the
1347 VNC server.
1348 * Short aliases "-find", "-create", "-svc", and "-xdmsvc" for
1349 commonly used FINDCREATEDISPLAY usage modes.
1350 * Reverse VNC connections (viewer listening) now work in SSL (-ssl)
1351 mode.
1352 * New options to control the Monitor power state and keyboard/mouse
1353 grabbing: -forcedpms, -clientdpms, -noserverdpms, and -grabalways.
1354 * A simple way to emulate inetd(8) to some degree via the "-loopbg"
1355 option.
1356 * Monitor the accuracy of XDAMAGE and apply "-noxdamage" if it is
1357 not working well. OpenGL applications like like beryl and MythTv
1358 have been shown to make XDAMAGE not work properly.
1359 * For Java SSL connections involving a router/firewall port
1360 redirection, an option -httpsredir to spare the user from needing
1361 to include &PORT=NNN in the browser URL.
1362
1363
1364 Here are some features that appeared in the 0.8.4 release (Feb/2007):
1365 * Native Mac OS X Aqua/Quartz support. (i.e. OSXvnc alternative;
1366 some activities are faster)
1367 * A new login mode: "-display WAIT:cmd=FINDCREATEDISPLAY -unixpw
1368 ..." that will Create a new X session (either virtual or real and
1369 with or without a display manager, e.g. kdm) for the user if it
1370 cannot find the user's X session display via the FINDDISPLAY
1371 method. See the -svc and the -xdmsvc aliases.
1372 * x11vnc can act as a VNC reflector/repeater using the "-reflect
1373 host:N" option. Instead of polling an X display, the remote VNC
1374 Server host:N is connected to and re-exported via VNC. This is
1375 intended for use in broadcasting a display to many (e.g. > 16;
1376 classroom or large demo) VNC viewers where bandwidth and other
1377 resources are conserved by spreading the load over a number of
1378 repeaters.
1379 * Wireframe copyrect detection for local user activity (e.g. someone
1380 sitting at the physical display moving windows) Use
1381 -nowireframelocal to disable.
1382 * The "-N" option couples the VNC Display number to the X Display
1383 number. E.g. if your X DISPLAY is :2 then the VNC display will be
1384 :2 (i.e. using port 5902.) If that port is taken x11vnc will exit.
1385 * Option -nodpms to avoid problems with programs like KDE's
1386 kdesktop_lock that keep restarting the screen saver every few
1387 seconds.
1388 * To automatically fix the common mouse motion problem on XINERAMA
1389 (multi-headed) displays, the -xwarppointer option is enabled by
1390 default when XINERAMA is active.
1391
1392 If you have a Mac please try out the native Mac OS X support, build
1393 with "./configure --without-x", or download a binary mentioned above,
1394 (even if you don't plan on ever using it in this mode!), and let me
1395 know how it went. Thanks.
1396
1397
1398 Here are some features that appeared in the 0.8.3 release (Nov/2006):
1399 * The -ssl option provides SSL encryption and authentication
1400 natively via the www.openssl.org library. One can use from a
1401 simple self-signed certificate server certificate up to full CA
1402 and client certificate authentication schemes.
1403 * Similar to -ssl, the -stunnel option starts up a SSL tunnel server
1404 stunnel (that must be installed separately on the system:
1405 stunnel.mirt.net ) to allow only encrypted SSL connections from
1406 the network.
1407 * The -sslverify option allows for authenticating VNC clients via
1408 their certificates in either -ssl or -stunnel modes.
1409 * Certificate creation and management tools are provide in the
1410 -sslGenCert, -sslGenCA, and related options.
1411 * An SSL enabled Java applet VNC Viewer applet is provided by x11vnc
1412 in classes/ssl/VncViewer.jar. In addition to normal HTTP, the
1413 applet may be loaded into the web browser via HTTPS (HTTP over
1414 SSL.) (one can use the VNC port, e.g. https://host:5900/, or also
1415 the separate -https port option.) A wrapper shell script
1416 ss_vncviewer is also provided that sets up a stunnel client-side
1417 tunnel on Unix systems. See Enhanced TightVNC Viewer (SSVNC) for
1418 other SSL/SSH viewer possibilities.
1419 * The -unixpw option supports Unix username and password
1420 authentication (a simpler variant is the -unixpw_nis option that
1421 works in environments where the encrypted passwords are readable,
1422 e.g. NIS.) The -ssl or -localhost + -stunnel options are enforced
1423 in this mode to prevent password sniffing. As a convenience, these
1424 requirements are lifted if a SSH tunnel can be deduced (but
1425 -localhost still applies.)
1426 * Coupling -unixpw with "-display WAIT:cmd=FINDDISPLAY" or "-display
1427 WAIT:cmd=FINDCREATEDISPLAY" provides a way to allow a user to
1428 login with their UNIX password and have their display connected to
1429 automatically. See the -svc and the -xdmsvc aliases.
1430 * Hooks are provided in the -unixpw_cmd and "-passwdfile
1431 cmd:,custom:..." options to allow you to supply your own
1432 authentication and password lookup programs.
1433 * x11vnc can be configured and built to not depend on X11 libraries
1434 "./configure --without-x" for -rawfb only operation (e.g. embedded
1435 linux console devices.)
1436 * The -rotate option enables you to rotate or reflect the screen
1437 before exporting via VNC. This is intended for use on handhelds
1438 and other devices where the rotation orientation is not "natural".
1439 * The "-ultrafilexfer" alias is provided and improved UltraVNC
1440 filetransfer rates have been achieved.
1441 * Under the "-connect_or_exit host" option x11vnc will exit
1442 immediately unless the reverse connection to host succeeds. The
1443 "-rfbport 0" option disables TCP listening for connections (useful
1444 for this mode.)
1445 * The "-rawfb rand" and "-rawfb none" options are useful for testing
1446 automation scripts, etc., without requiring a full desktop.
1447 * Reduced spewing of information at startup, use "-verbose" (also
1448 "-v") to turn it back on for debugging or if you are going to send
1449 me a problem report.
1450
1451 Here are some Previous Release Notes
1452 _________________________________________________________________
1453
1454 Some Notes:
1455
1456 Both a client and a server: It is sometimes confusing to people that
1457 x11vnc is both a client and a server at the same time. It is an X
1458 client because it connects to the running X server to do the screen
1459 polls. Think of it as a rather efficient "screenshot" program running
1460 continuously. It is a server in the sense that it is a VNC server that
1461 VNC viewers on the network can connect to and view the screen
1462 framebuffer it manages.
1463
1464 When trying to debug problems, remember to think of both roles. E.g.
1465 "how is x11vnc connecting to the X server?", "how is the vncviewer
1466 connecting to x11vnc?", "what permits/restricts the connection?". Both
1467 links may have reachability, permission, and other issues.
1468
1469 Network performance: Whether you are using Xvnc or x11vnc it is
1470 always a good idea to have a solid background color instead of a
1471 pretty background image. Each and every re-exposure of the background
1472 must be resent over the network: better to have that background be a
1473 solid color that compresses very well compared to a photo image. (This
1474 is one place where the X protocol has an advantage over the VNC
1475 protocol.) I suggest using xsetroot, dtstyle or similar utility to set
1476 a solid background while using x11vnc. You can turn the pretty
1477 background image back on when you are using the display directly.
1478 Update: As of Feb/2005 x11vnc has the -solid [color] option that works
1479 on recent GNOME, KDE, and CDE and also on classic X (background image
1480 is on the root window.) Update: As of Oct/2007 x11vnc has the -ncache
1481 option that does a reasonable job caching the background (and other)
1482 pixmap data on the viewer side.
1483
1484 I also find the TightVNC encoding gives the best response for my usage
1485 (Unix <-> Unix over cable modem.) One needs a tightvnc-aware vncviewer
1486 to take advantage of this encoding.
1487
1488 TCP port issues: Notice the lines
1489 18/07/2003 14:36:31 Autoprobing selected port 5900
1490 PORT=5900
1491
1492 in the output. 5900 is the default VNC listening port (just like 6000
1493 is X11's default listening port.) Had port 5900 been taken by some
1494 other application, x11vnc would have next tried 5901. That would mean
1495 the viewer command above should be changed to vncviewer
1496 far-away.east:1. You can force the port with the "-rfbport NNNN"
1497 option where NNNN is the desired port number. If that port is already
1498 taken, x11vnc will exit immediately. The "-N" option will try to match
1499 the VNC display number to the X display. (also see the "SunRay
1500 Gotcha" note below)
1501
1502 Options: x11vnc has (far too) many features that may be activated
1503 via its command line options. Useful options are, e.g., -scale to do
1504 server-side scaling, and -rfbauth passwd-file to use VNC password
1505 protection (the vncpasswd or storepasswd programs, or the x11vnc
1506 -storepasswd option can be used to create the password file.)
1507
1508 Algorithm: How does x11vnc do it? Rather brute-forcedly: it
1509 continuously polls the X11 framebuffer for changes using
1510 XShmGetImage(). When changes are discovered, it instructs libvncserver
1511 which rectangular regions of the framebuffer have changed, and
1512 libvncserver compresses the changes and sends them off to any
1513 connected VNC viewers. A number of applications do similar things,
1514 such as x0rfbserver, krfb, x0vncserver, vino. x11vnc uses a 32 x 32
1515 pixel tile model (the desktop is decomposed into roughly 1000 such
1516 tiles), where changed tiles are found by pseudo-randomly polling 1
1517 pixel tall horizontal scanlines separated vertically by 32 pixels.
1518 This is a surprisingly effective algorithm for finding changed
1519 regions. For keyboard and mouse user input the XTEST extension is used
1520 to pass the input events to the X server. To detect XBell "beeps" the
1521 XKEYBOARD extension is used. If available, the XFIXES extension is
1522 used to retrieve the current mouse cursor shape. Also, if available
1523 the X DAMAGE extension is used to receive hints from the X server
1524 where modified regions on the screen are. This greatly reduces the
1525 system load when not much is changing on the screen and also improves
1526 how quickly the screen is updated.
1527
1528 Barbershop mirrors effect: What if x11vnc is started up, and
1529 vncviewer is then started up on the same machine and displayed on the
1530 same display x11vnc is polling? One might "accidentally" do this when
1531 first testing out the programs. You get an interesting
1532 recursive/feedback effect where vncviewer images keep popping up each
1533 one contained in the previous one and slightly shifted a bit by the
1534 window manager decorations. There will be an even more interesting
1535 effect if -scale is used. Also, if the XKEYBOARD is supported and the
1536 XBell "beeps" once, you get an infinite loop of beeps going off.
1537 Although all of this is mildly exciting it is not much use: you will
1538 normally run and display the viewer on a different machine!
1539 _________________________________________________________________
1540
1541 Sun Ray Notes:
1542
1543 You can run x11vnc on your (connected or disconnected) SunRay session.
1544 Here are some notes on SunRay usage with x11vnc.
1545
1546 _________________________________________________________________
1547
1548 Limitations:
1549
1550 * Due to the polling nature, some activities (opaque window moves,
1551 scrolling), can be pretty choppy/ragged and others (exposures of
1552 large areas) slow. Experiment with interacting a bit differently
1553 than you normally do to minimize the effects (e.g. do fullpage
1554 paging rather than line-by-line scrolling, and move windows in a
1555 single, quick motion.) Recent work has provided the
1556 -scrollcopyrect and -wireframe speedups using the CopyRect VNC
1557 encoding and other things, but they only speed up some activities,
1558 not all.
1559 * A rate limiting factor for x11vnc performance is that graphics
1560 hardware is optimized for writing, not reading (x11vnc reads the
1561 video framebuffer for the screen image data.) The difference can
1562 be a factor of 10 to 1000, and so it usually takes about 0.5-1 sec
1563 to read in the whole video hardware framebuffer (e.g. 5MB for
1564 1280x1024 at depth 24 with a read rate of 5-10MB/sec.) So whenever
1565 activity changes most of the screen (e.g. moving or iconifying a
1566 large window) there is a delay of 0.5-1 sec while x11vnc reads the
1567 changed regions in.
1568 A slow framebuffer read rate will often be the performance
1569 bottleneck on a fast LAN (whereas on slower links the reduced
1570 network bandwidth becomes the bottleneck.)
1571 Note: A quick way to get a 2X speedup of this for x11vnc is to
1572 switch your X server from depth 24 (32bpp) to depth 16 (16bpp.)
1573 You get a 4X speedup going to 8bpp, but the lack of color cells is
1574 usually unacceptable.
1575 To get a sense of the read and write speeds of your video card,
1576 you can run benchmarks like: "x11perf -getimage500", "x11perf
1577 -putimage500", "x11perf -shmput500" and for XFree86 displays with
1578 direct graphics access the "dga" command (press "b" to run the
1579 benchmark and then after a few seconds press "q" to quit.) Even
1580 this "dd if=/dev/fb0 of=/dev/null" often gives a good estimate.
1581 x11vnc also prints out its estimate:
1582 28/02/2009 11:11:07 Autoprobing TCP port
1583 28/02/2009 11:11:07 Autoprobing selected port 5900
1584 28/02/2009 11:11:08 fb read rate: 10 MB/sec
1585 28/02/2009 11:11:08 screen setup finished.
1586 We have seen a few cases where the hardware fb read speed is
1587 greater than 65 MB/sec: on high end graphics workstations from SGI
1588 and Sun, and also from a Linux user using nvidia proprietary
1589 drivers for his nvidia video card. Update 2008: thankfully, these
1590 sped up drivers are becoming more common on Linux and *BSD systems
1591 and that makes x11vnc run somewhat more quickly. Sometimes they
1592 have a read rate of over 400 MB/sec.
1593 On XFree86/Xorg it is actually possible to increase the
1594 framebuffer read speed considerably (10-100 times) by using the
1595 Shadow Framebuffer (a copy of the framebuffer is kept in main
1596 memory and this can be read much more quickly.) To do this one
1597 puts the line Option "ShadowFB" "true" in the Device section of
1598 the /etc/X11/XF86Config or /etc/X11/xorg.conf file. Note that this
1599 disables 2D acceleration at the physical display and so that might
1600 be unacceptable if one plays games, etc. on the machine's local
1601 display. Nevertheless this could be handy in some circumstances,
1602 e.g. if the slower speed while sitting at the physical display was
1603 acceptable (this seems to be true for most video cards these
1604 days.) Unfortunately it does not seem shadowfb can be turned on
1605 and off dynamically...
1606 Another amusing thing one can do is use Xvfb as the X server, e.g.
1607 "xinit $HOME/.xinitrc -- /usr/X11R6/bin/Xvfb :1 -screen 0
1608 1024x768x16" x11vnc can poll Xvfb efficiently via main memory.
1609 It's not exactly clear why one would want to do this instead of
1610 using vncserver/Xvnc, (perhaps to take advantage of an x11vnc
1611 feature, such as framebuffer scaling or built-in SSL encryption),
1612 but we mention it because it may be of use for special purpose
1613 applications. You may need to use the "-cc 4" option to force Xvfb
1614 to use a TrueColor visual instead of DirectColor. See also the
1615 description of the -create option that does all of this
1616 automatically for you (be sure to install the Xvfb package, e.g.
1617 apt-get install xvfb.)
1618 Also, a faster and more accurate way is to use the "dummy"
1619 Xorg/XFree86 device driver (or our Xdummy wrapper script.) See
1620 this FAQ for details.
1621 * Somewhat surprisingly, the X11 mouse (cursor) shape is write-only
1622 and cannot be queried from the X server. So traditionally in
1623 x11vnc the cursor shape stays fixed at an arrow. (see the "-cursor
1624 X" and "-cursor some" options, however, for a partial hack for the
1625 root window, etc.) However, on Solaris using the SUN_OVL overlay
1626 extension, x11vnc can show the correct mouse cursor when the
1627 -overlay option is also supplied. A similar thing is done on IRIX
1628 as well when -overlay is supplied.
1629 More generally, as of Dec/2004 x11vnc supports the new XFIXES
1630 extension (in Xorg and Solaris 10) to query the X server for the
1631 exact cursor shape, this works pretty well except that cursors
1632 with transparency (alpha channel) need to approximated to solid
1633 RGB values (some cursors look worse than others.)
1634 * Audio from applications is of course not redirected (separate
1635 redirectors do exist, e.g. esd, see the FAQ on this below.) The
1636 XBell() "beeps" will work if the X server supports the XKEYBOARD
1637 extension. (Note that on Solaris XKEYBOARD is disabled by default.
1638 Passing +kb to Xsun enables it.)
1639 * The scroll detection algorithm for the -scrollcopyrect option can
1640 give choppy or bunched up transient output and occasionally
1641 painting errors.
1642 * Using -threads can expose some bugs/crashes in libvncserver.
1643
1644 Please feel free to contact me if you have any questions, problems, or
1645 comments about x11vnc, etc. Please be polite, thorough, and not
1646 demanding (sadly, the number of people contacting me that are rude and
1647 demanding is increasing dramatically.)
1648 Also, some people ask if they can make a donation, see this link for
1649 that.
1650
1651 =======================================================================
1652 http://www.karlrunge.com/x11vnc/faq.html:
1653
1654
1655 x11vnc Home Donations
1656 _________________________________________________________________
1657
1658 x11vnc FAQ:
1659
1660
1661 [Building and Starting]
1662
1663 Q-1: I can't get x11vnc to start up. It says "XOpenDisplay failed
1664 (null)" or "Xlib: connection to ":0.0" refused by server Xlib: No
1665 protocol specified" and then exits. What do I need to do?
1666
1667 Q-2: I can't get x11vnc and/or libvncserver to compile.
1668
1669 Q-3: I just built x11vnc successfully, but when I use it my keystrokes
1670 and mouse button clicks are ignored (I am able to move the mouse
1671 though.)
1672
1673 Q-4: Help, I need to run x11vnc on Solaris 2.5.1 (or other old
1674 Unix/Linux) and it doesn't compile!
1675
1676 Q-5: Where can I get a precompiled x11vnc binary for my Operating
1677 System?
1678
1679 Q-6: Where can I get a VNC Viewer binary (or source code) for the
1680 Operating System I will be viewing from?
1681
1682 Q-7: How can I see all of x11vnc's command line options and
1683 documentation on how to use them?
1684
1685 Q-8: I don't like typing arcane command line options every time I
1686 start x11vnc. What can I do? Is there a config file? Or a GUI?
1687
1688 Q-9: How can I get the GUI to run in the System Tray, or at least be a
1689 smaller, simpler icon?
1690
1691 Q-10: How can I get x11vnc to listen on a different port besides the
1692 default VNC port (5900)?
1693
1694 Q-11: My Firewall/Router doesn't allow VNC Viewers to connect to
1695 x11vnc.
1696
1697 Q-12: Is it possible for a VNC Viewer and a VNC Server to connect to
1698 each other even though both are behind Firewalls that block all
1699 incoming connections?
1700
1701 Q-13: Can I make x11vnc more quiet and also go into the background
1702 after starting up?
1703
1704 Q-14: Sometimes when a VNC viewer dies abruptly, x11vnc also dies with
1705 the error message like: "Broken pipe". I'm using the -forever mode and
1706 I want x11vnc to keep running.
1707
1708 Q-15: The Windows TightVNC 1.3.9 Viewer cannot connect to x11vnc.
1709
1710 Q-16: KDE's krdc VNC viewer cannot connect to x11vnc.
1711
1712 Q-17: When I start x11vnc on an Alpha Tru64 workstation the X server
1713 crashes!
1714
1715 Q-18: When running x11vnc on an IBM AIX workstation after a few
1716 minutes the VNC connection freezes.
1717
1718 Q-19: Are there any build-time customizations possible, e.g. change
1719 defaults, create a smaller binary, etc?
1720
1721 [Win2VNC Related]
1722
1723 Q-20: I have two separate machine displays in front of me, one Windows
1724 the other X11: can I use x11vnc in combination with Win2VNC in
1725 dual-screen mode to pass the keystrokes and mouse motions to the X11
1726 display?
1727
1728 Q-21: I am running Win2VNC on my Windows machine and "x11vnc -nofb" on
1729 Unix to pass keyboard and mouse to the Unix monitor. Whenever I start
1730 Win2VNC it quickly disconnects and x11vnc says:
1731 rfbProcessClientNormalMessage: read: Connection reset by peer
1732
1733 Q-22: Can I run "x11vnc -nofb" on a Mac OS X machine to redirect mouse
1734 and keyboard input to it from Windows and X11 machines via Win2VNC and
1735 x2vnc, respectively?
1736
1737 [Color Issues]
1738
1739 Q-23: The X display I run x11vnc on is only 8 bits per pixel (bpp)
1740 PseudoColor (i.e. only 256 distinct colors.) The x11vnc colors may
1741 start out OK, but after a while they are incorrect in certain windows.
1742
1743 Q-24: Color problems: Why are the colors for some windows incorrect in
1744 x11vnc? BTW, my X display has nice overlay/multi-depth visuals of
1745 different color depths: e.g. there are both depth 8 and 24 visuals
1746 available at the same time.
1747
1748 Q-25: I am on a high color system (depth >= 24) but I seem to have
1749 colormap problems. They either flash or everything is very dark.
1750
1751 Q-26: How do I figure out the window id to supply to the -id windowid
1752 option?
1753
1754 Q-27: Why don't menus or other transient windows come up when I am
1755 using the -id windowid option to view a single application window?
1756
1757 Q-28: My X display is depth 24 at 24bpp (instead of the normal depth
1758 24 at 32bpp.) I'm having lots of color and visual problems with x11vnc
1759 and/or vncviewer. What's up?
1760
1761 [Xterminals]
1762
1763 Q-29: Can I use x11vnc to view and interact with an Xterminal (e.g.
1764 NCD) that is not running UNIX and so x11vnc cannot be run on it
1765 directly?
1766
1767 Q-30: How do I get my X permissions (MIT-MAGIC-COOKIE file) correct
1768 for a Unix/Linux machine acting as an Xterminal?
1769
1770 [Sun Rays]
1771
1772 Q-31: I'm having trouble using x11vnc with my Sun Ray session.
1773
1774 [Remote Control]
1775
1776 Q-32: How do I stop x11vnc once it is running in the background?
1777
1778 Q-33: Can I change settings in x11vnc without having to restart it?
1779 Can I remote control it?
1780
1781 [Security and Permissions]
1782
1783 Q-34: How do I create a VNC password for use with x11vnc?
1784
1785 Q-35: Can I make it so -storepasswd doesn't show my password on the
1786 screen?
1787
1788 Q-36: Can I have two passwords for VNC viewers, one for full access
1789 and the other for view-only access to the display?
1790
1791 Q-37: Can I have as many full-access and view-only passwords as I
1792 like?
1793
1794 Q-38: Does x11vnc support Unix usernames and passwords? Can I further
1795 limit the set of Unix usernames who can connect to the VNC desktop?
1796
1797 Q-39: Can I supply an external program to provide my own custom login
1798 method (e.g. Dynamic/One-time passwords or non-Unix (LDAP) usernames
1799 and passwords)?
1800
1801 Q-40: Why does x11vnc exit as soon as the VNC viewer disconnects? And
1802 why doesn't it allow more than one VNC viewer to connect at the same
1803 time?
1804
1805 Q-41: Can I limit which machines incoming VNC clients can connect
1806 from?
1807
1808 Q-42: How do I build x11vnc/libvncserver with libwrap (tcp_wrappers)
1809 support?
1810
1811 Q-43: Can I have x11vnc only listen on one network interface (e.g.
1812 internal LAN) rather than having it listen on all network interfaces
1813 and relying on -allow to filter unwanted connections out?
1814
1815 Q-44: Now that -localhost implies listening only on the loopback
1816 interface, how I can occasionally allow in a non-localhost via the -R
1817 allowonce remote control command?
1818
1819 Q-45: Can I fine tune what types of user input are allowed? E.g. have
1820 some users just be able to move the mouse, but not click or type
1821 anything?
1822
1823 Q-46: Can I prompt the user at the local X display whether the
1824 incoming VNC client should be accepted or not? Can I decide to make
1825 some clients view-only? How about running an arbitrary program to make
1826 the decisions?
1827
1828 Q-47: I start x11vnc as root because it is launched via inetd(8) or a
1829 display manager like gdm(1). Can I have x11vnc later switch to a
1830 different user?
1831
1832 Q-48: I use a screen-lock when I leave my workstation (e.g.
1833 xscreensaver or xlock.) When I remotely access my workstation desktop
1834 via x11vnc I can unlock the desktop fine, but I am worried people will
1835 see my activities on the physical monitor. What can I do to prevent
1836 this, or at least make it more difficult?
1837
1838 Q-49: Can I have x11vnc automatically lock the screen when I
1839 disconnect the VNC viewer?
1840
1841 [Encrypted Connections]
1842
1843 Q-50: How can I tunnel my connection to x11vnc via an encrypted SSH
1844 channel between two Unix machines?
1845
1846 Q-51: How can I tunnel my connection to x11vnc via an encrypted SSH
1847 channel from Windows using an SSH client like Putty?
1848
1849 Q-52: How can I tunnel my connection to x11vnc via an encrypted SSL
1850 channel using an external tool like stunnel?
1851
1852 Q-53: Does x11vnc have built-in SSL tunneling?
1853
1854 Q-54: How do I use VNC Viewers with built-in SSL tunneling?
1855
1856 Q-55: How do I use the Java applet VNC Viewer with built-in SSL
1857 tunneling when going through a Web Proxy?
1858
1859 Q-56: Can Apache web server act as a gateway for users to connect via
1860 SSL from the Internet with a Web browser to x11vnc running on their
1861 workstations behind a firewall?
1862
1863 Q-57: Can I create and use my own SSL Certificate Authority (CA) with
1864 x11vnc?
1865
1866 [Display Managers and Services]
1867
1868 Q-58: How can I run x11vnc as a "service" that is always available?
1869
1870 Q-59: How can I use x11vnc to connect to an X login screen like xdm,
1871 GNOME gdm, KDE kdm, or CDE dtlogin? (i.e. nobody is logged into an X
1872 session yet.)
1873
1874 Q-60: Can I run x11vnc out of inetd(8)? How about xinetd(8)?
1875
1876 Q-61: Can I have x11vnc advertise its VNC service and port via mDNS /
1877 Zeroconf (e.g. Avahi) so VNC viewers on the local network can detect
1878 it automatically?
1879
1880 Q-62: Can I have x11vnc allow a user to log in with her UNIX username
1881 and password and then have it find her X session display on that
1882 machine and then attach to it? How about starting an X session if one
1883 cannot be found?
1884
1885 Q-63: Can I have x11vnc restart itself after it terminates?
1886
1887 Q-64: How do I make x11vnc work with the Java VNC viewer applet in a
1888 web browser?
1889
1890 Q-65: Are reverse connections (i.e. the VNC server connecting to the
1891 VNC viewer) using "vncviewer -listen" and vncconnect(1) supported?
1892
1893 Q-66: Can reverse connections be made to go through a Web or SOCKS
1894 proxy or SSH?
1895
1896 Q-67: Can x11vnc provide a multi-user desktop web login service as an
1897 Apache CGI or PHP script?
1898
1899 Q-68: Can I use x11vnc as a replacement for Xvnc? (i.e. not for a real
1900 display, but for a virtual one I keep around.)
1901
1902 Q-69: How can I use x11vnc on "headless" machines? Why might I want
1903 to?
1904
1905 [Resource Usage and Performance]
1906
1907 Q-70: I have lots of memory, but why does x11vnc fail with shmget:
1908 No space left on device or Minor opcode of failed request: 1
1909 (X_ShmAttach)?
1910
1911 Q-71: How can I make x11vnc use less system resources?
1912
1913 Q-72: How can I make x11vnc use MORE system resources?
1914
1915 Q-73: I use x11vnc over a slow link with high latency (e.g. dialup
1916 modem or broadband), is there anything I can do to speed things up?
1917
1918 Q-74: Does x11vnc support the X DAMAGE Xserver extension to find
1919 modified regions of the screen quickly and efficiently?
1920
1921 Q-75: My OpenGL application shows no screen updates unless I supply
1922 the -noxdamage option to x11vnc.
1923
1924 Q-76: When I drag windows around with the mouse or scroll up and down
1925 things really bog down (unless I do the drag in a single, quick
1926 motion.) Is there anything to do to improve things?
1927
1928 Q-77: Why not do something like wireframe animations to avoid the
1929 windows "lurching" when being moved or resized?
1930
1931 Q-78: Can x11vnc try to apply heuristics to detect when a window is
1932 scrolling its contents and use the CopyRect encoding for a speedup?
1933
1934 Q-79: Can x11vnc do client-side caching of pixel data? I.e. so when
1935 that pixel data is needed again it does not have to be retransmitted
1936 over the network.
1937
1938 Q-80: Does x11vnc support TurboVNC?
1939
1940 [Mouse Cursor Shapes]
1941
1942 Q-81: Why isn't the mouse cursor shape (the little icon shape where
1943 the mouse pointer is) correct as I move from window to window?
1944
1945 Q-82: When using XFIXES cursorshape mode, some of the cursors look
1946 really bad with extra black borders around the cursor and other cruft.
1947 How can I improve their appearance?
1948
1949 Q-83: In XFIXES mode, are there any hacks to handle cursor
1950 transparency ("alpha channel") exactly?
1951
1952 [Mouse Pointer]
1953
1954 Q-84: Why does the mouse arrow just stay in one corner in my
1955 vncviewer, whereas my cursor (that does move) is just a dot?
1956
1957 Q-85: Can I take advantage of the TightVNC extension to the VNC
1958 protocol where Cursor Positions Updates are sent back to all connected
1959 clients (i.e. passive viewers can see the mouse cursor being moved
1960 around by another viewer)?
1961
1962 Q-86: Is it possible to swap the mouse buttons (e.g. left-handed
1963 operation), or arbitrarily remap them? How about mapping button clicks
1964 to keystrokes, e.g. to partially emulate Mouse wheel scrolling?
1965
1966 [Keyboard Issues]
1967
1968 Q-87: How can I get my AltGr and Shift modifiers to work between
1969 keyboards for different languages?
1970
1971 Q-88: When I try to type a "<" (i.e. less than) instead I get ">"
1972 (i.e. greater than)! Strangely, typing ">" works OK!!
1973
1974 Q-89: Extra Character Inserted, E.g.: When I try to type a "<" (i.e.
1975 less than) instead I get "<," (i.e. an extra comma.)
1976
1977 Q-90: I'm using an "international" keyboard (e.g. German "de", or
1978 Danish "dk") and the -modtweak mode works well if the VNC viewer is
1979 run on a Unix/Linux machine with a similar keyboard. But if I run
1980 the VNC viewer on Unix/Linux with a different keyboard (e.g. "us") or
1981 Windows with any keyboard, I can't type some keys like: "@", "$",
1982 "<", ">", etc. How can I fix this?
1983
1984 Q-91: When typing I sometimes get double, triple, or more of my
1985 keystrokes repeated. I'm sure I only typed them once, what can I do?
1986
1987 Q-92: The x11vnc -norepeat mode is in effect, but I still get repeated
1988 keystrokes!!
1989
1990 Q-93: After using x11vnc for a while, I find that I cannot type some
1991 (or any) characters or my mouse clicks and drags no longer have any
1992 effect, or they lead to strange effects. What happened?
1993
1994 Q-94: The machine where I run x11vnc has an AltGr key, but the local
1995 machine where I run the VNC viewer does not. Is there a way I can map
1996 a local unused key to send an AltGr? How about a Compose key as well?
1997
1998 Q-95: I have a Sun machine I run x11vnc on. Its Sun keyboard has just
1999 one Alt key labelled "Alt" and two Meta keys labelled with little
2000 diamonds. The machine where I run the VNC viewer only has Alt keys.
2001 How can I send a Meta keypress? (e.g. emacs needs this)
2002
2003 Q-96: Running x11vnc on HP-UX I cannot type "#" I just get a "3"
2004 instead.
2005
2006 Q-97: Can I map a keystroke to a mouse button click on the remote
2007 machine?
2008
2009 Q-98: How can I get Caps_Lock to work between my VNC viewer and
2010 x11vnc?
2011
2012 [Screen Related Issues and Features]
2013
2014 Q-99: The remote display is larger (in number of pixels) than the
2015 local display I am running the vncviewer on. I don't like the
2016 vncviewer scrollbars, what I can do?
2017
2018 Q-100: Does x11vnc support server-side framebuffer scaling? (E.g. to
2019 make the desktop smaller.)
2020
2021 Q-101: Does x11vnc work with Xinerama? (i.e. multiple monitors joined
2022 together to form one big, single screen.)
2023
2024 Q-102: Can I use x11vnc on a multi-headed display that is not Xinerama
2025 (i.e. separate screens :0.0, :0.1, ... for each monitor)?
2026
2027 Q-103: Can x11vnc show only a portion of the display? (E.g. for a
2028 special purpose application or a very large screen.)
2029
2030 Q-104: Does x11vnc support the XRANDR (X Resize, Rotate and
2031 Reflection) extension? Whenever I rotate or resize the screen x11vnc
2032 just seems to crash.
2033
2034 Q-105: Independent of any XRANDR, can I have x11vnc rotate and/or
2035 reflect the screen that the VNC viewers see? (e.g. for a handheld
2036 whose screen is rotated 90 degrees.)
2037
2038 Q-106: Why is the view in my VNC viewer completely black? Or why is
2039 everything flashing around randomly?
2040
2041 Q-107: I use Linux Virtual Terminals (VT's) to implement 'Fast User
2042 Switching' between users' sessions (e.g. Betty is on Ctrl-Alt-F7,
2043 Bobby is on Ctrl-Alt-F8, and Sid is on Ctrl-Alt-F1: they use those
2044 keystrokes to switch between their sessions.) How come the view in a
2045 VNC viewer connecting to x11vnc is either completely black or
2046 otherwise all messed up unless the X session x11vnc is attached to is
2047 in the active VT?
2048
2049 Q-108: I am using x11vnc where my local machine has "popup/hidden
2050 taskbars" and the remote display where x11vnc runs also has
2051 "popup/hidden taskbars" and they interfere and fight with each other.
2052 What can I do?
2053
2054 Q-109: Help! x11vnc and my KDE screensaver keep switching each other
2055 on and off every few seconds.
2056
2057 Q-110: I am running the compiz 3D window manager (or beryl, MythTv,
2058 Google Earth, or some other OpenGL app) and I do not get screen
2059 updates in x11vnc.
2060
2061 Q-111: Can I use x11vnc to view my VMWare session remotely?
2062
2063 [Exporting non-X11 devices via VNC]
2064
2065 Q-112: Can non-X devices (e.g. a raw framebuffer) be viewed (and even
2066 controlled) via VNC with x11vnc?
2067
2068 Q-113: Can I export the Linux Console (Virtual Terminals) via VNC
2069 using x11vnc?
2070
2071 Q-114: Can I export via VNC a Webcam or TV tuner framebuffer using
2072 x11vnc?
2073
2074 Q-115: Can I connect via VNC to a Qt-embedded/Qt-enhanced/Qtopia
2075 application running on my handheld, cell phone, or PC using the Linux
2076 console framebuffer (i.e. not X11)?
2077
2078 Q-116: How do I inject touch screen input into an
2079 Qt-embedded/Qt-enhanced/Qtopia cell phone such as openmoko/qtmoko Neo
2080 Freerunner?
2081
2082 Q-117: Now that non-X11 devices can be exported via VNC using x11vnc,
2083 can I build it with no dependencies on X11 header files and libraries?
2084
2085 Q-118: How do I cross compile x11vnc for a different architecture than
2086 my Linux i386 or amd64 PC?
2087
2088 Q-119: Does x11vnc support Mac OS X Aqua/Quartz displays natively
2089 (i.e. no X11 involved)?
2090
2091 Q-120: Can x11vnc be used as a VNC reflector/repeater to improve
2092 performance for the case of a large number of simultaneous VNC viewers
2093 (e.g. classroom broadcasting or a large demo)?
2094
2095 Q-121: Can x11vnc be used during a Linux, Solaris, etc. system
2096 Installation so the Installation can be done remotely?
2097
2098 [Misc: Clipboard, File Transfer/Sharing, Printing, Sound, Beeps,
2099 Thanks, etc.]
2100
2101 Q-122: Does the Clipboard/Selection get transferred between the
2102 vncviewer and the X display?
2103
2104 Q-123: Can I use x11vnc to record a Shock Wave Flash (or other format)
2105 video of my desktop, e.g. to record a tutorial or demo?
2106
2107 Q-124: Can I transfer files back and forth with x11vnc?
2108
2109 Q-125: Which UltraVNC extensions are supported?
2110
2111 Q-126: Can x11vnc emulate UltraVNC's Single Click helpdesk mode for
2112 Unix? I.e. something very simple for a naive user to initiate a
2113 reverse vnc connection from their Unix desktop to a helpdesk
2114 operator's VNC Viewer.
2115
2116 Q-127: Can I (temporarily) mount my local (viewer-side) Windows/Samba
2117 File share on the machine where x11vnc is running?
2118
2119 Q-128: Can I redirect CUPS print jobs from the remote desktop where
2120 x11vnc is running to a printer on my local (viewer-side) machine?
2121
2122 Q-129: How can I hear the sound (audio) from the remote applications
2123 on the desktop I am viewing via x11vnc?
2124
2125 Q-130: Why don't I hear the "Beeps" in my X session (e.g. when typing
2126 tput bel in an xterm)?
2127
2128 Q-131: Does x11vnc work with IPv6?
2129
2130 Q-132: Thanks for your program or for your help! Can I make a
2131 donation?
2132 _________________________________________________________________
2133
2134
2135 [Building and Starting]
2136
2137 Q-1: I can't get x11vnc to start up. It says "XOpenDisplay failed
2138 (null)" or "Xlib: connection to ":0.0" refused by server Xlib: No
2139 protocol specified" and then exits. What do I need to do?
2140
2141 For the former error, you need to specify the X display to connect to
2142 (it also needs to be on the same machine the x11vnc process is to run
2143 on.) Set your DISPLAY environment variable (or use the -display
2144 option) to specify it. Nearly always the correct value will be ":0"
2145 (in fact, x11vnc will now assume :0 if given no other information.)
2146
2147
2148 For the latter error, you need to set up the X11 permissions
2149 correctly.
2150
2151 To make sure X11 permissions are the problem do this simple test:
2152 while sitting at the physical X display open a terminal window
2153 (gnome-terminal, xterm, etc.) You should be able to run x11vnc
2154 successfully without any need for special steps or command line
2155 options in that terminal (i.e. just type "x11vnc".) If that works OK
2156 then you know X11 permissions are the only thing preventing it from
2157 working when you try to start x11vnc via, say, a remote shell.
2158
2159 How to Solve: See the xauth(1), Xsecurity(7), and xhost(1) man pages
2160 or this Howto for much info on X11 permissions. For example, you may
2161 need to set your XAUTHORITY environment variable (or use the -auth
2162 option) to point to the correct MIT-MAGIC-COOKIE file (e.g.
2163 /home/joe/.Xauthority or /var/gdm/:0.Xauth or /var/lib/kdm/A:0-crWk72K
2164 or /tmp/.gdmzndVlR, etc, etc.), or simply be sure you run x11vnc as
2165 the correct user (i.e. the user who is logged into the X session you
2166 wish to view.)
2167
2168 Note: The MIT cookie file contains the secret key that allows x11vnc
2169 to connect to the desired X display.
2170
2171 If, say, sshd has set XAUTHORITY to point to a random file it has
2172 created for X forwarding that will cause problems. (Under some
2173 circumstances even su(1) and telnet(1) can set XAUTHORITY. See also
2174 the gdm parameter NeverPlaceCookiesOnNFS that sets XAUTHORITY to a
2175 random filename in /tmp for the whole X session.)
2176
2177 Running x11vnc as root is often not enough: you need to know where the
2178 MIT-MAGIC-COOKIE file for the desired X display is.
2179
2180 Example solution:
2181 x11vnc -display :0 -auth /var/gdm/:0.Xauth
2182
2183 (this is for the display manager gdm and requires root permission to
2184 read the gdm cookie file, see this faq for other display manager
2185 cookie file names.)
2186
2187 Note as of Feb/2007 you can also try the -find option instead of
2188 "-display ..." and see if that finds your display and Xauthority.
2189
2190 Less safe, but to avoid figuring out where the correct XAUTHORITY file
2191 is, if the person sitting at the physical X session types "xhost
2192 +localhost" then one should be able to attach x11vnc to the session
2193 (from the same machine.) The person could then type "xhost -localhost"
2194 after x11vnc has connected to go back to the default permissions.
2195 Also, for some situations the "-users lurk=" option may soon be of use
2196 (please read the documentation on the -users option.)
2197
2198 To test out your X11 permissions from a remote shell, set DISPLAY and
2199 possibly XAUTHORITY (see your shell's man page, bash(1), tcsh(1), on
2200 how to set environment variables) and type xdpyinfo in the same place
2201 you will be typing (or otherwise running) x11vnc. If information is
2202 printed out about the X display (screen sizes, supported extensions,
2203 color visuals info) that means the X11 permissions are set up
2204 properly: xdpyinfo successfully connected to DISPLAY! You could also
2205 type xclock and make sure no errors are reported (a clock should
2206 appear on the X display, press Ctrl-C to stop it.) If these work, then
2207 typing "x11vnc" in the same environment should also work.
2208
2209 Important: if you cannot get your X11 permissions so that the xdpyinfo
2210 or xclock tests work, x11vnc also will not work (all of these X
2211 clients must be allowed to connect to the X server to function
2212 properly.)
2213
2214 Firewalls: Speaking of permissions, it should go without saying that
2215 the host-level firewall will need to be configured to allow
2216 connections in on a port. E.g. 5900 (default VNC port) or 22 (default
2217 SSH port for tunnelling VNC.) Most systems these days have firewalls
2218 turned on by default, so you will actively have to do something to
2219 poke a hole in the firewall at the desired port number. See your
2220 system administration tool for Firewall settings (Yast, Firestarter,
2221 etc.)
2222
2223
2224 Q-2: I can't get x11vnc and/or libvncserver to compile.
2225
2226 Make sure you have gcc (or other C compiler) and all of the required
2227 libraries and the corresponding -dev/-devel packages installed. These
2228 include Xorg/XFree86, libX11, libjpeg, libz, libssl, ... and don't
2229 forget the devs: libjpeg-dev, libssl-dev ...
2230
2231 The most common build problem that people encounter is that the
2232 necessary X11 libraries are installed on their system however it does
2233 not have the corresponding -dev/-devel packages installed. These dev
2234 packages include C header files and build-time .so symlink. It is a
2235 shame the current trend in distros is to not install the dev package
2236 by default when the the library runtime package is installed... (it
2237 diminishes the power of open source)
2238
2239 As of Nov/2006 here is a list of libraries that x11vnc usually likes
2240 to use:
2241 libc.so libX11.so libXtst.so libXext.so
2242 libXfixes.so libXdamage.so libXinerama.so libXrandr.so
2243 libz.so libjpeg.so libpthread.so
2244 libssl.so libcrypto.so libcrypt.so
2245
2246 although x11vnc will be pretty usable with the subset: libc.so,
2247 libX11.so, libXtst.so, libXext.so, libz.so, and libjpeg.so.
2248
2249 After running the libvncserver configure, carefully examine the output
2250 and the messages in the config.log file looking for missing
2251 components. For example, if the configure output looks like:
2252 checking how to run the C preprocessor... gcc -E
2253 checking for X... no
2254 checking for XkbSelectEvents in -lX11... no
2255 checking for XineramaQueryScreens in -lXinerama... no
2256 checking for XTestFakeKeyEvent in -lXtst... no
2257
2258 or even worse:
2259 checking for C compiler default output file name... configure: error:
2260 C compiler cannot create executables
2261 See `config.log' for more details.
2262
2263 there is quite a bit wrong with the build environment. Hopefully
2264 simply adding -dev packages and/or gcc or make will fix it.
2265
2266 For Debian the list seems to be:
2267 gcc
2268 make
2269 libc6-dev
2270 libjpeg8-dev (formerly libjpeg62-dev)
2271 libx11-dev
2272 x11proto-core-dev (formerly x-dev)
2273 libxext-dev
2274 libxtst-dev
2275 libxdamage-dev
2276 libxfixes-dev
2277 libxrandr-dev
2278 libxinerama-dev
2279 libxss-dev (formerly xlibs-static-dev)
2280 zlib1g-dev
2281 libssl-dev
2282 libavahi-client-dev
2283 linux-libc-dev (only needed for linux console rawfb support)
2284
2285 Note that depending on your OS version the above names may have been
2286 changed and/or additional packages may be needed.
2287
2288 For Redhat the list seems to be:
2289 gcc
2290 make
2291 glibc-devel
2292 libjpeg-devel
2293 libX11-devel
2294 xorg-x11-proto-devel
2295 libXdamage-devel
2296 libXfixes-devel
2297 libXrandr-devel
2298 zlib-devel
2299 openssl-devel
2300 avahi-devel
2301 kernel-headers (only needed for linux console rawfb support)
2302
2303 For other distros or OS's the package names may not be the same but
2304 will look similar. Also, distros tend to rename packages as well so
2305 the above list may be out of date. So only use the above lists as
2306 hints for the package names that are needed.
2307
2308 Have a look at Misc. Build Problems for additional fixes.
2309
2310 Note: there is growing trend in Linux and other distros to slice up
2311 core X11 software into more and smaller packages. So be prepared for
2312 more headaches compiling software...
2313
2314
2315 Q-3: I just built x11vnc successfully, but when I use it my keystrokes
2316 and mouse button clicks are ignored (I am able to move the mouse
2317 though.)
2318
2319 This is most likely due to you not having a working build environment
2320 for the XTEST client library libXtst.so. The library is probably
2321 present on your system, but the package installing the build header
2322 file is missing.
2323
2324 If you were watching carefully while configure was running you would
2325 have seen:
2326 checking for XTestFakeKeyEvent in -lXtst... no
2327
2328 The solution is to add the necessary build environment package (and
2329 the library package if that is missing too.) On Debian the build
2330 package is libxtst-dev. Other distros/OS's may have it in another
2331 package.
2332
2333 x11vnc will build without support for this library (e.g. perhaps one
2334 wants a view-only x11vnc on a stripped down or embedded system...) And
2335 at runtime it will also continue to run even if the X server it
2336 connects to does not support XTEST. In both cases it cannot inject
2337 keystrokes or button clicks since XTEST is needed for that (it can
2338 still move the mouse pointer using the X API XWarpPointer().)
2339
2340 You will see a warning message something like this at run time:
2341 20/03/2005 22:33:09 WARNING: XTEST extension not available (either missing fr
2342 om
2343 20/03/2005 22:33:09 display or client library libXtst missing at build time
2344 .)
2345 20/03/2005 22:33:09 MOST user input (pointer and keyboard) will be DISCARDE
2346 D.
2347 20/03/2005 22:33:09 If display does have XTEST, be sure to build x11vnc wit
2348 h
2349 20/03/2005 22:33:09 a working libXtst build environment (e.g. libxtst-dev,
2350 20/03/2005 22:33:09 or other packages.)
2351 20/03/2005 22:33:09 No XTEST extension, switching to -xwarppointer mode for
2352 20/03/2005 22:33:09 pointer motion input.
2353
2354 Also, as of Nov/2006 there will be a configure build time warning as
2355 well:
2356 ...
2357 checking for XFixesGetCursorImage in -lXfixes... yes
2358 checking for XDamageQueryExtension in -lXdamage... yes
2359 configure: WARNING:
2360 ==========================================================================
2361 A working build environment for the XTEST extension was not found (libXtst).
2362 An x11vnc built this way will be only barely usable. You will be able to
2363 move the mouse but not click or type. There can also be deadlocks if an
2364 application grabs the X server.
2365
2366 It is recommended that you install the necessary development packages
2367 for XTEST (perhaps it is named something like libxtst-dev) and run
2368 configure again.
2369 ==========================================================================
2370
2371
2372 Q-4: Help, I need to run x11vnc on Solaris 2.5.1 (or other old
2373 Unix/Linux) and it doesn't compile!
2374
2375 We apologize that x11vnc does not build cleanly on older versions of
2376 Solaris, Linux, etc.: very few users are on these old releases.
2377
2378 We have heard that since Dec/2004 a Solaris 2.6 built x11vnc will run
2379 on Solaris Solaris 2.5 and 2.5.1 (since a workaround for XConvertCase
2380 is provided.)
2381
2382 In any event, here is a workaround for Solaris 2.5.1 (and perhaps
2383 earlier and perhaps non-Solaris):
2384
2385 First use the environment settings (CPPFLAGS, LDFLAGS, etc.) in the
2386 above Solaris build script to run the configure command. That should
2387 succeed without failure. Then you have to hand edit the autogenerated
2388 rfb/rfbconfig.h file in the source tree, and just before the last
2389 #endif at the bottom of that file insert these workaround lines:
2390 struct timeval _tmp_usleep_tv;
2391 #define usleep(x) \
2392 _tmp_usleep_tv.tv_sec = (x) / 1000000; \
2393 _tmp_usleep_tv.tv_usec = (x) % 1000000; \
2394 select(0, NULL, NULL, NULL, &_tmp_usleep_tv);
2395 int gethostname(char *name, int namelen);
2396 long random();
2397 int srandom(unsigned int seed);
2398 #undef LIBVNCSERVER_HAVE_LIBPTHREAD
2399 #define SHUT_RDWR 2
2400 typedef unsigned int in_addr_t;
2401 #define snprintf(a, n, args...) sprintf((a), ## args)
2402
2403 Then run make with the Solaris build script environment, everything
2404 should compile without problems, and the resulting x11vnc binary
2405 should work OK. If some non-x11vnc related programs fail (e.g. test
2406 programs) and the x11vnc binary is not created try "make -k" to have
2407 it keep going. Similar sorts of kludges in rfb/rfbconfig.h can be done
2408 on other older OS (Solaris, Linux, ...) releases.
2409
2410 Here are some notes for similar steps that need to be done to build on
2411 SunOS 4.x
2412
2413 Please let us know if you had to use the above workaround (and whether
2414 it worked or not.) If there is enough demand we will try to push clean
2415 compilations back to earlier Solaris, Linux, etc, releases.
2416
2417
2418 Q-5: Where can I get a precompiled x11vnc binary for my Operating
2419 System?
2420
2421 Hopefully the build steps above and FAQ provide enough info for a
2422 painless compile for most environments. Please report problems with
2423 the x11vnc configure, make, etc. on your system (if your system is
2424 known to compile other GNU packages successfully.)
2425
2426 There are precompiled x11vnc binaries built by other groups that are
2427 available at the following locations:
2428 Slackware: (.tgz) http://www.linuxpackages.net/
2429
2430 SuSE: (.rpm) http:/software.opensuse.org/ Gentoo: (info)
2431 http://gentoo-wiki.com/ and http://gentoo-portage.com/ FreeBSD: (.tbz)
2432 http://www.freebsd.org/ http://www.freshports.org/net/x11vnc NetBSD:
2433 (src) http://pkgsrc.se/x11/x11vnc OpenBSD: (.tgz) http://openports.se/
2434 Arch Linux: (.tgz) http://www.archlinux.org/ Nokia 770 (.deb)
2435 http://mike.saunby.googlepages.com/x11vncfornokia7702 Sharp Zaurus
2436 http://www.focv.com/ Debian: (.deb) http://packages.debian.org/x11vnc
2437 Redhat/Fedora: (.rpm) http://packages.sw.be/x11vnc RPMforge
2438 http://dag.wieers.com/rpm/packages/x11vnc/ (N.B.: unmaintained after
2439 0.9.3) Solaris: (pkg) http://www.sunfreeware.com/
2440
2441 If the above binaries don't work and building x11vnc on your OS fails
2442 (and all else fails!) you can try one of My Collection of x11vnc
2443 Binaries for various OS's and x11vnc releases.
2444
2445 As a general note, the x11vnc program is simple enough you don't
2446 really need to install a package: the binary will in most cases work
2447 as is and from any location (as long as your system libraries are not
2448 too old, etc.) So, for Linux distributions that are not one of the
2449 above, the x11vnc binary from the above packages has a good chance of
2450 working. You can "install" it by just copying the x11vnc binary to the
2451 desired directory in your PATH. Tip on extracting files from a Debian
2452 package: extract the archive via a command like: "ar x
2453 x11vnc_0.6-2_i386.deb" and then you can find the binary in the
2454 resulting data.tar.gz tar file. Also, rpm2cpio(1) is useful in
2455 extracting files from rpm packages.
2456
2457 If you use a standalone binary like this and also want x11vnc to serve
2458 up the Java VNC Viewer jar file (either SSL enabled or regular one),
2459 then you will need to extract the classes subdirectory from the source
2460 tarball and point x11vnc to it via the -httpdir option. E.g.:
2461 x11vnc -httpdir /path/to/x11vnc-0.9.9/classes/ssl ...
2462
2463
2464 Q-6: Where can I get a VNC Viewer binary (or source code) for the
2465 Operating System I will be viewing from?
2466
2467 To obtain VNC viewers for the viewing side (Windows, Mac OS, or Unix)
2468 try here:
2469 * http://www.tightvnc.com/download.html
2470 * http://www.realvnc.com/download-free.html
2471 * http://sourceforge.net/projects/cotvnc/
2472 * http://www.ultravnc.com/
2473 * Our Enhanced TightVNC Viewer (SSVNC)
2474
2475 [ssvnc.gif]
2476
2477
2478 Q-7: How can I see all of x11vnc's command line options and
2479 documentation on how to use them?
2480
2481 Run: x11vnc -opts to list just the option names or run: x11vnc
2482 -help for long descriptions about each option. The output is listed
2483 here as well. Yes, x11vnc does have a lot of options, doesn't it...
2484
2485
2486 Q-8: I don't like typing arcane command line options every time I
2487 start x11vnc. What can I do? Is there a config file? Or a GUI?
2488
2489 You could create a shell script that calls x11vnc with your options:
2490 #!/bin/sh
2491 #
2492 # filename: X11vnc (i.e. not "x11vnc")
2493 # It resides in a directory in $PATH. "chmod 755 X11vnc" has been run on it.
2494 #
2495 x11vnc -wait 50 -localhost -rfbauth $HOME/.vnc/passwd -display :0 $*
2496
2497 a similar thing can be done via aliases in your shell (bash, tcsh,
2498 csh, etc..)
2499
2500 Or as of Jun/2004 you can use the simple $HOME/.x11vncrc config file
2501 support. If that file exists, each line is taken as a command line
2502 option. E.g. the above would be:
2503 # this is a comment in my ~/.x11vncrc file
2504 wait 50 # this is a comment to the end of the line.
2505 -localhost # note: the leading "-" is optional.
2506 rfbauth /home/fred/.vnc/passwd
2507 display :0
2508
2509 As of Dec/2004 there is now a simple Tcl/Tk GUI based on the
2510 remote-control functionality ("-R") that was added. The /usr/bin/wish
2511 program is needed for operation. The gui is not particularly
2512 user-friendly, it just provides a point and click mode to set all the
2513 many x11vnc parameters and obtain help on them. It is also very useful
2514 for testing. See the -gui option for more info. Examples: "x11vnc ...
2515 -gui" and "x11vnc ... -gui other:0" in the latter case the gui is
2516 displayed on other:0, not the X display x11vnc is polling. There is
2517 also a "-gui tray" system tray mode.
2518
2519 [tkx11vnc.gif]
2520
2521 NOTE: You may need to install the "wish" or "tk" or "tk8.4" package
2522 for the gui mode to work (the package name depends on your OS/distro.)
2523 The tcl/tk "wish" interpreter is used. In debian (and so ubuntu too)
2524 one would run "apt-get install tk" or perhaps "apt-get install tk8.4"
2525
2526
2527 Q-9: How can I get the GUI to run in the System Tray, or at least be a
2528 smaller, simpler icon?
2529
2530 As of Jul/2005 the gui can run in a more friendly small icon mode
2531 "-gui icon" or in the system tray: "-gui tray". It has balloon status,
2532 a simple menu, and a Properities dialog. The full, complicated, gui is
2533 only available under "Advanced". Other improvements were added as
2534 well. Try "Misc -> simple_gui" for a gui with fewer esoteric menu
2535 items.
2536
2537 If the gui fails to embed itself in the system tray, do a retry via
2538 "Window View -> icon" followed by "Window View -> tray" with the popup
2539 menu.
2540
2541 For inexperienced users starting up x11vnc and the GUI while sitting
2542 at the physical X display (not remotely), using something like "x11vnc
2543 -display :0 -gui tray=setpass" might be something for them that they
2544 are accustomed to in a Desktop environment (it prompts for an initial
2545 password, etc.) This is a basic "Share My Desktop" usage mode.
2546
2547 As of Nov/2008 in x11vnc 0.9.6 there is a desktop menu item
2548 (x11vnc.desktop) that runs this command:
2549 x11vnc -gui tray=setpass -rfbport PROMPT -logfile %HOME/.x11vnc.log.%VNCDISP
2550 LAY
2551
2552 which also prompts for which VNC port to use and a couple other
2553 parameters.
2554
2555
2556 Q-10: How can I get x11vnc to listen on a different port besides the
2557 default VNC port (5900)?
2558
2559 Use something like, e.g., "x11vnc -rfbport 5901" to force it to use
2560 port 5901 (this is VNC display :1.) If something else is using that
2561 port x11vnc will exit immediately. If you do not supply the -rfbport
2562 option, it will autoprobe starting at 5900 and work its way up to 5999
2563 looking for a free port to listen on. In that case, watch for the
2564 PORT=59xx line to see which port it found, then subtract 5900 from it
2565 for the VNC display number to enter into the VNC Viewer(s).
2566
2567 The "-N" option will try to match the VNC display number to the X
2568 display (e.g. X11 DISPLAY of :5 (port 6005) will have VNC display :5
2569 (port 5905).)
2570
2571 Also see the "-autoport n" option to indicated at which value the auto
2572 probing should start at.
2573
2574
2575 Q-11: My Firewall/Router doesn't allow VNC Viewers to connect to
2576 x11vnc.
2577
2578 See the Firewalls/Routers discussion.
2579
2580
2581 Q-12: Is it possible for a VNC Viewer and a VNC Server to connect to
2582 each other even though both are behind Firewalls that block all
2583 incoming connections?
2584
2585 This is very difficult or impossible to do unless a third machine,
2586 reachable by both, is used as a relay. So we assume a third machine is
2587 somehow being used as a relay.
2588
2589 (Update: It may be possible to do "NAT-2-NAT" without a relay machine
2590 by using a UDP tunnel such as http://samy.pl/pwnat/. All that is
2591 required is that both NAT firewalls allow in UDP packets from an IP
2592 address to which a UDP packet has recently been sent to. If you try it
2593 out let us know how it went.)
2594
2595 In the following discussion, we will suppose port 5950 is being used
2596 on the relay machine as the VNC port for the rendezvous.
2597
2598 A way to rendezvous is to have the VNC Server start a reverse
2599 connection to the relay machine:
2600 x11vnc -connect third-machine.net:5950 ...
2601
2602 and the VNC viewer forward connects as usual:
2603 vncviewer third-machine.net:50
2604
2605 Or maybe two ports would be involved, e.g. the viewer goes to display
2606 :51 (5951.) It depends on the relay software being used.
2607
2608 What software to run on third-machine? A TCP relay of some sort could
2609 be used... Try a google search on "tcp relay" or "ip relay". However,
2610 note that this isn't a simple redirection because it hooks up two
2611 incoming connections. You can look at our UltraVNC repeater
2612 implementation ultravnc_repeater.pl for ideas and possibly to
2613 customize.
2614
2615 Also, if you are not the admin of third-machine you'd have to convince
2616 the owner to allow you to install this software (and he would likely
2617 need to open his server's firewall to allow the port through.)
2618
2619 It is recommended that SSL is used for encryption (e.g. "-ssl SAVE")
2620 when going over the internet.
2621
2622 We have a prototype for performing a rendezvous via a Web Server
2623 acting as the relay machine. Download the vncxfer CGI script and see
2624 the instructions at the top.
2625
2626 Once that CGI script is set up on the website, both users go to, say,
2627 http://somesite.com/vncxfer (or maybe a "/cgi-bin" directory or ".cgi"
2628 suffix must be used.) Previously, both have agreed on the same session
2629 name (say by phone or email) , e.g. "5cows", and put that into the
2630 entry form on the vncxfer starting page (hopefully separated by a few
2631 seconds, so the relay helper can fully start up at the first request.)
2632
2633 The page returned tells them the hostname and port number and possible
2634 command to use for forward (VNC Viewer) and reverse (VNC Server, i.e.
2635 x11vnc) connections as described above.
2636
2637 Also since Oct/2007, x11vnc can connect directly (no web browser),
2638 like this:
2639 x11vnc ... -connect localhost:0 -proxy 'http://somesite.com/vncxfer?session=
2640 5cows&'
2641
2642 Unfortunately the prototype requires that the Web server's firewall
2643 allow in the port (e.g. 5950) used for the rendezvous. Most web
2644 servers are not configured to do this, so you would need to ask the
2645 admin to do this for you. Nearly all free webspace sites, e.g.
2646 www.zendurl.com, will not allow your CGI script to be an open relay
2647 like this. (If you find one that does allow this, let me know!)
2648
2649 Maybe someday a clever trick will be thought up to relax the listening
2650 port requirement (e.g. use HTTP/CGI itself for the transfer... it is
2651 difficult to emulate a full-duplex TCP connection with them.)
2652
2653 See also the Firewalls/Routers discussion and Reverse Connection Proxy
2654 discussion.
2655
2656
2657 SSH method: If both users (i.e. one on Viewer-side and the other on
2658 x11vnc server side) have SSH access to a common machine on the
2659 internet (or otherwise mutually reachable), then SSH plumbing can be
2660 used to solve this problem. The users create SSH tunnels going through
2661 the SSH login machine.
2662
2663 Instead of assuming port 5900 is free on the SSH machine, we will
2664 assume both users agreed to use 5933. This will illustrate how to use
2665 a different port for the redir. It could be any port, what matters is
2666 that both parties refer to the same one.
2667
2668 Set up the Tunnel from the VNC Server side:
2669 ssh -t -R 5933:localhost:5900 user (a] third-machine.net
2670
2671 Set up the Tunnel from the VNC Viewer side:
2672 ssh -t -L 5900:localhost:5933 user (a] third-machine.net
2673
2674 Run Server on the VNC Server side:
2675 x11vnc -rfbport 5900 -localhost ...
2676
2677 Run Viewer on the VNC Viewer side:
2678 vncviewer -encodings "copyrect tight zrle hextile" localhost:0
2679
2680 (we assume the old-style -encodings option needs to be used. See here
2681 for details.)
2682
2683 If the SSH machine has been configured (see sshd_config(5)) with the
2684 option GatewayPorts=yes, then the tunnel set up by the VNC Server will
2685 be reachable directly by the VNC viewer (as long as the SSH machine's
2686 firewall does not block the port, 5933 in this example.) So in that
2687 case the Viewer side does not need to run any ssh command, but rather
2688 only runs:
2689 vncviewer third-machine.net:33
2690
2691 In this case we recommend SSL be used for encryption.
2692
2693 The creation of both tunnels can be automated. As of Oct/2007 the -ssh
2694 x11vnc option is available and so only this command needs to be run on
2695 the VNC Server side:
2696 x11vnc -ssh user (a] third-machine.net:33 ...
2697
2698 (the SSH passphrase may need to be supplied.)
2699
2700 To automate on the VNC Viewer side, the user can use the Enhanced
2701 TightVNC Viewer (SSVNC) by:
2702 * Clicking on 'Use SSH'
2703 * Entering user (a] third-machine.net:33 into 'VNC Host:Display' entry
2704 box
2705 * Clicking on 'Connect'
2706
2707 As above, if the SSH GatewayPorts=yes setting is configured the Viewer
2708 side doesn't need to create a SSH tunnel. In SSVNC the Viewer user
2709 could instead select 'Use SSL' and then, e.g., on the Server side
2710 supply "-ssl SAVE" to x11vnc. Then end-to-end SSL encryption would be
2711 used (in addition to the SSH encryption on the Server-side leg.)
2712
2713
2714 Q-13: Can I make x11vnc more quiet and also go into the background
2715 after starting up?
2716
2717 Use the -q and -bg options, respectively. (also: -quiet is an alias
2718 for -q)
2719
2720 Note that under -bg the stderr messages will be lost unless you use
2721 the "-o logfile" option.
2722
2723
2724 Q-14: Sometimes when a VNC viewer dies abruptly, x11vnc also dies with
2725 the error message like: "Broken pipe". I'm using the -forever mode and
2726 I want x11vnc to keep running.
2727
2728 As of Jan/2004 the SIGPIPE signal is ignored. So if a viewer client
2729 terminates abruptly, libvncserver will notice on the next I/O
2730 operation and will close the connection and continue on.
2731
2732 Up until of Apr/2004 the above fix only works for BSD signal systems
2733 (Linux, FreeBSD, ...) For SYSV systems there is a workaround in place
2734 since about Jun/2004.
2735
2736
2737 Q-15: The Windows TightVNC 1.3.9 Viewer cannot connect to x11vnc.
2738
2739 This appears to be fixed in x11vnc version 0.9 and later. If you need
2740 to use an earlier version of x11vnc, try using the "-rfbversion 3.7"
2741 option. In general sometimes one can get a misbehaving viewer to work
2742 by supplying rfb versions 3.7 or 3.3.
2743
2744
2745 Q-16: KDE's krdc VNC viewer cannot connect to x11vnc.
2746
2747 This has been fixed in x11vnc version 0.8.4. More info here, here, and
2748 here.
2749
2750
2751 Q-17: When I start x11vnc on an Alpha Tru64 workstation the X server
2752 crashes!
2753
2754 This is a bug in the X server obviously; an X client should never be
2755 able to crash it.
2756
2757 The problem seems to be with the RECORD X extension and so a
2758 workaround is to use the "-noxrecord" x11vnc command line option.
2759
2760
2761 Q-18: When running x11vnc on an IBM AIX workstation after a few
2762 minutes the VNC connection freezes.
2763
2764 One user reports when running x11vnc on AIX 5.3 in his CDE session
2765 after a few minutes or seconds x11vnc will "freeze" (no more updates
2766 being sent, etc.) The freezing appeared to be worse for versions later
2767 than 0.9.2.
2768
2769 The problem seems to be with the RECORD X extension on AIX and so a
2770 workaround is to use the "-noxrecord" x11vnc command line option. The
2771 user found no freezes occurred when using that option.
2772
2773
2774 Q-19: Are there any build-time customizations possible, e.g. change
2775 defaults, create a smaller binary, etc?
2776
2777 There are some options. They are enabled by adding something like
2778 -Dxxxx=1 to the CPPFLAGS environment variable before running configure
2779 (see the build notes for general background.)
2780 /*
2781 * Mar/2006
2782 * Build-time customization via CPPFLAGS.
2783 *
2784 * Summary of options to include in CPPFLAGS for custom builds:
2785 *
2786 * -DVNCSHARED to have the vnc display shared by default.
2787 * -DFOREVER to have -forever on by default.
2788 * -DNOREPEAT=0 to have -repeat on by default.
2789 * -DADDKEYSYMS=0 to have -noadd_keysyms the default.
2790 *
2791 * -DREMOTE_DEFAULT=0 to disable remote-control on by default (-yesremote.)
2792 * -DREMOTE_CONTROL=0 to disable remote-control mechanism completely.
2793 * -DEXTERNAL_COMMANDS=0 to disable the running of all external commands.
2794 * -DFILEXFER=0 disable filexfer.
2795 *
2796 * -DHARDWIRE_PASSWD=... hardwired passwords, quoting necessary.
2797 * -DHARDWIRE_VIEWPASSWD=...
2798 * -DNOPW=1 make -nopw the default (skip warning)
2799 * -DUSEPW=1 make -usepw the default
2800 * -DPASSWD_REQUIRED=1 exit unless a password is supplied.
2801 * -DPASSWD_UNLESS_NOPW=1 exit unless a password is supplied and no -nopw.
2802 *
2803 * -DWIREFRAME=0 to have -nowireframe as the default.
2804 * -DWIREFRAME_COPYRECT=0 to have -nowirecopyrect as the default.
2805 * -DWIREFRAME_PARMS=... set default -wirecopyrect parameters.
2806 * -DSCROLL_COPYRECT=0 to have -noscrollcopyrect as the default.
2807 * -DSCROLL_COPYRECT_PARMS=... set default -scrollcopyrect parameters.
2808 * -DSCALING_COPYRECT=0
2809 * -DXDAMAGE=0 to have -noxdamage as the default.
2810 * -DSKIPDUPS=0 to have -noskip_dups as the default or vice versa.
2811 *
2812 * -DPOINTER_MODE_DEFAULT={0,1,2,3,4} set default -pointer_mode.
2813 * -DBOLDLY_CLOSE_DISPLAY=0 to not close X DISPLAY under -rawfb.
2814 * -DSMALL_FOOTPRINT=1 for smaller binary size (no help, no gui, etc)
2815 * use 2 or 3 for even smaller footprint.
2816 * -DNOGUI do not include the gui tkx11vnc.
2817 * -DPOLL_8TO24_DELAY=N
2818 * -DDEBUG_XEVENTS=1 enable printout for X events.
2819 *
2820 * Set these in CPPFLAGS before running configure. E.g.:
2821 *
2822 * % env CPPFLAGS="-DFOREVER -DREMOTE_CONTROL=0" ./configure
2823 * % make
2824 */
2825
2826 If other things (e.g. "-I ...") are needed in CPPFLAGS add them as
2827 well.
2828
2829 On some systems is seems you need to set LC_ALL=C for configure to
2830 work properly...
2831
2832 Be careful the following two variables: HARDWIRE_PASSWD and
2833 HARDWIRE_VIEWPASSWD. If set (remember to include the double quotes
2834 around the string), they will be used as default values for the
2835 -passwd and -viewpasswd options. Of course the strings will exist
2836 unobscured in the x11vnc binary: it better not be readable by
2837 unintendeds. Perhaps this is of use in remote access for an embedded
2838 application, etc...
2839
2840 Let us know if more build-time customizations would be useful.
2841
2842
2843 [Win2VNC Related]
2844
2845 Q-20: I have two separate machine displays in front of me, one Windows
2846 the other X11: can I use x11vnc in combination with Win2VNC in
2847 dual-screen mode to pass the keystrokes and mouse motions to the X11
2848 display?
2849
2850 Yes, for best response start up x11vnc with the "-nofb" option
2851 (disables framebuffer polling, and does other optimizations) on the
2852 secondary display (X11) machine. Then start up Win2VNC on the primary
2853 display (Windows) referring it to the secondary display.
2854
2855 This will also work X11 to X11 using x2vnc, however you would probably
2856 just want to avoid VNC and use x2x for that.
2857
2858 For reference, here are some links to Win2VNC-like programs for
2859 multiple monitor setups:
2860 * Original Win2VNC
2861 * Enhanced Win2VNC (broken?) and sourceforge link
2862 * x2vnc
2863 * x2x
2864 * zvnc (MorphOS)
2865
2866 All of them will work with x11vnc (except x2x where it is not needed.)
2867
2868
2869 Q-21: I am running Win2VNC on my Windows machine and "x11vnc -nofb" on
2870 Unix to pass keyboard and mouse to the Unix monitor. Whenever I start
2871 Win2VNC it quickly disconnects and x11vnc says:
2872 rfbProcessClientNormalMessage: read: Connection reset by peer
2873
2874 Is the default visual of the X display you run x11vnc on low color
2875 (e.g. 8 bit per pixel PseudoColor)? (you can run xdpyinfo to check,
2876 look in the "screen" section.) There seems to be a bug in Win2VNC in
2877 that it cannot deal correctly with colormaps (PseudoColor is the most
2878 common example of a visual with a colormap.)
2879
2880 If so, there are a couple options. 1) Can you set the default visual
2881 on your display to be depth 24 TrueColor? Sun machines often have 8+24
2882 overlay/multi-depth visuals, and you can make the default visual depth
2883 24 TrueColor (see fbconfig(1) and Xsun(1).) 2) As of Feb/2004 x11vnc
2884 has the -visual option to allow you to force the framebuffer visual to
2885 whatever you want (this usually messes up the colors unless you are
2886 very clever.) In this case, the option provides a convenient
2887 workaround for the Win2VNC bug:
2888 x11vnc -nofb -visual TrueColor -display :0 ...
2889
2890 So the visual will be set to 8bpp TrueColor and Win2VNC can handle
2891 this. Since Win2VNC does not use the framebuffer data there should be
2892 no problems in doing this.
2893
2894 Q-22: Can I run "x11vnc -nofb" on a Mac OS X machine to redirect mouse
2895 and keyboard input to it from Windows and X11 machines via Win2VNC and
2896 x2vnc, respectively?
2897
2898 Yes, as of Nov/2006 you can. There may be a trick or two you'll need
2899 to do to get the Clipboard exchange between the machines to work.
2900
2901
2902
2903 [Color Issues]
2904
2905 Q-23: The X display I run x11vnc on is only 8 bits per pixel (bpp)
2906 PseudoColor (i.e. only 256 distinct colors.) The x11vnc colors may
2907 start out OK, but after a while they are incorrect in certain windows.
2908
2909 Use the -flashcmap option to have x11vnc watch for changes in the
2910 colormap, and propagate those changes back to connected clients. This
2911 can be slow (since the whole screen must be updated over the network
2912 whenever the colormap changes.) This flashing colormap behavior often
2913 happens if an application installs its own private colormap when the
2914 mouse is in its window. "netscape -install" is a well-known historical
2915 example of this. Consider reconfiguring the system to 16 bpp or depth
2916 24 TrueColor if at all possible.
2917
2918 Also note the option -8to24 (Jan/2006) can often remove the need for
2919 flashing the colormap. Everything is dynamically transformed to depth
2920 24 at 32 bpp using the colormaps. There may be painting errors however
2921 (see the following FAQ for tips on reducing and correcting them.)
2922
2923 In some rare cases (SCO unixware) the -notruecolor option has
2924 corrected colors on 8bpp displays. The red, green, and blue masks were
2925 non-zero in 8bpp PseudoColor on an obscure setup, and this option
2926 corrected the problems.
2927
2928
2929 Q-24: Color problems: Why are the colors for some windows incorrect in
2930 x11vnc? BTW, my X display has nice overlay/multi-depth visuals of
2931 different color depths: e.g. there are both depth 8 and 24 visuals
2932 available at the same time.
2933
2934 You may want to review the previous question regarding 8 bpp
2935 PseudoColor.
2936
2937 On some hardware (Sun/SPARC and SGI), the -overlay option discussed a
2938 couple paragraphs down may solve this for you (you may want to skip to
2939 it directly.) On other hardware the less robust -8to24 option may help
2940 (also discussed below.)
2941
2942 Run xdpyinfo(1) to see what the default visual is and what the depths
2943 of the other visuals are. Does the default visual have a depth of 8
2944 but there are other visuals of depth 24? If it does, can you possibly
2945 re-configure your X server to make a depth 24 visual the default? If
2946 you can do it, this will save you a lot of grief WRT colors and x11vnc
2947 (and for general usage too!) Here is how I do this on an old
2948 Sparcstation 20 running Solaris 9 with SX graphics
2949 xinit -- -dev /dev/fb defclass TrueColor defdepth 24
2950
2951 and it works nicely (note: to log into console from the dtlogin
2952 window, select "Options -> Command Line Login", then login and enter
2953 the above command.) See the -dev section of the Xsun(1) manpage for a
2954 description of the above arguments. If you have root permission, a
2955 more permanent and convenient thing to do is to record the arguments
2956 in a line like:
2957 :0 Local local_uid@console root /usr/openwin/bin/Xsun -dev /dev/fb defclass
2958 TrueColor defdepth 24
2959
2960 in /etc/dt/config/Xservers (copy /usr/dt/config/Xservers.) Also look
2961 at the fbconfig(1) and related manpages (e.g. ffbconfig, m64config,
2962 pgxconfig, SUNWjfb_config, etc ...) for hardware framebuffer settings
2963 that may achieve the same effect.
2964
2965 In general for non-Sun machines, look at the "-cc class" and related
2966 options in your X server manpage (perhaps Xserver(1)), it may allow
2967 modifying the default visual (e.g. "-cc 4", see <X11/X.h> for the
2968 visual class numbers.) On XFree86 some video card drivers (e.g. Matrox
2969 mga) have settings like Option "Overlay" "24,8" to support multi-depth
2970 overlays. For these, use the "-cc 4" X server command line option to
2971 get a depth 24 default visual.
2972
2973
2974 The -overlay mode: Another option is if the system with overlay
2975 visuals is a Sun system running Solaris or SGI running IRIX you can
2976 use the -overlay x11vnc option (Aug/2004) to have x11vnc use the
2977 Solaris XReadScreen(3X11) function to poll the "true view" of the
2978 whole screen at depth 24 TrueColor. XReadDisplay(3X11) is used on
2979 IRIX. This is useful for Legacy applications (older versions of
2980 Cadence CAD apps are mentioned by x11vnc users) that require the
2981 default depth be 8bpp, or the app will use a 8bpp visual even if depth
2982 24 visuals are available, and so the default depth workaround
2983 described in the previous paragraph is not sufficient for these apps.
2984
2985 It seems that Xorg is working toward supporting XReadDisplay(3X11) as
2986 part of the RENDER extension work. When it does support it and
2987 provides a library API x11vnc will be modified to take advantage of
2988 the feature to support -overlay on Linux, *BSD, etc. Until then see
2989 the -8to24 mode below.
2990
2991 Misc. notes on -overlay mode: An amusing by-product of -overlay mode
2992 is that the mouse cursor shape is correct! (i.e. XFIXES is not
2993 needed.) The -overlay mode may be somewhat slower than normal mode due
2994 to the extra framebuffer manipulations that must be performed. Also,
2995 on Solaris there is a bug in that for some popup menus, the windows
2996 they overlap will have painting errors (flashing colors) while the
2997 popup is up (a workaround is to disable SaveUnders by passing -su to
2998 Xsun, e.g. in your /etc/dt/config/Xservers file.)
2999
3000
3001 The -8to24 mode: The -8to24 x11vnc option (Jan/2006) is a kludge to
3002 try to dynamically rewrite the pixel values so that the 8bpp part of
3003 the screen is mapped onto depth 24 TrueColor. This is less robust than
3004 the -overlay mode because it is done by x11vnc outside of the X
3005 server. So only use it on OS's that do not support -overlay. The
3006 -8to24 mode will work if the default visual is depth 24 or depth 8. It
3007 scans for any windows within 3 levels of the root window that are 8bpp
3008 (i.e. legacy application), or in general ones that are not using the
3009 default visual. For the windows it finds it uses XGetSubImage() to
3010 retrieve the pixels values and uses the correct indexed colormap to
3011 create a depth 24 TrueColor view of the whole screen. This depth 24,
3012 32bpp view is exported via VNC.
3013
3014 Even on pure 8bpp displays it can be used as an alternative to
3015 -flashcmap to avoid color flashing completely.
3016
3017 This scheme is approximate and can often lead to painting errors. You
3018 can manually correct most painting errors by pressing 3 Alt_L's in a
3019 row, or by using something like: -fixscreen V=3.0 to automatically
3020 refresh the screen every 3 seconds. Also -fixscreen 8=3.0 has been
3021 added to just refresh the non-default visual parts of the screen.
3022
3023 In general the scheme uses many resources and may give rise to
3024 sluggish behavior. If multiple windows are using different 8bpp
3025 indexed colormaps all but one window may need to be iconified for the
3026 colors to be correct. There are a number of tunable parameters to try
3027 to adjust performance and painting accuracy. The option -8to24
3028 nogetimage can give a nice speedup if the default depth 24 X server
3029 supports hiding the 8bpp bits in bits 25-32 of the framebuffer data.
3030 On very slow machines -8to24 poll=0.2,cachewin=5.0 gives an useful
3031 speedup. See the -8to24 help description for information on tunable
3032 parameters, etc.
3033
3034
3035 Colors still not working correctly? Run xwininfo on the application
3036 with the incorrect colors to verify that the depth of its visual is
3037 different from the default visual depth (gotten from xdpyinfo.) One
3038 possible workaround in this case is to use the -id option to point
3039 x11vnc at the application window itself. If the application is
3040 complicated (lots of toplevel windows and popup menus) this may not be
3041 acceptable, and may even crash x11vnc (but not the application.) See
3042 also -appshare.
3043
3044 It is theoretically possible to solve this problem in general (see
3045 xwd(1) for example), but it does not seem trivial or sufficiently fast
3046 for x11vnc to be able to do so in real time. The -8to24 method does
3047 this approximately and is somewhat usable. Fortunately the -overlay
3048 option works for Solaris machines with overlay visuals where most of
3049 this problem occurs.
3050
3051
3052 Q-25: I am on a high color system (depth >= 24) but I seem to have
3053 colormap problems. They either flash or everything is very dark.
3054
3055 This can happen if the default Visual (use xdpyinfo to list them) is
3056 DirectColor instead of TrueColor. These are both usually used in high
3057 color modes, but whereas TrueColor uses static ramps for the Red,
3058 Green, and Blue components, DirectColor has arbitrary colormaps for
3059 the Red, Green, and Blue Components. Currently x11vnc cannot decode
3060 these colormaps and treats them just like TrueColor.
3061
3062 The only workaround so far is to restart the X server with the "-cc 4"
3063 option to force TrueColor as the default visual (DirectColor is "-cc
3064 5"; see /usr/include/X11/X.h.) The only place we have seen this is
3065 with the virtual framebuffer server Xvfb on Xorg 7.2. So in that case
3066 you probably should restart it with something like this: "Xvfb :1 -cc
3067 4 -screen 0 1280x1024x24". It should be possible for x11vnc to handle
3068 DirectColor, but this hasn't been implemented due to its rare usage.
3069
3070 You may also see this problem on an X display with a TrueColor default
3071 visual where an application chooses a DirectColor visual for its
3072 window(s). It seems the application also needs to install its own
3073 colormap for the visual for the colors to be messed up in x11vnc. One
3074 can make xwud do this for example.
3075
3076
3077 Q-26: How do I figure out the window id to supply to the -id windowid
3078 option?
3079
3080 Run the xwininfo program in a terminal. It will ask you to click on
3081 the desired application window. After clicking, it will print out much
3082 information, including the window id (e.g. 0x6000010.) Also, the
3083 visual and depth of the window printed out is often useful in
3084 debugging x11vnc color problems.
3085
3086 Also, as of Dec/2004 you can use "-id pick" to have x11vnc run
3087 xwininfo(1) for you and after you click the window it extracts the
3088 windowid. Besides "pick" there is also "id:root" to allow you to go
3089 back to root window when doing remote-control.
3090
3091
3092 Q-27: Why don't menus or other transient windows come up when I am
3093 using the -id windowid option to view a single application window?
3094
3095 This is related to the behavior of the XGetImage(3X11) and
3096 XShmGetImage() interfaces regarding backingstore, saveunders, etc. The
3097 way the image is retrieved depends on some aspects of how the X server
3098 maintains the display image data and whether other windows are
3099 clipping or obscuring it. See the XGetImage(3X11) man page for more
3100 details. If you disable BackingStore and SaveUnders in the X server
3101 you should be able to see these transient windows.
3102
3103 If things are not working and you still want to do the single window
3104 polling, try the -sid windowid option ("shifted" windowid.)
3105
3106 Update: as of Nov/2009 in the 0.9.9 x11vnc development tarball, there
3107 is an experimental Application Sharing mode that improves upon the
3108 -id/-sid single window sharing: -appshare (run "x11vnc -appshare
3109 -help" for more info.) It is still very primitive and approximate, but
3110 at least it displays multiple top-level windows.
3111
3112
3113 Q-28: My X display is depth 24 at 24bpp (instead of the normal depth
3114 24 at 32bpp.) I'm having lots of color and visual problems with x11vnc
3115 and/or vncviewer. What's up?
3116
3117 First off, depth 24 at 24bpp (bpp=bits-per-pixel) is fairly uncommon
3118 and can cause problems in general. It also can be slower than depth 24
3119 at 32bpp. You might want to switch to 32bpp (for XFree86 see the
3120 "-fbbpp 32", DefaultFbBpp, FbBpp and related options.) Perhaps you
3121 have 24bpp because the video memory of the machine is low and the
3122 screen wouldn't fit in video RAM at 32bpp. For this case depth 16 at
3123 16bpp might be an acceptable option.
3124
3125 In any event x11vnc should handle depth 24 at 24bpp (although
3126 performance may be slower, and you may need to use the ZRLE encoding
3127 instead of Tight.) There are some caveats involving the viewer
3128 however:
3129
3130 The RealVNC Unix viewer cannot handle 24bpp from the server, it will
3131 say: "main: setPF: not 8, 16 or 32 bpp?" and exit. I have not checked
3132 the RealVNC Windows viewer.
3133
3134 So you need to use the TightVNC Unix viewer. However there are some
3135 problems with that too. It seems libvncserver does not do 24bpp
3136 correctly with the Tight encoding. The colors and screen ultimately
3137 get messed up. So you have to use a different encoding with the
3138 TightVNC vncviewer, try "zlib", "hextile", or one of the other
3139 encodings (e.g. vncviewer -encodings "zlib hextile" ....) I have not
3140 checked the TightVNC or UltraVNC Windows viewers.
3141
3142 It appears the older RealVNC Unix viewers (e.g. 3.3.3 and 3.3.7) can
3143 handle 24bpp from the server, so you may want to use those. They
3144 evidently request 32 bpp and libvncserver obliges.
3145
3146 Update: as of Apr/2006 you can use the -24to32 option to have x11vnc
3147 dynamically transform the 24bpp pixel data to 32bpp. This extra
3148 transformation could slow things down further however.
3149
3150 Now coming the opposite direction if you are running the vncviewer on
3151 the 24bpp display, TightVNC will fail with "Can't cope with 24
3152 bits-per-pixel. Sorry." and RealVNC will fail with "main: Error:
3153 couldn't find suitable pixmap format" so evidently you cannot use
3154 24bpp for the vncviewers to work on that X display.
3155
3156 Note, however, that the Unix viewer in the Enhanced TightVNC Viewer
3157 (SSVNC) project can handle 24bpp X displays. It does this by
3158 requesting a 16bpp pixel format (or 8bpp if the -bgr233 option has
3159 been supplied) from the VNC server, and translates that to 24bpp
3160 locally.
3161 [Xterminals]
3162
3163 Q-29: Can I use x11vnc to view and interact with an Xterminal (e.g.
3164 NCD) that is not running UNIX and so x11vnc cannot be run on it
3165 directly?
3166
3167 You can, but it will likely be very wasteful of network bandwidth
3168 since you will be polling the X display over the network as opposed to
3169 over the local hardware. To do this, run x11vnc on a UNIX machine as
3170 close as possible network-wise (e.g. same switch) to the Xterminal
3171 machine. Use the -display option to point the display to that of the
3172 Xterminal (you'll of course need basic X11 permission to do that) and
3173 finally supply the -noshm option (this enables the polling over the
3174 network.)
3175
3176 If the Xterminal's X display is open to the network for connections,
3177 you might use something like "-display xterm123:0". If you are trying
3178 to do this via an SSH tunnel (assuming you can actually ssh into the
3179 Xterminal) it will be a little tricky (either use the ssh "-R" option
3180 or consider ssh-ing in the other direction.) In all cases the X11
3181 permissions need to allow the connection.
3182
3183 The response will likely be sluggish (maybe only one "frame" per
3184 second.) This mode is not recommended except for "quick checks" of
3185 hard to get to X servers. Use something like "-wait 150" to cut down
3186 on the polling rate. You may also need -flipbyteorder if the colors
3187 get messed up due to endian byte order differences.
3188
3189 Q-30: How do I get my X permissions (MIT-MAGIC-COOKIE file) correct
3190 for a Unix/Linux machine acting as an Xterminal?
3191
3192 If the X display machine is a traditional Xterminal (where the X
3193 server process runs on the Xterminal box, but all of the X client
3194 applications (firefox, etc) run on a central server (aka "terminal
3195 server")), you will need to log into the Xterminal machine (i.e. get a
3196 shell running there) and then start the x11vnc program. If the
3197 Xterminal Linux/Unix machine is stripped down (e.g. no users besides
3198 root) that may be difficult.
3199
3200 The next problem is the login Display Manager (e.g. gdm, kdm), and
3201 hence the MIT-MAGIC-COOKIE auth files, are on the central server and
3202 not on the Xterminal box where the X server and x11vnc processes are.
3203
3204 So unless X permissions are completely turned off (e.g. "xhost +"), to
3205 run the x11vnc process on the Xterminal box the MIT-MAGIC-COOKIE auth
3206 file data (XAUTHORITY or $HOME/.Xauthority) must be accessible by or
3207 copied to the Xterminal. If $HOME/.Xauthority is exported via NFS
3208 (this is insecure of course, but has been going on for decades), then
3209 x11vnc can simply pick it up via NFS (you may need to use the -auth
3210 option to point to the correct file.) Other options include copying
3211 the auth file using scp, or something like:
3212 central-server> xauth nextract - xterm123:0 | ssh xterm123 xauth nmerge -
3213
3214 and then, say, ssh from central-server to xterm123 to start x11vnc.
3215 Here "xterm123" refers to the computer acting as the Xterminal and
3216 "central-server" is the terminal server. You can use "xauth -f
3217 /path/to/cookie-file list" to examine the contents of the cookie(s) in
3218 a file "/path/to/cookie-file". See the xauth(1) manpage for more
3219 details.
3220
3221 If the display name in the cookie file needs to be changed between the
3222 two hosts, see this note on the "xauth add ..." command.
3223
3224 A less secure option is to run something like "xhost +127.0.0.1" while
3225 sitting at the Xterminal box to allow cookie-free local access for
3226 x11vnc. You can run "xhost -127.0.0.1" after x11vnc connects if you
3227 want to go back to the original permissions.
3228
3229 If the Xterminal is really stripped down and doesn't have any user
3230 accounts, NFS, etc. you'll need to contact your system administrator
3231 to set something up. It can be done!!! Some Xterminal projects have
3232 actually enabled "run locally" facilities for the running of an
3233 occasional app more efficiently locally on the Xterminal box (e.g.
3234 realplayer.)
3235
3236 Not recommended, but as a last resort, you could have x11vnc poll the
3237 Xterminal Display over the network. For this you would run a "x11vnc
3238 -noshm ..." process on the central-server (and hope the network admin
3239 doesn't get angry...)
3240
3241 Note: use of Display Manager (gdm, kdm, ...) auth cookie files (i.e.
3242 from /var/..., /tmp/..., or elsewhere) may require modification via
3243 xauth(1) to correctly include the display x11vnc refers to (e.g.
3244 "xauth -f cookie-file add :0 . 45be51ae2ce9dfbacd882ab3ef8e96b1",
3245 where the "45be51..." cookie value was found from an "xauth -f
3246 /path/to/original/cookie-file list") or other reasons. See xauth(1)
3247 manpage for full details on how to transfer an MIT-MAGIC-COOKIE
3248 between machines and displays.
3249
3250 VNCviewer performance on Xterminals: This isn't related to x11vnc on
3251 Xterminals, but we mention it here anyway because of the similar
3252 issues. If you are on an Xterminal and want to use vncviewer to
3253 connect to a VNC server somewhere, then performance would be best if
3254 you ran the viewer on the Xterminal box. Otherwise, (i.e. running the
3255 viewer process on the central-server) all of the vncviewer screen
3256 drawing is done more inefficiently over the network. Something to
3257 consider, especially on a busy network. (BTW, this has all of the
3258 above permission, etc, problems: both vncviewer and x11vnc are X
3259 client apps desired to be run on the Xterminal box.)
3260
3261 [Sun Rays]
3262
3263 Q-31: I'm having trouble using x11vnc with my Sun Ray session.
3264
3265 The Sun Ray technology is a bit like "VNC done in hardware" (the Sun
3266 Ray terminal device, DTU, playing the role of the vncviewer.)
3267 Completely independent of that, the SunRay user's session is still an
3268 X server that speaks the X11 protocol and so x11vnc simply talks to
3269 the X server part to export the SunRay desktop to any place in the
3270 world (i.e. not only to a Sun Ray terminal device), creating a sort of
3271 "Soft Ray". Please see this discussion of Sun Ray issues for solutions
3272 to problems.
3273
3274 Also see the Sun Ray Remote Control Toolkit that uses x11vnc.
3275
3276 [Remote Control]
3277
3278 Q-32: How do I stop x11vnc once it is running in the background?
3279
3280 As of Dec/2004 there is a remote control feature. It can change a huge
3281 number of parameters on the fly: see the -remote and -query options.
3282 To shut down the running x11vnc server just type "x11vnc -R stop". To
3283 disconnect all clients do "x11vnc -R disconnect:all", etc.
3284
3285 If the -forever option has not been supplied, x11vnc will
3286 automatically exit after the first client disconnects. In general if
3287 you cannot use the remote control, then you will have to kill the
3288 x11vnc process This can be done via: "kill NNNNN" (where NNNNN is the
3289 x11vnc process id number found from ps(1)), or "pkill x11vnc", or
3290 "killall x11vnc" (Linux only.)
3291
3292 If you have not put x11vnc in the background via the -bg option or
3293 shell & operator, then simply press Ctrl-C in the shell where x11vnc
3294 is running to stop it.
3295
3296 Potential Gotcha: If somehow your Keypress of Ctrl-C went through
3297 x11vnc to the Xserver that then delivered it to x11vnc it is possible
3298 one or both of the Ctrl or C keys will be left stuck in the pressed
3299 down state in the Xserver. Tapping the stuck key (either via a new
3300 x11vnc or at the physical console) will release it from the stuck
3301 state. If the keyboard seems to be acting strangely it is often fixed
3302 by tapping Ctrl, Shift, and Alt. Alternatively, the -clear_mods option
3303 and -clear_keys option can be used to release pressed keys at startup
3304 and exit. The option -clear_all will also try to unset Caps_Lock,
3305 Num_Lock, etc.
3306
3307
3308 Q-33: Can I change settings in x11vnc without having to restart it?
3309 Can I remote control it?
3310
3311 Look at the -remote (an alias is -R) and -query (an alias is -Q)
3312 options added in Dec/2004. They allow nearly everything to be changed
3313 dynamically and settings to be queried. Examples: "x11vnc -R shared",
3314 "x11vnc -R forever", "x11vnc -R scale:3/4", "x11vnc -Q modtweak",
3315 "x11vnc -R stop", "x11vnc -R disconnect:all", etc..
3316
3317 These commands do not start a x11vnc server, but rather communicate
3318 with one that is already running. The X display (X11VNC_REMOTE
3319 property) is used as the communication channel, so the X permissions
3320 and DISPLAY must be set up correctly for communication to be possible.
3321
3322 There is also a simple Tcl/Tk gui based on this remote control
3323 mechanism. See the -gui option for more info. You will need to have
3324 Tcl/Tk (i.e. /usr/bin/wish) installed for it to work. It can also run
3325 in the system tray: "-gui tray" or as a standalone small icon window:
3326 "-gui icon". Use "-gui tray=setpass" for a naive user "Share My
3327 Desktop" mode.
3328
3329 [Security and Permissions]
3330
3331 Q-34: How do I create a VNC password for use with x11vnc?
3332
3333 You may already have one in $HOME/.vnc/passwd if you have used, say,
3334 the vncserver program from the regular RealVNC or TightVNC packages
3335 (i.e. launching the Xvnc server.) Otherwise, you could use the
3336 vncpasswd(1) program from those packages.
3337
3338 As of Jun/2004 x11vnc supports the -storepasswd "pass" "file" option,
3339 which is the same functionality of storepasswd. Be sure to quote the
3340 "pass" if it contains shell meta characters, spaces, etc. Example:
3341 x11vnc -storepasswd 'sword*fish' $HOME/myvncpasswd
3342
3343 You then use the password via the x11vnc option: "-rfbauth
3344 $HOME/myvncpasswd"
3345
3346 As of Jan/2006 if you do not supply any arguments:
3347 x11vnc -storepasswd
3348
3349 you will be prompted for a password to save to ~/.vnc/passwd (your
3350 keystrokes when entering the password will not be echoed to the
3351 screen.) If you supply one argument, e.g. "x11vnc -storepasswd
3352 ~/.mypass", the password you are prompted for will be stored in that
3353 file.
3354
3355 x11vnc also has the -passwdfile and -passwd/-viewpasswd plain text
3356 (i.e. not obscured like the -rfbauth VNC passwords) password options.
3357
3358 You can use the -usepw option to automatically use any password file
3359 you have in ~/.vnc/passwd or ~/.vnc/passwdfile (the latter is used
3360 with the -passwdfile option.)
3361
3362 x11vnc -usepw -display :0 ...
3363
3364 If neither file exists you are prompted to store a password in
3365 ~/.vnc/passwd. If a password file cannot be found or created x11vnc
3366 exits immediately. An admin may want to set it up this way for users
3367 who do not know better.
3368
3369
3370 Q-35: Can I make it so -storepasswd doesn't show my password on the
3371 screen?
3372
3373 You can use the vncpasswd program from RealVNC or TightVNC mentioned
3374 above. As of Jan/2006 the -storepasswd option without any arguments
3375 will not echo your password as you type it and save the file to
3376 ~/.vnc/passwd:
3377 # x11vnc -storepasswd
3378 Enter VNC password:
3379 Verify password:
3380 Write password to /home/myname/.vnc/passwd? [y]/n
3381 Password written to: /home/myname/.vnc/passwd
3382
3383 You can also give it an alternate filename, e.g. "x11vnc -storepasswd
3384 ~/.mypass"
3385
3386
3387 Q-36: Can I have two passwords for VNC viewers, one for full access
3388 and the other for view-only access to the display?
3389
3390 Yes, as of May/2004 there is the -viewpasswd option to supply the
3391 view-only password. Note the full-access password option -passwd must
3392 be supplied at the same time. E.g.: -passwd sword -viewpasswd fish.
3393
3394 To avoid specifying the passwords on the command line (where they
3395 could be observed via the ps(1) command by any user) you can use the
3396 -passwdfile option to specify a file containing plain text passwords.
3397 Presumably this file is readable only by you, and ideally it is
3398 located on the machine x11vnc is run on (to avoid being snooped on
3399 over the network.) The first line of this file is the full-access
3400 password. If there is a second line in the file and it is non-blank,
3401 it is taken as the view-only password. (use "__EMPTY__" to supply an
3402 empty one.)
3403
3404 View-only passwords currently do not work for the -rfbauth password
3405 option (standard VNC password storing mechanism.) FWIW, note that
3406 although the output (usually placed in $HOME/.vnc/passwd) by the
3407 vncpasswd or storepasswd programs (or from x11vnc -storepasswd) looks
3408 encrypted they are really just obscured to avoid "casual" password
3409 stealing. It takes almost no skill to figure out how to extract the
3410 plain text passwords from $HOME/.vnc/passwd since it is very
3411 straight-forward to work out what to do from the VNC source code.
3412
3413
3414 Q-37: Can I have as many full-access and view-only passwords as I
3415 like?
3416
3417 Yes, as of Jan/2006 in the libvncserver CVS the -passwdfile option has
3418 been extended to handle as many passwords as you like. You put the
3419 view-only passwords after a line __BEGIN_VIEWONLY__.
3420
3421 You can also easily annotate and comment out passwords in the file.
3422 You can have x11vnc re-read the file dynamically when it is modified.
3423
3424
3425 Q-38: Does x11vnc support Unix usernames and passwords? Can I further
3426 limit the set of Unix usernames who can connect to the VNC desktop?
3427 Update: as of Feb/2006 x11vnc has the -unixpw option that does this
3428 outside of the VNC protocol and libvncserver. The standard su(1)
3429 program is used to validate the user's password. A familiar "login:"
3430 and "Password:" dialog is presented to the user on a black screen
3431 inside the vncviewer. The connection is dropped if the user fails to
3432 supply the correct password in 3 tries or does not send one before a
3433 25 second timeout. Existing clients are view-only during this period.
3434 A list of allowed Unix usernames may also be supplied along with
3435 per-user settings.
3436
3437 There is also the -unixpw_nis option for non-shadow-password
3438 (typically NIS environments, hence the name) systems where the
3439 traditional getpwnam() and crypt() functions are used instead of
3440 su(1). The encrypted user passwords must be accessible to the user
3441 running x11vnc in -unixpw_nis mode, otherwise the logins will always
3442 fail even when the correct password is supplied. See ypcat(1) and
3443 shadow(5).
3444
3445 Two settings are enforced in the -unixpw and -unixpw_nis modes to
3446 provide extra security: the 1) -localhost and 2) -stunnel or -ssl
3447 options. Without these one might send the Unix username and password
3448 data in clear text over the network which is a very bad idea. They can
3449 be relaxed if you want to provide encryption other than stunnel or
3450 -ssl (the constraint is automatically relaxed if SSH_CONNECTION is set
3451 and indicates you have ssh-ed in, however the -localhost requirement
3452 is still enforced.)
3453
3454 The two -unixpw modes have been tested on Linux, Solaris, Mac OS X,
3455 HP-UX, AIX, Tru64, FreeBSD, OpenBSD, and NetBSD. Additional testing is
3456 appreciated. For the last 4 it appears that su(1) will not prompt for
3457 a password if su-ing to oneself. Since x11vnc requires a password
3458 prompt from su, x11vnc forces those logins to fail even when the
3459 correct password is supplied. On *BSD it appears this can be corrected
3460 by removing the pam_self.so entry in /etc/pam.d/su.
3461
3462
3463 Previous older discussion (prior to the -unixpw option):
3464
3465 Until the VNC protocol and libvncserver support this things will be
3466 approximate at best.
3467
3468 One approximate method involves starting x11vnc with the -localhost
3469 option. This basically requires the viewer user to log into the
3470 workstation where x11vnc is running via their Unix username and
3471 password, and then somehow set up a port redirection of his vncviewer
3472 connection to make it appear to emanate from the local machine. As
3473 discussed above, ssh is useful for this: "ssh -L 5900:localhost:5900
3474 user@hostname ..." See the ssh wrapper scripts mentioned elsewhere on
3475 this page. stunnel does this as well.
3476
3477 Of course a malicious user could allow other users to get in through
3478 his channel, but that is a problem with every method. Another thing to
3479 watch out for is a malicious user on the viewer side (where ssh is
3480 running) trying to sneak in through the ssh port redirection there.
3481
3482 Regarding limiting the set of Unix usernames who can connect, the
3483 traditional way would be to further require a VNC password to supplied
3484 (-rfbauth, -passwd, etc) and only tell the people allowed in what the
3485 VNC password is. A scheme that avoids a second password involves using
3486 the -accept option that runs a program to examine the connection
3487 information to determine which user is connecting from the local
3488 machine. That may be difficult to do, but, for example, the program
3489 could use the ident service on the local machine (normally ident
3490 should not be trusted over the network, but on the local machine it
3491 should be accurate: otherwise root has been compromised and so there
3492 are more serious problems! Unfortunately recent Linux distros seem to
3493 provide a random string (MD5 hash?) instead of the username.) An
3494 example script passed in via -accept scriptname that deduces the Unix
3495 username and limits who can be accepted might look something like
3496 this:
3497 #!/bin/sh
3498 if [ "$RFB_CLIENT_IP" != "127.0.0.1" -o "$RFB_SERVER_IP" != "127.0.0.1" ]; then
3499 exit 1 # something fishy... reject it.
3500 fi
3501 user=`echo "$RFB_CLIENT_PORT, $RFB_SERVER_PORT" | nc -w 1 $RFB_CLIENT_IP 113 \
3502 | grep 'USERID.*UNIX' | head -n 1 | sed -e 's/[\r ]//g' | awk -F: '{pri
3503 nt $4}'`
3504
3505 for okuser in fred barney wilma betty
3506 do
3507 if [ "X$user" = "X$okuser" ]; then
3508 exit 0 # accept it
3509 fi
3510 done
3511 exit 1 # reject it
3512
3513 For this to work with ssh port redirection, the ssh option
3514 UsePrivilegeSeparation must be enabled otherwise the userid will
3515 always be "root".
3516
3517 Here is a similar example based on Linux netstat(1) output:
3518 #!/bin/sh
3519 #
3520 # accept_local_netstat: x11vnc -accept command to accept a local
3521 # vncviewer connection from acceptable users. Linux netstat -nte is used.
3522
3523 PATH=/bin:/usr/bin:$PATH; export PATH; # set to get system utils
3524
3525 allowed="`id -u fred`"; # add more user numbers if desired.
3526
3527 # check required settings
3528 ok=1
3529 if [ "X$allowed" = "X" ]; then
3530 ok=0; # something wrong with allowed list
3531 fi
3532 if [ "X$RFB_CLIENT_IP" != "X127.0.0.1" -o "X$RFB_SERVER_IP" != "X127.0.0.1" ];
3533 then
3534 ok=0; # connection not over localhost
3535 fi
3536 if [ "$RFB_CLIENT_PORT" -le 0 -o "$RFB_SERVER_PORT" -le 0 ]; then
3537 ok=0; # something wrong with tcp port numbers
3538 fi
3539 if [ "$ok" = 0 ]; then
3540 echo "$0: invalid setting:" 1>&2
3541 env | grep ^RFB | sort 1>&2
3542 exit 1
3543 fi
3544
3545 # Linux netstat -nte:
3546 # Proto Recv-Q Send-Q Local Address Foreign Address State
3547 User Inode
3548 # 0 0 0 RFB_CLIENT RFB_SERVER ESTABLISHED
3549 nnnn ....
3550 #
3551 user=`netstat -nte | grep ESTABLISHED \
3552 | grep " $RFB_CLIENT_IP:$RFB_CLIENT_PORT *$RFB_SERVER_IP:$RFB_SERVER_P
3553 ORT "`
3554
3555 echo "netstat match: $user" 1>&2
3556 user=`echo "$user" | head -n 1 | sed -e 's/^.*ESTABLISHED/ /' | awk '{print $1}
3557 '`
3558
3559 ok=0
3560 for u in $allowed
3561 do
3562 if [ "X$user" = "X$u" ]; then
3563 ok=1
3564 break
3565 fi
3566 done
3567
3568 if [ "X$ok" = "X1" ]; then
3569 echo "$0: user accepted: '$user'" 1>&2
3570 exit 0
3571 else
3572 echo "$0: user '$user' invalid:" 1>&2
3573 echo "$0: allowed: $allowed" 1>&2
3574 env | grep ^RFB | sort 1>&2
3575 exit 1
3576 fi
3577
3578
3579 Q-39: Can I supply an external program to provide my own custom login
3580 method (e.g. Dynamic/One-time passwords or non-Unix (LDAP) usernames
3581 and passwords)?
3582 Yes, there are several possibilities. For background see the FAQ on
3583 the -accept where an external program may be run to decide if a VNC
3584 client should be allowed to try to connect and log in. If the program
3585 (or local user prompted by a popup) answers "yes", then -accept
3586 proceeds to the normal VNC and x11vnc authentication methods,
3587 otherwise the connection is dropped.
3588
3589 To provide more direct coupling to the VNC client's username and/or
3590 supplied password the following options were added in Sep/2006:
3591 * -unixpw_cmd command
3592 * -passwdfile cmd:command
3593 * -passwdfile custom:command
3594
3595 In each case "command" is an external command run by x11vnc. You
3596 supply it. For example, it may couple to your LDAP system or other
3597 servers you set up.
3598
3599 For -unixpw_cmd the normal -unixpw Login: and Password: prompts are
3600 supplied to the VNC viewer and the strings the client returns are then
3601 piped into "command" as the first two lines of its standard input. If
3602 the command returns success, i.e. exit(0), the VNC client is accepted,
3603 otherwise it is rejected.
3604
3605 For "-passwdfile cmd:command" the command is run and it returns a
3606 password list (like a password file, see the -passwdfile read:filename
3607 mode.) Perhaps a dynamic, one-time password is retrieved from a server
3608 this way.
3609
3610 For "-passwdfile custom:command" one gets complete control over the
3611 VNC challenge-response dialog with the VNC client. x11vnc sends out a
3612 string of random bytes (16 by the VNC spec) and the client returns the
3613 same number of bytes in a way the server can verify only the
3614 authorized user could have created. The VNC protocol specifies DES
3615 encryption with a password. If you are willing to modify the VNC
3616 viewers, you can have it be anything you want, perhaps a less
3617 crackable MD5 hash scheme or one-time pad. Your program will read from
3618 its standard input the size of the challenge-response followed by a
3619 newline, then the challenge bytes followed by the response bytes. If
3620 your command then returns success, i.e. exit(0), the VNC client is
3621 accepted, otherwise it is rejected.
3622
3623 In all cases the "RFB_*" environment variables are set as under
3624 -accept. These variables can provide useful information for the
3625 externally supplied program to use.
3626
3627
3628 Q-40: Why does x11vnc exit as soon as the VNC viewer disconnects? And
3629 why doesn't it allow more than one VNC viewer to connect at the same
3630 time?
3631
3632 These defaults are simple safety measures to avoid someone unknowingly
3633 leaving his X11 desktop exposed (to the internet, say) for long
3634 periods of time. Use the -forever option (aka -many) to have x11vnc
3635 wait for more connections after the first client disconnects. Use the
3636 -shared option to have x11vnc allow multiple clients to connect
3637 simultaneously.
3638
3639 Recommended additional safety measures include using ssh (see above),
3640 stunnel, -ssl, or a VPN to authenticate and encrypt the viewer
3641 connections or to at least use the -rfbauth passwd-file option to use
3642 VNC password protection (or -passwdfile) It is up to YOU to apply
3643 these security measures, they will not be done for you automatically.
3644
3645
3646 Q-41: Can I limit which machines incoming VNC clients can connect
3647 from?
3648
3649 Yes, look at the -allow and -localhost options to limit connections by
3650 hostname or IP address. E.g.
3651 x11vnc -allow 192.168.0.1,192.168.0.2
3652
3653 for those two hosts or
3654 x11vnc -allow 192.168.0.
3655
3656 for a subnet. For individual hosts you can use the hostname instead of
3657 the IP number, e.g.: "-allow snoopy", and "-allow darkstar,wombat".
3658 Note that -localhost achieves the same thing as "-allow 127.0.0.1"
3659
3660 For more control, build libvncserver with libwrap support
3661 (tcp_wrappers) and then use /etc/hosts.allow See hosts_access(5) for
3662 complete details.
3663
3664
3665 Q-42: How do I build x11vnc/libvncserver with libwrap (tcp_wrappers)
3666 support?
3667
3668 Here is one way to pass this information to the configure script:
3669 env CPPFLAGS=-DUSE_LIBWRAP LDFLAGS=-lwrap ./configure
3670
3671 then run make as usual. This requires libwrap and its development
3672 package (tcpd.h) to be installed on the build machine. If additional
3673 CPPFLAGS or LDFLAGS options are needed supply them as well using
3674 quotes.
3675
3676 The resulting x11vnc then uses libwrap/tcp_wrappers for connections.
3677 The service name you will use in /etc/hosts.allow and /etc/hosts.deny
3678 is "vnc", e.g.:
3679 vnc: 192.168.100.3 .example.com
3680
3681 Note that if you run x11vnc out of inetd you do not need to build
3682 x11vnc with libwrap support because the /usr/sbin/tcpd reference in
3683 /etc/inetd.conf handles the tcp_wrappers stuff.
3684
3685
3686 Q-43: Can I have x11vnc only listen on one network interface (e.g.
3687 internal LAN) rather than having it listen on all network interfaces
3688 and relying on -allow to filter unwanted connections out?
3689
3690 As of Mar/2005 there is the "-listen ipaddr" option that enables this.
3691 For ipaddr either supply the desired network interface's IP address
3692 (or use a hostname that resolves to it) or use the string "localhost".
3693 For additional filtering simultaneously use the "-allow host1,..."
3694 option to allow only specific hosts in.
3695
3696 This option is useful if you want to insure that no one can even begin
3697 a dialog with x11vnc from untrusted network interfaces (e.g. ppp0.)
3698 The option -localhost now implies "-listen localhost" since that is
3699 what most people expect it to do.
3700
3701
3702 Q-44: Now that -localhost implies listening only on the loopback
3703 interface, how I can occasionally allow in a non-localhost via the -R
3704 allowonce remote control command?
3705
3706 To do this specify "-allow localhost". Unlike -localhost this will
3707 leave x11vnc listening on all interfaces (but of course only allowing
3708 in local connections, e.g. ssh redirs.) Then you can later run "x11vnc
3709 -R allowonce:somehost" or use to gui to permit a one-shot connection
3710 from a remote host.
3711
3712
3713 Q-45: Can I fine tune what types of user input are allowed? E.g. have
3714 some users just be able to move the mouse, but not click or type
3715 anything?
3716
3717 As of Feb/2005, the -input option allows you to do this. "K", "M",
3718 "B", "C", and "F" stand for Keystroke, Mouse-motion, Button-clicks,
3719 Clipboard, and File-Transfer, respectively. The setting: "-input M"
3720 makes attached viewers only able to move the mouse. "-input KMBC,M"
3721 lets normal clients do everything and enables view-only clients to
3722 move the mouse.
3723
3724 These settings can also be applied on a per-viewer basis via the
3725 remote control mechanism or the GUI. E.g. x11vnc -R input:hostname:M
3726
3727
3728 Q-46: Can I prompt the user at the local X display whether the
3729 incoming VNC client should be accepted or not? Can I decide to make
3730 some clients view-only? How about running an arbitrary program to make
3731 the decisions?
3732
3733 Yes, look at the "-accept command" option, it allows you to specify an
3734 external command that is run for each new client. (use quotes around
3735 the command if it contains spaces, etc.) If the external command
3736 returns 0 (success) the client is accepted, otherwise with any other
3737 return code the client is rejected. See below how to also accept
3738 clients view-only.
3739
3740 The external command will have the RFB_CLIENT_IP environment variable
3741 set to the client's numerical IP address, RFB_CLIENT_PORT its port
3742 number. Similarly for RFB_SERVER_IP and RFB_SERVER_PORT to allow
3743 identification of the tcp virtual circuit. DISPLAY will be set to that
3744 of the X11 display being polled. Also, RFB_X11VNC_PID is set to the
3745 x11vnc process id (e.g. in case you decided to kill it), RFB_CLIENT_ID
3746 will be an id number, and RFB_CLIENT_COUNT the number of other clients
3747 currently connected. RFB_MODE will be "accept".
3748
3749 Built-in Popup Window: As a special case, "-accept popup" will
3750 instruct x11vnc to create its own simple popup window. To accept the
3751 client press "y" or click mouse on the "Yes" button. To reject the
3752 client press "n" or click mouse on the "No" button. To accept the
3753 client View-only, press "v" or click mouse on the "View" button. If
3754 the -viewonly option has been supplied, the "View" action will not be
3755 present: the whole display is view only in that case.
3756
3757 The popup window times out after 120 seconds, to change this behavior
3758 use "-accept popup:N" where N is the number of seconds (use 0 for no
3759 timeout.) More tricks: "-accept popupmouse" will only take mouse click
3760 responses, while "-accept popupkey" will only take keystroke responses
3761 (popup takes both.) After any of the 3 popup keywords you can supply a
3762 position of the window: +N+M, (the default is to center the window)
3763 e.g. -accept popupmouse+10+10.
3764
3765 Also as a special case "-accept xmessage" will run the xmessage(1)
3766 program to prompt the user whether the client should be accepted or
3767 not. This requires that you have xmessage installed and available via
3768 PATH. In case it is not already on your system, the xmessage program
3769 is available at ftp://ftp.x.org/
3770 (End of Built-in Popup Window:)
3771
3772 To include view-only decisions for the external commands, prefix the
3773 command something like this: "yes:0,no:*,view:3 mycommand ..." This
3774 associates the three actions: yes(accept), no(reject), and
3775 view(accept-view-only), with the numerical return (i.e. exit()) codes.
3776 Use "*" instead of a number to set the default action (e.g. in case
3777 the external command returns an unexpected return code.)
3778
3779 Here is an example -accept script called accept_or_lock. It uses
3780 xmessage and xlock (replace with your screen lock command, maybe it is
3781 "xscreensaver-command -lock", or kdesktop_lock, or "dtaction
3782 LockDisplay".) It will prompt the user at the X display whether to
3783 accept, reject, or accept view-only the client, but if the prompt
3784 times out after 60 seconds the screen is locked and the VNC client is
3785 accepted. This allows the remote access when no one is at the display.
3786 #!/bin/sh
3787 #
3788 # accept_or_lock: prompt user at X display whether to accept an incoming
3789 # VNC connection. If timeout expires, screen is locked
3790 # and the VNC viewer is accepted (allows remote access
3791 # when no one is sitting at the display.)
3792 #
3793 # usage: x11vnc ... -forever -accept 'yes:0,no:*,view:4 accept_or_lock'
3794 #
3795 xmessage -buttons yes:2,no:3,view-only:4 -center \
3796 -timeout 60 "x11vnc: accept connection from $RFB_CLIENT_IP?"
3797 rc=$?
3798 if [ $rc = 0 ]; then
3799 xlock & # or "xlock -mode blank" for no animations.
3800 sleep 5
3801 exit 0
3802 elif [ $rc = 2 ]; then
3803 exit 0
3804 elif [ $rc = 4 ]; then
3805 exit 4
3806 fi
3807 exit 1
3808
3809 Stefan Radman has written a nice dtksh script dtVncPopup for use in
3810 CDE environments to do the same sort of thing. Information on how to
3811 use it is found at the top of the file. He encourages you to provide
3812 feedback to him to help improve the script.
3813
3814 Note that in all cases x11vnc will block while the external command or
3815 popup is being run, so attached clients will not receive screen
3816 updates, etc during this period.
3817
3818 To run a command when a client disconnects, use the "-gone command"
3819 option. This is for the user's convenience only: the return code of
3820 the command is not interpreted by x11vnc. The same environment
3821 variables are set as in "-accept command" (except that RFB_MODE will
3822 be "gone".)
3823
3824 As of Jan/2006 the "-afteraccept command" option will run the command
3825 only after the VNC client has been accepted and authenticated. Like
3826 -gone the return code is not interpreted. RFB_MODE will be
3827 "afteraccept".)
3828
3829
3830 Q-47: I start x11vnc as root because it is launched via inetd(8) or a
3831 display manager like gdm(1). Can I have x11vnc later switch to a
3832 different user?
3833
3834 As of Feb/2005 x11vnc has the -users option that allows things like
3835 this. Please read the documentation on it (also in the x11vnc -help
3836 output) carefully for features and caveats. It's use can often
3837 decrease security unless care is taken.
3838
3839 BTW, a nice use of it is "-users +nobody" that switches to the Unix
3840 user nobody right after connections to the X display are established.
3841
3842 In any event, while running x11vnc as root, remember it comes with no
3843 warranty ;-).
3844
3845
3846 Q-48: I use a screen-lock when I leave my workstation (e.g.
3847 xscreensaver or xlock.) When I remotely access my workstation desktop
3848 via x11vnc I can unlock the desktop fine, but I am worried people will
3849 see my activities on the physical monitor. What can I do to prevent
3850 this, or at least make it more difficult?
3851
3852 Probably most work environments would respect your privacy if you
3853 powered off the monitor. Also remember if people have physical access
3854 to your workstation they basically can do anything they want with it
3855 (e.g. install a backdoor for later use, etc.)
3856
3857 In any event, as of Jun/2004 there is an experimental utility to make
3858 it more difficult for nosey people to see your x11vnc activities. The
3859 source for it is blockdpy.c The idea behind it is simple (but
3860 obviously not bulletproof): when a VNC client attaches to x11vnc put
3861 the display monitor in the DPMS "off" state, if the DPMS state ever
3862 changes immediately start up the screen-lock program. The x11vnc user
3863 will notice something is happening and think about what to do next
3864 (while the screen is in a locked state.)
3865
3866 This works (or at least has a chance of working) because if the
3867 intruder moves the mouse or presses a key on the keyboard, the monitor
3868 wakes up out of the DPMS off state, and this induces the screen lock
3869 program to activate as soon as possible. Of course there are cracks in
3870 this, the eavesdropper could detach your monitor and insert a non-DPMS
3871 one, and there are race conditions. As mentioned above this is not
3872 bulletproof. A really robust solution would likely require X server
3873 and perhaps even video hardware support.
3874
3875 The blockdpy utility is launched by the -accept option and told to
3876 exit via the -gone option (the vnc client user should obviously
3877 re-lock the screen before disconnecting!) Instructions can be found in
3878 the source code for the utility at the above link. Roughly it is
3879 something like this:
3880 x11vnc ... -accept "blockdpy -bg -f $HOME/.bdpy" -gone "touch $HOME/.bdpy"
3881
3882 but please read the top of the file.
3883
3884 Update: As of Feb/2007 there is some builtin support for this:
3885 -forcedpms and -clientdpms however, they are probably less robust than
3886 the above blockdpy.c scheme, since if the person floods the physical
3887 machine with mouse or pointer input he can usually see flashes of the
3888 screen before the monitor is powered off again. See also the -grabkbd,
3889 -grabptr, and -grabalways options.
3890
3891
3892 Q-49: Can I have x11vnc automatically lock the screen when I
3893 disconnect the VNC viewer?
3894
3895 Yes, a user mentions he uses the -gone option under CDE to run a
3896 screen lock program:
3897 x11vnc -display :0 -forever -gone 'dtaction LockDisplay'
3898
3899 Other possibilities are:
3900 x11vnc -display :0 -forever -gone 'xscreensaver-command -lock'
3901 x11vnc -display :0 -forever -gone 'kdesktop_lock'
3902 x11vnc -display :0 -forever -gone 'xlock &'
3903 x11vnc -display :0 -forever -gone 'xlock -mode blank &'
3904
3905 Here is a scheme using the -afteraccept option (in version 0.8) to
3906 unlock the screen after the first valid VNC login and to lock the
3907 screen after the last valid VNC login disconnects:
3908 x11vnc -display :0 -forever -shared -afteraccept ./myxlocker -gone ./myxlocke
3909 r
3910
3911 Where the script ./myxlocker is:
3912 #!/bin/sh
3913
3914 #/usr/bin/env | grep RFB_ | sort # for viewing RFB_* settings.
3915
3916 if [ "X$RFB_MODE" = "Xafteraccept" ]; then
3917 if [ "X$RFB_STATE" = "XNORMAL" ]; then # require valid login
3918 if [ "X$RFB_CLIENT_COUNT" = "X1" ]; then
3919 killall xlock # Linux only.
3920 fi
3921 fi
3922 elif [ "X$RFB_MODE" = "Xgone" ]; then
3923 if [ "X$RFB_STATE" = "XNORMAL" ]; then # require valid login
3924 if [ "X$RFB_CLIENT_COUNT" = "X0" ]; then
3925 xlock -mode blank &
3926 fi
3927 fi
3928 fi
3929
3930 Note the xlock option "-mode blank" to avoid animations.
3931
3932 There is a problem if you have x11vnc running this way in -forever
3933 mode and you hit Ctrl-C to stop it. The xlock (or other program) will
3934 get killed too. To work around this make a little script called
3935 setpgrp that looks like:
3936 #!/usr/bin/perl
3937 setpgrp(0, 0);
3938 exec @ARGV;
3939
3940 then use -gone "setpgrp xlock &", etc.
3941 [Encrypted Connections]
3942
3943 Q-50: How can I tunnel my connection to x11vnc via an encrypted SSH
3944 channel between two Unix machines?
3945
3946 See the description earlier on this page on how to tunnel VNC via SSH
3947 from Unix to Unix. A number of ways are described along with some
3948 issues you may encounter.
3949
3950 Other secure encrypted methods exists, e.g. stunnel, IPSEC, various
3951 VPNs, etc.
3952
3953 See also the Enhanced TightVNC Viewer (SSVNC) page where much of this
3954 is now automated.
3955
3956
3957 Q-51: How can I tunnel my connection to x11vnc via an encrypted SSH
3958 channel from Windows using an SSH client like Putty?
3959
3960 Above we described how to tunnel VNC via SSH from Unix to Unix, you
3961 may want to review it. To do this from Windows using Putty it would go
3962 something like this:
3963 * In the Putty dialog window under 'Session' enter the hostname or
3964 IP number of the Unix machine with display to be viewed.
3965 * Make sure the SSH protocol is selected and the server port is
3966 correct.
3967 * Under 'Connections/SSH/Tunnels' Add a Local connection with
3968 'Source port: 5900' and 'Destination: localhost:5900'
3969 * Log into the remote machine by pressing 'Open' and supplying
3970 username, password, etc.
3971 * In that SSH shell, start up x11vnc by typing the command: x11vnc
3972 -display :0 plus any other desired options (e.g. -localhost.)
3973 * Finally, start up your VNC Viewer in Windows and enter
3974 'localhost:0' as the VNC server.
3975
3976 You can keep all of the settings in a Putty 'Saved Session'. Also,
3977 once everything is working, you can consider putting x11vnc -display
3978 :0 (plus other cmdline options) in the 'Remote command' Putty setting
3979 under 'Connections/SSH'.
3980
3981 See also the Enhanced TightVNC Viewer (SSVNC) page where much of this
3982 is now automated via the Putty plink utility.
3983
3984 For extra protection feel free to run x11vnc with the -localhost and
3985 -rfbauth/-passwdfile options.
3986
3987 If the machine you SSH into via Putty is not the same machine with the
3988 X display you wish to view (e.g. your company provides incoming SSH
3989 access to a gateway machine), then you need to change the above Putty
3990 dialog setting to: 'Destination: otherhost:5900', Once logged in,
3991 you'll need to do a second login (ssh or rsh) to the workstation
3992 machine 'otherhost' and then start up x11vnc on it. This can also be
3993 automated by Chaining SSH's.
3994
3995 As discussed above another option is to first start the VNC viewer in
3996 "listen" mode, and then launch x11vnc with the "-connect localhost"
3997 option to establish the reverse connection. In this case a Remote port
3998 redirection (not Local) is needed for port 5500 instead of 5900 (i.e.
3999 'Source port: 5500' and 'Destination: localhost:5500' for a Remote
4000 connection.)
4001
4002
4003 Q-52: How can I tunnel my connection to x11vnc via an encrypted SSL
4004 channel using an external tool like stunnel?
4005
4006 It is possible to use a "lighter weight" encryption setup than SSH or
4007 IPSEC. SSL tunnels such as stunnel (also stunnel.org) provide an
4008 encrypted channel without the need for Unix users, passwords, and key
4009 passphrases required for ssh (and at the other extreme SSL can also
4010 provide a complete signed certificate chain of trust.) On the other
4011 hand, since SSH is usually installed everywhere and firewalls often
4012 let its port through, ssh is frequently the path of least resistance
4013 (it also nicely manages public keys for you.)
4014
4015 Update: As of Feb/2006 x11vnc has the options -ssl, -stunnel, and
4016 -sslverify to provide integrated SSL schemes. They are discussed in
4017 the Next FAQ (you probably want to skip to it now.)
4018
4019 We include these non-built-in method descriptions below for historical
4020 reference. They are handy because can be used to create SSL tunnels to
4021 any VNC (or other type of) server.
4022
4023
4024 Here are some basic examples using stunnel but the general idea for
4025 any SSL tunnel utility is the same:
4026 * Start up x11vnc and constrain it to listen on localhost.
4027 * Then start up the SSL tunnel running on the same machine to
4028 forward incoming connections to that x11vnc.
4029 * Set up and run a similar SSL tunnel for the outgoing connection on
4030 the VNC viewer machine pointing it to the SSL/x11vnc server.
4031 * Optionally, set up server (or even client) public/private keys for
4032 use in authenticating one side to the other.
4033 * Finally, start the VNC Viewer and tell it to connect to the local
4034 port (e.g. a vnc display localhost:0) where its outgoing SSL
4035 tunnel is listening.
4036
4037 We'll first use the stunnel version 3 syntax since it is the most
4038 concise and Unixy.
4039
4040 Start up x11vnc listening on port 5900:
4041 x11vnc -display :0 -rfbport 5900 -localhost -bg -passwdfile ~/mypass
4042
4043 Then start stunnel (version 3, not 4) with this command:
4044 stunnel -d 5901 -r 5900 -p /path/to/stunnel.pem
4045
4046 The above two commands are run on host "far-away.east". The
4047 stunnel.pem is the self-signed PEM file certificate created when
4048 stunnel is built. One can also create certificates signed by
4049 Certificate Authorities or self-signed if desired using the x11vnc
4050 utilities described there.
4051
4052 SSL Viewers: Next, on the VNC viewer side we need an SSL tunnel to
4053 encrypt the outgoing connection. The nice thing is any SSL tunnel can
4054 be used because the protocol is a standard. For this example we'll
4055 also use stunnel on the viewer side on Unix. First start up the
4056 client-side stunnel (version 3, not 4):
4057 stunnel -c -d localhost:5902 -r far-away.east:5901
4058
4059 Then point the viewer to the local tunnel on port 5902:
4060 vncviewer -encodings "copyrect tight zrle hextile" localhost:2
4061
4062 That's it. Note that the ss_vncviewer script can automate this
4063 easily, and so can the Enhanced TightVNC Viewer (SSVNC) package.
4064
4065 Be sure to use a VNC password because unlike ssh by default the
4066 encrypted SSL channel provides no authentication (only privacy.) With
4067 some extra configuration one could also set up certificates to provide
4068 authentication of either or both sides as well (and hence avoid
4069 man-in-the-middle attacks.) See the stunnel and openssl documentation
4070 and also the key management section for details.
4071
4072 stunnel has also been ported to Windows, and there are likely others
4073 to choose from for that OS. Much info for using it on Windows can be
4074 found at the stunnel site and in this article The article also shows
4075 the detailed steps to set up all the authentication certificates. (for
4076 both server and clients, see also the x11vnc utilities that do this.)
4077 The default Windows client setup (no certs) is simpler and only 4
4078 files are needed in a folder: stunnel.exe, stunnel.conf, libssl32.dll,
4079 libeay32.dll. We used an stunnel.conf containing:
4080 # stunnel.conf:
4081 client = yes
4082 options = ALL
4083 [myvncssl]
4084 accept = localhost:5902
4085 connect = far-away.east:5901
4086
4087 then double click on the stunnel.exe icon to launch it (followed by
4088 pointing the VNC viewer to localhost:2).
4089
4090
4091 stunnel inetd-like mode:
4092
4093 As an aside, if you don't like the little "gap" of unencrypted TCP
4094 traffic (and a localhost listening socket) on the local machine
4095 between stunnel and x11vnc it can actually be closed by having stunnel
4096 start up x11vnc in -inetd mode:
4097 stunnel -p /path/to/stunnel.pem -P none -d 5900 -l ./x11vnc_sh
4098
4099 Where the script x11vnc_sh starts up x11vnc:
4100 #!/bin/sh
4101 x11vnc -q -inetd -display :0 -passwdfile ~/mypass
4102
4103 Note that this creates a separate x11vnc process for each incoming
4104 connection (as any inetd x11vnc usage would), but for the case of
4105 normally just one viewer at a time it should not be a big problem.
4106
4107
4108 stunnel 4 syntax:
4109
4110 Somewhat sadly, the stunnel version 4 syntax is not so amenable to the
4111 command line or scripts. You need to create a config file with the
4112 parameters. E.g.:
4113 stunnel x11vnc.cfg
4114
4115 Where the file x11vnc.cfg contains:
4116 foreground = yes
4117 pid =
4118 cert = /path/to/stunnel.pem
4119 [x11vnc_stunnel]
4120 accept = 5901
4121 connect = 5900
4122
4123 One nice thing about version 4 is often the PEM file does not need to
4124 be specified because stunnel finds it in its installed area. One other
4125 gotcha the PEM file is usually only readable by root (it has the
4126 private key afterall), so you'll need to relax the permissions or make
4127 a copy that the user running x11vnc/stunnel can read.
4128
4129
4130 SSL VNC Viewers:
4131
4132 Regarding VNC viewers that "natively" do SSL unfortunately there do
4133 not seem to be many. The SingleClick UltraVNC Java Viewer is SSL and
4134 is compatible with x11vnc's -ssl option and stunnel.) Commercial
4135 versions of VNC seem to have some SSL-like encryption built in, but we
4136 haven't tried those either and they probably wouldn't work since their
4137 (proprietary) SSL-like negotiation is likely embedded in the VNC
4138 protocol unlike our case where it is external.
4139
4140 Note: as of Mar/2006 libvncserver/x11vnc provides a SSL-enabled Java
4141 applet that can be served up via the -httpdir or -http options when
4142 -ssl is enabled. It will also be served via HTTPS via either the VNC
4143 port (e.g. https://host:5900/) or a 2nd port via the -https option.
4144
4145 In general current SSL VNC solutions are not particularly "seemless".
4146 But it can be done, and with a wrapper script on the viewer side and
4147 the -stunnel or -ssl option on the server side it works well and is
4148 convenient. Here is a simple script ss_vncviewer that automates
4149 running stunnel on the VNC viewer side on Unix a little more carefully
4150 than the commands printed above. (One could probably do a similar
4151 thing with a .BAT file on Windows in the stunnel folder.)
4152
4153 Update Jul/2006: we now provide an Enhanced TightVNC Viewer (SSVNC)
4154 package that starts up STUNNEL automatically along with some other
4155 features. All binaries (stunnel, vncviewer, and some utilities) are
4156 provided in the package. It works on Unix, Mac OS X, and Windows.
4157
4158
4159 Q-53: Does x11vnc have built-in SSL tunneling?
4160
4161 You can read about non-built-in methods in the Previous FAQ for
4162 background.
4163
4164 SSL tunnels provide an encrypted channel without the need for Unix
4165 users, passwords, and key passphrases required for ssh (and at the
4166 other extreme SSL can also provide a complete signed certificate chain
4167 of trust.) On the other hand, since SSH is usually installed
4168 everywhere and firewalls often let its port through, ssh is frequently
4169 the path of least resistance.
4170
4171 Built-in SSL x11vnc options:
4172
4173 As of Feb/2006 the x11vnc -ssl option automates the SSL tunnel
4174 creation on the x11vnc server side. An SSL-enabled Java Viewer applet
4175 is also provided that can be served via HTTP or HTTPS to automate SSL
4176 on the client side.
4177
4178 The -ssl mode uses the www.openssl.org library if available at build
4179 time.
4180
4181 The mode requires an SSL certificate and key (i.e. .pem file.) These
4182 are usually created via the openssl(1) program (in fact in for "-ssl"
4183 (same as "-ssl SAVE") it will run openssl for you automatically.) So
4184 the SSL is not completely "built-in" since this external tool needs to
4185 be installed, but at least x11vnc runs it for you automatically.
4186
4187 An -ssl example:
4188 x11vnc -display :0 -ssl -passwdfile ~/mypass
4189
4190 You'll get output like this:
4191 09/04/2006 19:27:35 Creating a self-signed PEM certificate...
4192 09/04/2006 19:27:35
4193 ...
4194
4195 The SSL VNC desktop is: far-away.east:0
4196 PORT=5900
4197 SSLPORT=5900
4198
4199 In this case openssl(1) was used to create a PEM automatically. It
4200 will prompt you if you want to protect it with with a passphrase. Use
4201 "-ssl SAVE_NOPROMPT" to not be prompted. Use "-ssl TMP" to create a
4202 temporary self-signed cert that will be discarded when x11vnc exits.
4203
4204 Update: As of Nov/2008 x11vnc also supports the VeNCrypt SSL/TLS
4205 tunnel extension to the VNC protocol. The older ANONTLS method (vino)
4206 is also supported. This support is on by default when the -ssl option
4207 is in use and can be fine-tuned using these options: -vencrypt,
4208 -anontls, and -sslonly.
4209
4210 The normal x11vnc -ssl operation is somewhat like a URL method
4211 vncs://hostname if vnc://hostname indicates a standard unencrypted VNC
4212 connection. Just as https://hostname is an SSL encrypted version of
4213 http://hostname. The entire VNC session goes through the SSL tunnel.
4214 VeNCrypt, on the other hand, switches to SSL/TLS early in the VNC
4215 protocol handshake. x11vnc 0.9.6 supports both simultaneously when
4216 -ssl is active.
4217
4218
4219 SSL VNC Viewers:. Viewer-side will need to use SSL as well. See the
4220 next FAQ and here for SSL enabled VNC Viewers, including SSVNC, to
4221 connect to the above x11vnc via SSL.
4222
4223
4224 As seen above, the PEM (privacy enhanced mail) file does not need to
4225 be supplied if the openssl(1) command is available in PATH, in that
4226 case a self-signed, certificate good the current and subsequent x11vnc
4227 sessions is created (this may take a while on very slow machines.)
4228
4229 In general, the PEM file contains both the Certificate (i.e. public
4230 key) and the Private Key. Because of the latter, the file should be
4231 protected from being read by untrusted users. The best way to do this
4232 is to encrypt the key with a passphrase (note however this requires
4233 supplying the passphrase each time x11vnc is started up.)
4234
4235 See the discussion on x11vnc Key Management for some utilities
4236 provided for creating and managing certificates and keys and even for
4237 creating your own Certificate Authority (CA) for signing VNC server
4238 and client certificates. This may be done by importing the certificate
4239 into Web Browser or Java plugin keystores, or pointing stunnel to it.
4240 The wrapper script ss_vncviewer provides an example on unix (see the
4241 -verify option.)
4242
4243 Here are some notes on the simpler default (non-CA) operation. To have
4244 x11vnc save the generated certificate and key, use the "SAVE" keyword
4245 like this:
4246 x11vnc -ssl SAVE -display :0 ...
4247
4248 (this is the same as the default: "-ssl".) This way it will be saved
4249 in the default directory ~/.vnc/certs/ as server.crt (the certificate
4250 only) and server.pem (both certificate and private key.) This opens up
4251 the possibility of copying the server.crt to machines where the VNC
4252 Viewer will be run to enable authenticating the x11vnc SSL VNC server
4253 to the clients. When authentication takes place this way (or via the
4254 more sophisticated CA signing described here), then
4255 Man-In-The-Middle-Attacks are prevented. Otherwise, the SSL encryption
4256 only provides protection against passive network traffic "sniffing"
4257 (i.e. you are not protected against M-I-T-M attacks.) Nowadays, most
4258 people seem mostly concerned mainly about passive sniffing (and the
4259 default x11vnc SSL mode protects against it.) Note that there are
4260 hacker tools like dsniff/webmitm and cain that implement SSL
4261 Man-In-The-Middle attacks. They rely on the client not bothering to
4262 check the cert.
4263
4264
4265 One can test to some degree that SSL is working after starting x11vnc
4266 with the -stunnel or -ssl option. From another machine one can use the
4267 openssl command something like this:
4268 openssl s_client -debug -msg -showcerts -connect far-away.east:5900
4269
4270 After all of the debugging output and informational messages you'll
4271 see the string "RFB 003.008" that came from x11vnc. Pointing a web
4272 browser connecting to: https://far-away.east:5900/ and then viewing
4273 the SSL certificate information about the connection in the panels
4274 will also work.
4275
4276 Note: If you serve up the SSL enabled Java VNC Viewer via something
4277 like:
4278 x11vnc -ssl -httpdir /usr/local/share/x11vnc/classes/ssl
4279
4280 (or just the -http option), you can test it out completely using that,
4281 including using https to download it into the browser and connect to
4282 x11vnc.
4283
4284
4285 The older -stunnel option: Before the -ssl option there was a
4286 convenience option -stunnel that would start an external SSL tunnel
4287 for you using stunnel. The -ssl method is the preferred way, but for
4288 historical reference we keep the -stunnel info here.
4289
4290 The -stunnel mode requires the stunnel.mirt.net command stunnel(8) to
4291 be installed on the system.
4292
4293 Some -stunnel examples:
4294 x11vnc -display :0 -stunnel /path/to/stunnel.pem -passwdfile ~/mypass
4295
4296 x11vnc -display :0 -stunnel SAVE ...
4297
4298 You'll get output like this:
4299 The VNC desktop is: localhost:50
4300 The SSL VNC desktop is: far-away.east:0
4301 PORT=5950
4302 SSLPORT=5900
4303
4304 That indicates stunnel is listening on port 5900 for incoming
4305 SSL-wrapped VNC connections from viewers. x11vnc is listening for
4306 local connections on port 5950 in this case (remote viewers cannot
4307 connect to it directly.) For -stunnel to work the stunnel command must
4308 be installed on the machine and available in PATH (note stunnel is
4309 often installed in sbin directories rather than bin.) Note that the
4310 default "-stunnel" by itself creates a temporary cert (as in "-ssl
4311 TMP".)
4312
4313
4314 Q-54: How do I use VNC Viewers with built-in SSL tunneling?
4315
4316 Notes on using "native" VNC Viewers with SSL:
4317
4318 There aren't any native VNC Viewers that do SSL (ask your VNC viewer
4319 developer to add the feature.) So a tunnel must be setup that you
4320 point the VNC Viewer to. This is often STUNNEL. You can do this
4321 manually, or use the ss_vncviewer script on Unix, or our Enhanced
4322 TightVNC Viewer (SSVNC) package on Unix, Windows, or MacOSX. See the
4323 next section for Java Web browser SSL VNC Viewers (you only need a
4324 Java-enabled Web browser for it to work.)
4325
4326 Notes on the SSL enabled Java VNC Viewer provided in x11vnc
4327 classes/ssl/VncViewer.jar:
4328
4329 A Java applet VNC Viewer allows you to connect to a VNC Server from a
4330 Java-enabled Web browser.
4331
4332 The SSL enabled Java VNC Viewer (VncViewer.jar) in the x11vnc package
4333 supports only SSL based connections by default. As mentioned above the
4334 -httpdir can be used to specify the path to .../classes/ssl. A typical
4335 location might be /usr/local/share/x11vnc/classes/ssl. Or -http can be
4336 used to try to have it find the directory automatically.
4337
4338 Also note that the SingleClick UltraVNC Java Viewer is compatible with
4339 x11vnc's -ssl SSL mode. (We tested it this way: "java -cp
4340 ./VncViewer.jar VncViewer HOST far-away.east PORT 5900 USESSL 1
4341 TRUSTALL 1")
4342
4343 The Java viewer uses SSL to communicate securely with x11vnc. Note
4344 that the applet can optionally also be downloaded into your web
4345 browser via HTTPS (which is HTTP over SSL.) This way the HTML page and
4346 the Java applet itself are also delivered securely with SSL (as
4347 opposed to only the VNC traffic being encrypted with SSL.)
4348
4349 For this case the output will be something like this:
4350 x11vnc -ssl SAVE -http
4351 ...
4352 The SSL VNC desktop is: far-away.east:0
4353 Java SSL viewer URL: https://far-away.east:5900/
4354 Java SSL viewer URL: http://far-away.east:5800/
4355 PORT=5900
4356 SSLPORT=5900
4357
4358 Indicating the two URLs (the first one encrypted, the second not) one
4359 could point the web browser at to get the VNC viewer applet. E.g. put
4360 this
4361 http://far-away.east:5800/
4362
4363 or:
4364 https://far-away.east:5900/
4365
4366 into your Java-enabled Web browser.
4367
4368 Note that KDE's Konqueror web browser seems to have problems with
4369 https Java applets, so you'll have to use the http/5800 with it (if
4370 you get https/5900 working let us know how you did it.)
4371
4372 If you are using a router/firewall with port-redirection, and you are
4373 redirecting ports other than the default ones (5800, 5900) listed
4374 above see here.
4375
4376 The https service provided thru the actual VNC port (5900 in the above
4377 example) can occasionally be slow or unreliable (it has to read some
4378 input and try to guess if the connection is VNC or HTTP.) If it is
4379 unreliable for you and you still want to serve the Java applet via
4380 https, use the -https option to get an additional port dedicated to
4381 https (its URL will also be printed in the output.)
4382
4383 Another possibility is to add the GET applet parameter:
4384 https://far-away.east:5900/?GET=1
4385
4386 This will have the VNC Viewer send a special HTTP GET string "GET
4387 /request.https.vnc.connection HTTP/1.0" that x11vnc will notice more
4388 quickly as a request for a VNC connection. Otherwise it must wait for
4389 a timeout to expire before it assumes a VNC connection.
4390
4391 You may also use "urlPrefix=somestring" to have /somestring prepended
4392 to /request.https.vnc.connection". Perhaps you are using a web server
4393 proxy scheme to enter a firewall or otherwise have rules applied to
4394 the URL. If you need to have any slashes "/" in "somestring" use
4395 "_2F_" (a deficiency in libvncserver prevents using the more natural
4396 "%2F".)
4397
4398 You apply multiple applet parameters in the regular URL way, e.g.:
4399 https://far-away.east:5900/?GET=1&urlPrefix=mysubdir&...
4400
4401 All of the x11vnc Java Viewer applet parameters are described in the
4402 file classes/ssl/README
4403
4404
4405 Tips on Getting the SSL Java Applet Working the First Time:
4406 Unfortunately, it can be a little tricky getting the SSL VNC Java
4407 Viewer working with x11vnc. Here are some tips to getting working the
4408 first time (afterwards you can incrementally customize with more
4409 complex settings.)
4410 * First try it on the LAN: Do NOT try to have it work the first time
4411 going through firewalls, Web proxies, home router port
4412 redirections, or Apache portal. Just try a direct connection over
4413 your LAN first (if you only have 1 machine and no LAN, just do a
4414 direct connection to the same machine: localhost.) If the LAN
4415 machine you run x11vnc on has its own host-level firewall (most
4416 linux machine come with that on by default), disable it or at
4417 least let tcp ports 5800-6000 through.
4418 * First try HTTP to download the Java Applet: x11vnc can serve both
4419 the Java Applet jar file and VNC out of the same port (both
4420 tunneled through SSL, see below.) But it can lead to timing and
4421 other problems. So first try HTTP instead of HTTPS to download the
4422 Applet jar file (VncViewer.jar.) That is to say try
4423 http://hostname:5800 in your web browser first before trying
4424 https://hostname:5900. x11vnc will print out the ports and URLs it
4425 is using, so use the HTTP one it prints out.
4426 * Always Restart the Browser: If you are having failures and have to
4427 repeatedly retry things ALWAYS restart the browser (i.e.
4428 completely exit it and then start a new browser process) each
4429 time. Otherwise as you are changing things the browser may
4430 "remember" failed applet downloads, etc. and just add to the
4431 confusion and irreproducibility. If you see it trying to download
4432 VncViewer.class (instead of VncViewer.jar) you know it is really
4433 confused and needs to be restarted.
4434 * Step Lively: If you get Browser or Java VM or VNC Viewer applet
4435 dialog boxes saying things like "Do you want to trust this
4436 certificate?" or "The hostname does not match the one on the
4437 certificate", etc. just go through them as quickly as possible.
4438 x11vnc cannot wait forever for each SSL connection, and so if you
4439 dawdle too long inspecting the certs, etc it can lead to problems.
4440 Get it working first before taking your time to read the details
4441 in the dialogs, etc.
4442 * No inetd, Please: Even if you intend to deploy via inetd or xinetd
4443 eventually, get that working later (and remember do not use
4444 something like "-ssl TMP" that creates a new temporary SSL
4445 certificate for every new socket connection.)
4446 * Nothing Fancy: Do not try fancy stuff like -svc, -create, -unixpw,
4447 "-users unixpw=", "-users sslpeer=", -sslverify, etc. Just get the
4448 simplest connection working first and then incrementally add what
4449 you need.
4450
4451 So the recommended test command lines are:
4452 x11vnc -ssl SAVE -http
4453 x11vnc -ssl SAVE -httpdir /path/to/x11vnc/classes/ssl
4454
4455 Use the latter if x11vnc cannot automatically find the classes/ssl
4456 directory (this what the -http option instructs it to do.) Then point
4457 your browser to the HTTP (not HTTPS) URL it prints out.
4458
4459 Following the above guidelines, did it work? If so, Congratulations!!
4460 you created an SSL encrypted connection between the SSL Java applet
4461 running in your web browser and x11vnc. The fact that you used HTTP
4462 instead of HTTPS to download the applet is not the end of the world
4463 (some users do it this way), the main thing is that the VNC traffic is
4464 encrypted with SSL. If you are having trouble even with the above
4465 baseline test case feel free to contact me (please send the Full
4466 x11vnc output, not just part of it; the complete x11vnc command line;
4467 the URL(s) entered in the browser; the full Java Console output; and
4468 anything else you can think of.)
4469
4470 Next, you can add the features you want one by one testing it still
4471 works each time. I suggest first turning on the HTTPS applet download
4472 (https://hostname:5900) if that is what you intend to use. That one
4473 gives the most trouble because of the ambiguity of passing two
4474 different protocols (HTTP and VNC) through the same SSL service port.
4475
4476 Next, turn on inetd if you intend to use that (this can be tricky too,
4477 be sure to use -oa logfile and inspect it carefully if there are
4478 problems.) If you are going to use non-standard ports (e.g. "-rfbport
4479 443" as root), work on that next. Then enable the firewall, router
4480 port redirection channel (you will somehow need to be outside to do
4481 that, maybe test that through another VNC session.)
4482
4483 Then, if you plan to use them, enable "fancy stuff" like "-svc" or
4484 "-unixpw", etc, etc. Be sure to add a password either "-rfbauth" or
4485 "-unixpw" or both. If you need to have the web browser use a corporate
4486 Web Proxy (i.e. it cannot connect directly) work on that last. Ditto
4487 for the Apache portal.
4488
4489
4490 Router/Firewall port redirs: If you are doing port redirection at
4491 your router to an internal machine running x11vnc AND the internet
4492 facing port is different from the internal machine's VNC port, you
4493 will need to apply the PORT applet parameter to indicate to the applet
4494 the Internet facing port number (otherwise by default the internal
4495 machine's port, say 5900, is sent and that of course is rejected at
4496 the firewall/router.) For example:
4497 https://far-away.east:443/?GET=1&PORT=443
4498
4499 So in this example the user configures his router to redirect
4500 connections to port 443 on his Internet side to, say, port 5900 on the
4501 internal machine running x11vnc. See also the -httpsredir option that
4502 will try to automate this for you.
4503
4504 To configure your router to do port redirection, see its instructions.
4505 Typically, from the inside you point a web browser to a special URL
4506 (e.g. http://192.168.1.1) and you get a web interface to configure it.
4507 Look for something like "Port Redirection" or "Port Forwarding",
4508 probably under "Advanced" or something like that. If you have a Linux
4509 or Unix system acting as your firewall/router, see its firewall
4510 configuration.
4511
4512 You can also use x11vnc options -rfbport NNNNN and -httpport NNNNN to
4513 match the ports that your firewall will be redirecting to the machine
4514 where x11vnc is run.
4515
4516
4517 Tedious Dialogs: If you do serve the SSL enabled Java viewer via https
4518 be prepared for quite a number of "are you sure you trust this site?"
4519 dialogs:
4520 * First from the Web browser that cannot verify the self-signed
4521 certificate when it downloads index.vnc.
4522 * From the Web browser again noting that the common name on the
4523 certificate does not match the hostname of the remote machine.
4524 * Next from the Java VM that cannot verify the self-signed
4525 certificate when it downloads VncViewer.jar.
4526 * And also from the Java VM again noting that the common name on the
4527 certificate does not match the hostname of the remote machine.
4528 * Finally from the Java VncViewer applet itself saying it cannot
4529 verify the certificate! (or a popup asking you if you want to see
4530 the certificate.)
4531
4532 Note that sometimes if you pause too long at one of the above dialogs
4533 then x11vnc may exceed a timeout and assume the current socket
4534 connection is VNC instead of the HTTPS it actually is (but since you
4535 have paused too long at the dialog the GET request comes too late.)
4536 Often hitting Reload and going through the dialogs more quickly will
4537 let you connect. The Java VM dialogs are the most important ones to
4538 NOT linger at. If you see in the x11vnc output a request for
4539 VncViewer.class instead of VncViewer.jar it is too late... you will
4540 need to completely restart the Web browser to get it to try for the
4541 jar again. You can use the -https option if you want a dedicated port
4542 for HTTPS connections instead of sharing the VNC port.
4543
4544 To see example x11vnc output for a successful https://host:5900/
4545 connection with the Java Applet see This Page. And here is a newer
4546 example including the Java Console output.
4547
4548 All of the x11vnc Java Viewer applet parameters are described in the
4549 file classes/ssl/README
4550
4551
4552 Notes on the VNC Viewer ss_vncviewer wrapper script:
4553
4554 If you want to use a native VNC Viewer with the SSL enabled x11vnc you
4555 will need to run an external SSL tunnel on the Viewer side. There do
4556 not seem to be any native SSL VNC Viewers outside of our x11vnc and
4557 SSVNC packages. The basic ideas of doing this were discussed for
4558 external tunnel utilities here.
4559
4560 The ss_vncviewer script provided with x11vnc and SSVNC can set up the
4561 stunnel tunnel automatically on unix as long as the stunnel command is
4562 installed on the Viewer machine and available in PATH (and vncviewer
4563 too of course.) Note that on a Debian based system you will need to
4564 install the package stunnel4 not stunnel. You can set the environment
4565 variables STUNNEL and VNCVIEWERCMD to point to the correct programs if
4566 you want to override the defaults.
4567
4568 Here are some examples:
4569 1) ss_vncviewer far-away.east:0
4570
4571 2) ss_vncviewer far-away.east:0 -encodings "copyrect tight zrle hextile"
4572
4573 3) ss_vncviewer -verify ./server.crt far-away.east:0
4574
4575 4) ss_vncviewer -mycert ./client.pem far-away.east:0
4576
4577 5) ss_vncviewer -proxy far-away.east:8080 myworkstation:0
4578
4579 The first one is the default mode and accepts the x11vnc certificate
4580 without question. The second one is as the first, but adds the
4581 -encodings options to the vncviewer command line.
4582
4583 The third one requires that the x11vnc server authenticate itself to
4584 the client against the certificate in the file ./server.crt (e.g. one
4585 created by "x11vnc -ssl SAVE" and safely copied to the VNC viewer
4586 machine.)
4587
4588 The fourth one is for VNC Viewer authentication, it uses ./client.pem
4589 to authenticate itself to x11vnc. One can supply both -verify and
4590 -mycert simultaneously.
4591
4592 The fifth one shows that Web proxies can be used if that is the only
4593 way to get out of the firewall. If the "double proxy" situation arises
4594 separate the two by commas. See this page for more information on how
4595 Web proxies come into play.
4596
4597 If one uses a Certificate Authority (CA) scheme described here, the
4598 wrapper script would use the CA cert instead of the server cert:
4599 3') ss_vncviewer -verify ./cacert.crt far-away.east:0
4600
4601 Update Jul/2006: we now provide an Enhanced TightVNC Viewer (SSVNC)
4602 package that starts up STUNNEL automatically along with some other
4603 features. All binaries (stunnel, vncviewer, and some utilities) are
4604 provided in the package. It works on Unix, Mac OS X, and Windows.
4605
4606
4607 Q-55: How do I use the Java applet VNC Viewer with built-in SSL
4608 tunneling when going through a Web Proxy?
4609 The SSL enabled Java VNC Viewer and firewall Proxies:
4610
4611 SSL and HTTPS aside, there is a general problem with Firewall Proxies
4612 and Java Applets that open sockets. The applet is downloaded
4613 successfully (through the browser) using HTTP and the proxy, but when
4614 the applet tries to reconnect to the originating host (the only one
4615 allowed by security) it does not use the proxy channel. So it cannot
4616 reconnect to the server the applet came from!
4617
4618 We have found a convenient workaround: in the directory where
4619 VncViewer.jar resides there is a digitally signed version of the same
4620 applet called SignedVncViewer.jar. Since the applet is digitally
4621 signed, there will be an additional dialog from the Java VM plugin
4622 asking you if you want to trust the applet fully.
4623
4624 You should say "Yes". If you do, the applet will be run in a mode
4625 where it can try to determine the firewall proxy host name and port
4626 (it will ask you for them if it cannot find them.) This way it can
4627 connect directly to the Proxy and then request the CONNECT method to
4628 be redirected to the originating host (the x11vnc VNC Server.) SSL is
4629 then layered over this socket.
4630
4631 To do this you should use the proxy.vnc HTML file like via this URL in
4632 your browser:
4633 https://yourmachine.com:5900/proxy.vnc
4634
4635 (instead of the unsigned one in https://yourmachine.com:5900/ that
4636 gives the default index.vnc)
4637
4638 Proxies that limit CONNECT to ports 443 and 563:
4639
4640 Things become trickier if the Web proxy restricts which CONNECT ports
4641 can be redirected to. For security, some (most?) proxies only allow
4642 port 443 (HTTPS) and 563 (SNEWS) by default. In this case, the only
4643 thing to do is run x11vnc on that low port, e.g. "-rfbport 443", (or
4644 use a port redirection on, say, a firewall or router port 443 to the
4645 internal machine.)
4646
4647 If you do such a redirection to an internal machine and x11vnc is not
4648 listening on port 443, you will probably need to edit proxy.vnc.
4649 Suppose the SSL x11vnc server was listening on port 5901. You should
4650 change the line in proxy.vnc from:
4651 <param name=PORT value=$PORT>
4652
4653 to:
4654 <param name=PORT value=443>
4655
4656 Since otherwise $PORT will be expanded to 5901 by x11vnc and the
4657 viewer applet will fail to connect to that port on the firewall.
4658
4659 Another way to achieve the same thing is to use the applet PORT
4660 parameter:
4661 https://yourmachine.com/proxy.vnc?PORT=443
4662
4663 this is cleaner because it avoids editing the file, but requires more
4664 parameters in the URL. See also the -httpsredir x11vnc option that
4665 will try to automate this for you. To use the GET trick discussed
4666 above, do:
4667 https://yourmachine.com/proxy.vnc?GET=1&PORT=443
4668
4669 All of the x11vnc Java Viewer applet parameters are described in the
4670 file classes/ssl/README
4671
4672 Here is an example of Java Console and x11vnc output for the Web proxy
4673 case.
4674
4675
4676 Note that both the ss_vncviewer stunnel Unix wrapper script and
4677 Enhanced TightVNC Viewer (SSVNC) can use Web proxies as well even
4678 though they do not involve a Web browser.
4679
4680
4681 Q-56: Can Apache web server act as a gateway for users to connect via
4682 SSL from the Internet with a Web browser to x11vnc running on their
4683 workstations behind a firewall?
4684 Yes. You will need to configure apache to forward these connections.
4685 It is discussed here. This SSL VNC portal provides a clean alternative
4686 to the traditional method where the user uses SSH to log in through
4687 the gateway to create the encrypted port redirection to x11vnc running
4688 on her desktop.
4689
4690 Also see the desktop.cgi CGI script method that achieves much of what
4691 this Apache VNC SSL portal method does (as long as desktop.cgi's 'port
4692 redirection' mode is enabled.)
4693
4694
4695 Q-57: Can I create and use my own SSL Certificate Authority (CA) with
4696 x11vnc?
4697 Yes, see this page for how to do this and the utility commands x11vnc
4698 provides to create and manage many types of certificates and private
4699 keys.
4700
4701
4702
4703 [Display Managers and Services]
4704
4705 Q-58: How can I run x11vnc as a "service" that is always available?
4706
4707 There are a number of ways to do this. The primary thing you need to
4708 decide is whether you want x11vnc to connect to the X session on the
4709 machine 1) regardless of who (or if anyone) has the X session, or 2)
4710 only if a certain user has the X session. Because X sessions are
4711 protected by X permissions (MIT-MAGIC-COOKIE files XAUTHORITY and
4712 $HOME/.Xauthority) the automatically started x11vnc will of course
4713 need to have sufficient permissions to connect to the X display.
4714
4715 Here are some ideas:
4716 * Use the description under "Continuously" in the FAQ on x11vnc and
4717 Display Managers
4718 * Use the description in the FAQ on x11vnc and inetd(8)
4719 * Use the description in the FAQ on Unix user logins and inetd(8)
4720 * Start x11vnc from your $HOME/.xsession (or $HOME/.xinitrc or
4721 autostart script or ...)
4722 * Although less reliable, see the x11vnc_loop rc.local hack below.
4723
4724 The display manager scheme will not be specific to which user has the
4725 X session unless a test is specifically put into the display startup
4726 script (often named Xsetup.) The inetd(8) scheme may or may not be
4727 specific to which user has the X session (and it may not be able to do
4728 all users via the XAUTHORITY permission issues.)
4729
4730 The .xsession/.xinitrc scheme is obviously is specific to a particular
4731 user and only when they are logged into X. If you do not know what a
4732 $HOME/.xsession script is or how to use one, perhaps your desktop has
4733 a "session startup commands" configuration option. The command to be
4734 run in the .xsession or .xinitrc file may look like this:
4735 x11vnc -logfile $HOME/.x11vnc.log -rfbauth $HOME/.vnc/passwd -forever -bg
4736
4737 plus any other options you desire.
4738
4739 Depending on your desktop and/or OS/distribution the automatically run
4740 X startup scripts (traditionally .xsession/.xinitrc) may have to be in
4741 a different directory or have a different basename. One user
4742 recommends the description under 'Running Scripts Automatically' at
4743 this link.
4744
4745 Firewalls: note all methods will require the host-level firewall to be
4746 configured to allow connections in on a port. E.g. 5900 (default VNC
4747 port) or 22 (default SSH port for tunnelling VNC.) Most systems these
4748 days have firewalls turned on by default, so you will actively have to
4749 do something to poke a hole in the firewall at the desired port
4750 number. See your system administration tool for Firewall settings
4751 (Yast, Firestarter, etc.)
4752
4753
4754 Q-59: How can I use x11vnc to connect to an X login screen like xdm,
4755 GNOME gdm, KDE kdm, or CDE dtlogin? (i.e. nobody is logged into an X
4756 session yet.)
4757
4758 We describe two scenarios here. The first is called 'One time only'
4759 meaning you just need to do it quickly once and don't want to repeat;
4760 and the second is called 'Continuously' meaning you want the access to
4761 be available after every reboot and after every desktop logout.
4762 _________________________________________________________________
4763
4764 One time only: If the X login screen is running and you just want to
4765 connect to it once (i.e. a one-shot):
4766
4767 It is usually possible to do this by just adjusting the XAUTHORITY
4768 environment variable to point to the correct MIT-COOKIE auth file
4769 while running x11vnc as root, e.g. for the gnome display manager, GDM:
4770 x11vnc -auth /var/gdm/:0.Xauth -display :0
4771
4772 (the -auth option sets the XAUTHORITY variable for you.)
4773
4774 There will be a similar thing to do for xdm using however a different
4775 auth directory path (perhaps something like
4776 /var/lib/xdm/authdir/authfiles/A:0-XQvaJk) for the xdm greeter or
4777 /var/lib/kdm/A:0-crWk72 (or /var/run/xauth/A:0-qQPftr, etc. etc) for
4778 the kdm greeter. Of course, the random characters in the file basename
4779 will vary and you will need to use the actual filename on your system.
4780 Read your system docs to find out where the display manager cookie
4781 files are kept.
4782
4783 Trick: sometimes ps(1) can reveal the X server process -auth argument
4784 (e.g. "ps wwaux | grep auth") and hence the path to the auth file.
4785
4786 x11vnc must be run as root for this because the /var/gdm/:0.Xauth,
4787 /var/lib/kdm/A:0-crWk72, etc. auth files are only readable by root. If
4788 you do not want to run x11vnc as root, you can copy (as root or sudo)
4789 the auth file to some location and make it readable by your userid.
4790 Then run x11vnc as your userid with -auth pointed to the copied file.
4791
4792 Update Dec/2009: use "-auth guess" to have x11vnc try to guess the
4793 location of the auth file for you.
4794
4795 You next connect to x11vnc with a VNC viewer, give your username and
4796 password to the X login prompt to start your session.
4797
4798 Note: GDM: gdm seems to have an annoying setting that causes x11vnc
4799 (and any other X clients) to be killed after the user logs in. Setting
4800 KillInitClients=false in the [daemon] section of /etc/X11/gdm/gdm.conf
4801 (or /etc/gdm/gdm.conf, etc.) avoids this. Otherwise, just restart
4802 x11vnc and then reconnect your viewer. Other display managers (kdm,
4803 etc) may also have a similar problem. One user reports having to alter
4804 "gdm.conf-custom" as well.
4805
4806 Note: Solaris: For dtlogin in addition to the above sort of trick
4807 (BTW, the auth file should be in /var/dt), you'll also need to add
4808 something like Dtlogin*grabServer:False to the Xconfig file
4809 (/etc/dt/config/Xconfig or /usr/dt/config/Xconfig on Solaris, see the
4810 example at the end of this FAQ.) Then restart dtlogin, e.g.:
4811 /etc/init.d/dtlogin stop; /etc/init.d/dtlogin start or reboot.
4812
4813 Update Nov/2008: Regarding GDM KillInitClients: see the -reopen option
4814 for another possible workaround.
4815
4816 Update Oct/2009: Regarding GDM KillInitClients: starting with x11vnc
4817 0.9.9 it will try to apply heuristics to detect if a window manager is
4818 not running (i.e. whether the Display Manager Greeter Login panel is
4819 still up.) If it thinks the display manager login is still up it will
4820 delay creating windows or using XFIXES. The former is what GDM uses to
4821 kill the initial clients, use of the latter can cause a different
4822 problem: an Xorg server crash. So with 0.9.9 and later it should all
4823 work without needing to set KillInitClients=false (which is a good
4824 because recent GDM, v2.24, has removed this option) or use -noxfixes.
4825 To disable the heuristics and delaying set X11VNC_AVOID_WINDOWS=never;
4826 to set the delay time explicitly use, e.g., X11VNC_AVOID_WINDOWS=120
4827 (delays for 120 seconds after the VNC connection; you have that long
4828 to log in.)
4829 _________________________________________________________________
4830
4831 Continuously: Have x11vnc reattach each time the X server is
4832 restarted (i.e. after each logout and reboot):
4833
4834 To make x11vnc always attached to the X server including the login
4835 screen you will need to add a command to a display manager startup
4836 script.
4837
4838 Please consider the security implications of this! The VNC display for
4839 the X session always accessible (but hopefully password protected.)
4840 Add -localhost if you only plan to access via a SSH tunnel.
4841
4842 The name of the display manager startup script file depends on desktop
4843 used and seem to be:
4844 GDM (GNOME) /etc/X11/gdm/Init/Default
4845 /etc/gdm/Init/Default
4846 KDM (KDE) /etc/kde*/kdm/Xsetup
4847 XDM /etc/X11/xdm/Xsetup (or sometimes xdm/Xsetup_0)
4848 CDE /etc/dt/config/Xsetup
4849
4850 although the exact location can be operating system, distribution, and
4851 time dependent. See the documentation for your display manager:
4852 gdm(1), kdm(1), xdm(1), dtlogin(1) for additional details. There may
4853 also be display number specific scripts: e.g. Xsetup_0 vs. Xsetup, you
4854 need to watch out for.
4855
4856 Note: You should read and understand all of the Note's and Update's
4857 in the 'One time only' section above. All of the GDM topics apply here
4858 as well:
4859
4860 Note: GDM: The above (in 'One time only') gdm setting of
4861 KillInitClients=false in /etc/X11/gdm/gdm.conf (or /etc/gdm/gdm.conf,
4862 etc.) for GDM is needed here as well. Other display managers (KDM,
4863 etc) may also have a similar problem.
4864
4865 Also see the Update Oct/2009 above where x11vnc 0.9.9 and later
4866 automatically avoids being killed.
4867
4868 Note: DtLogin: The above (in 'One time only')
4869 Dtlogin*grabServer:False step for Solaris will be needed for dtlogin
4870 here as well.
4871
4872 In any event, the line you will add to the display manager script
4873 (Xsetup, Default, or whatever) will look something like:
4874 /usr/local/bin/x11vnc -rfbauth /path/to/the/vnc/passwd -o /var/log/x11vnc.log
4875 -forever -bg
4876
4877 where you should customize the exact command to your needs (e.g.
4878 -localhost for SSH tunnel-only access; -ssl SAVE for SSL access; etc.)
4879
4880 Happy, happy, joy, joy: Note that we do not need to specify -display
4881 or -auth because happily they are already set for us in the DISPLAY
4882 and XAUTHORITY environment variables for the Xsetup script!!!
4883
4884 You may also want to force the VNC port with something like "-rfbport
4885 5900" (or -N) to avoid autoselecting one if 5900 is already taken.
4886 _________________________________________________________________
4887
4888 Fedora/gdm: Here is an example of what we did on a vanilla install of
4889 Fedora-C3 (seems to use gdm by default.) Add a line like this to
4890 /etc/X11/gdm/Init/:0
4891 /usr/local/bin/x11vnc -rfbauth /etc/x11vnc.passwd -forever -bg -o /var/log/x1
4892 1vnc.log
4893
4894 And then add this line to /etc/X11/gdm/gdm.conf (or /etc/gdm/gdm.conf,
4895 etc.) in the [daemon] section:
4896 KillInitClients=false
4897
4898 Then restart: /usr/sbin/gdm-restart (or reboot.) The
4899 KillInitClients=false setting is important: without it x11vnc will be
4900 killed immediately after the user logs in. Here are full details on
4901 how to configure gdm
4902 _________________________________________________________________
4903
4904 Solaris/dtlogin: Here is an example of what we did on a vanilla
4905 install of Solaris:
4906 Make the directory /etc/dt/config:
4907 mkdir -p /etc/dt/config
4908
4909 Copy over the Xconfig file for customization:
4910 cp /usr/dt/config/Xconfig /etc/dt/config/Xconfig
4911
4912 Edit /etc/dt/config/Xconfig and uncomment the line:
4913 Dtlogin*grabServer: False
4914
4915 Next, copy over Xsetup for customization:
4916 cp /usr/dt/config/Xsetup /etc/dt/config/Xsetup
4917
4918 Edit /etc/dt/config/Xsetup and at the bottom put a line like:
4919 /usr/local/bin/x11vnc -forever -o /var/log/x11vnc.log -bg
4920
4921 (tweaked to your local setup and preferences, a password via -rfbauth,
4922 etc. would be a very good idea.)
4923
4924 Restart the X server and dtlogin:
4925 /etc/init.d/dtlogin stop
4926 /etc/init.d/dtlogin start
4927
4928 (or reboot or maybe just restart the X session.)
4929 _________________________________________________________________
4930
4931 KDM: One user running the kdm display manager reports putting this
4932 line:
4933 x11vnc -forever -rfbauth /home/xyz/.vnc/passwd -bg -o /var/log/x11vnc.log
4934
4935 in /etc/kde/kdm/Xsetup. After rebooting the system it all seemed to
4936 work fine.
4937 _________________________________________________________________
4938
4939
4940 If you do not want to deal with any display manager startup scripts,
4941 here is a kludgey script that can be run manually or out of a boot
4942 file like rc.local: x11vnc_loop It will need some local customization
4943 before running. Because the XAUTHORITY auth file must be guessed by
4944 this script, use of the display manager script method described above
4945 is greatly preferred. There is also the -loop option that does
4946 something similar.
4947
4948 If the machine is a traditional Xterminal you may want to read this
4949 FAQ.
4950
4951 Firewalls: note all methods will require the host-level firewall to be
4952 configured to allow connections in on a port. E.g. 5900 (default VNC
4953 port) or 22 (default SSH port for tunnelling VNC.) Most systems these
4954 days have firewalls turned on by default, so you will actively have to
4955 do something to poke a hole in the firewall at the desired port
4956 number. See your system administration tool for Firewall settings
4957 (Yast, Firestarter, etc.)
4958
4959
4960 Q-60: Can I run x11vnc out of inetd(8)? How about xinetd(8)?
4961
4962 Yes, perhaps a line something like this in /etc/inetd.conf will do it
4963 for you:
4964
4965 5900 stream tcp nowait root /usr/sbin/tcpd /usr/local/bin/x11vnc_sh
4966
4967 where the shell script /usr/local/bin/x11vnc_sh uses the -inetd option
4968 and looks something like (you'll need to customize to your settings.)
4969 #!/bin/sh
4970 /usr/local/bin/x11vnc -inetd -display :0 -auth /home/fred/.Xauthority \
4971 -rfbauth /home/fred/.vnc/passwd -o /var/log/x11vnc_sh.log
4972
4973 Important: Note that you must redirect the standard error output to a
4974 log file (e.g. -o logfile) or "2>/dev/null" for proper operation via
4975 inetd (otherwise the standard error also goes to the VNC vncviewer,
4976 and that confuses it greatly, causing it to abort.) If you do not use
4977 a wrapper script as above but rather call x11vnc directly in
4978 /etc/inetd.conf and do not redirect stderr to a file, then you must
4979 specify the -q (aka -quiet) option: "/usr/local/bin/x11vnc -q -inetd
4980 ...". When you supply both -q and -inet and no "-o logfile" then
4981 stderr will automatically be closed (to prevent, e.g. library stderr
4982 messages leaking out to the viewer.) The recommended practice is to
4983 use "-o logfile" to collect the output in a file or wrapper script
4984 with "2>logfile" redirection because the errors and warnings printed
4985 out are very useful in troubleshooting problems.
4986
4987 Note also the need to set XAUTHORITY via -auth to point to the
4988 MIT-COOKIE auth file to get permission to connect to the X display
4989 (setting and exporting the XAUTHORITY variable accomplishes the same
4990 thing.) See the x11vnc_loop file in the previous question for more
4991 ideas on what that auth file may be, etc. The scheme described in the
4992 FAQ on Unix user logins and inetd(8) works around the XAUTHORITY issue
4993 nicely.
4994
4995 Note: On Solaris you cannot have the bare number 5900 in
4996 /etc/inetd.conf, you'll need to replace it with a word like x11vnc an
4997 then put something like "x11vnc 5900/tcp" in /etc/services.
4998
4999 Since the process runs as root, it might be a bad idea to have the
5000 logfile in a world-writable area like /tmp if there are untrustworthy
5001 users on the machine. Perhaps /var/log is a better place.
5002
5003 Be sure to look at your /etc/hosts.allow and /etc/hosts.deny settings
5004 to limit the machines that can connect to this service (your desktop!)
5005 For the above example with /etc/hosts.allow:
5006 x11vnc_sh : 123.45.67.89
5007
5008 A really safe way to do things is to limit the above inetd to
5009 localhost only (via /etc/hosts.allow) and use ssh to tunnel the
5010 incoming connection. Using inetd for this prevents there being a tiny
5011 window of opportunity between x11vnc starting up and your vncviewer
5012 connecting to it. Always use a VNC password to further protect against
5013 unwanted access.
5014
5015 For xinetd(8), one user reports he created the file
5016 /etc/xinetd.d/x11vncservice containing the following:
5017 # default: off
5018 # description:
5019 service x11vncservice
5020 {
5021 flags = REUSE NAMEINARGS
5022 port = 5900
5023 type = UNLISTED
5024 socket_type = stream
5025 protocol = tcp
5026 wait = no
5027 user = root
5028 server = /usr/sbin/tcpd
5029 server_args = /usr/local/bin/x11vnc_sh
5030 disable = no
5031 }
5032
5033 With the contents of /usr/local/bin/x11vnc_sh similar to the example
5034 given above. One user reports this works with avoiding the wrapper
5035 script:
5036 service x11vncservice
5037 {
5038 port = 5900
5039 type = UNLISTED
5040 socket_type = stream
5041 protocol = tcp
5042 wait = no
5043 user = root
5044 server = /usr/local/bin/x11vnc
5045 server_args = -inetd -q -display :0 -auth /var/gdm/:0.Xauth
5046 disable = no
5047 }
5048
5049 (or one can replace the -q with say "-o /var/log/x11vnc.log" to
5050 capture a log)
5051
5052 The above works nicely for GDM because the -auth file is a fixed name.
5053 For KDM or XDM the filename varies. Here is one idea for a x11vnc_sh
5054 wrapper to try to guess the name:
5055 #!/bin/sh
5056 COLUMNS=256
5057 export COLUMNS
5058 authfile=`ps wwaux | grep '/X.*-auth' | grep -v grep | sed -e 's/^.*-auth *//'
5059 -e 's/ .*$//' | head -n 1`
5060
5061 if [ -r "$authfile" ]; then
5062 exec /usr/local/bin/x11vnc -inetd -o /var/log/x11vnc.log -display :0 -a
5063 uth "$authfile"
5064 fi
5065 exit 1
5066
5067 Starting with x11vnc 0.9.3 this can be automated by:
5068 #!/bin/sh
5069 exec /usr/local/bin/x11vnc -inetd -o /var/log/x11vnc.log -find -env FD_XDM=1
5070
5071
5072 Q-61: Can I have x11vnc advertise its VNC service and port via mDNS /
5073 Zeroconf (e.g. Avahi) so VNC viewers on the local network can detect
5074 it automatically?
5075
5076 Yes, as of Feb/2007 x11vnc supports mDNS / Zeroconf advertising of its
5077 service via the Avahi client library. Use the option -avahi (same as
5078 -mdns or -zeroconf) to enable it. Depending on your setup you may need
5079 to install Avahi (including the development/build packages), enable
5080 the server: avahi-daemon and avahi-dnsconfd, and possibly open up UDP
5081 port 5353 on your firewall.
5082
5083 If the Avahi client library or build environment is not available at
5084 build-time, then at run-time x11vnc will try to look for external
5085 helper programs, avahi-browse(1) or dns-sd(1), to do the work.
5086
5087 The service was tested with Chicken of the VNC ("Use Bonjour"
5088 selected) on a Mac on the same network and the service was noted and
5089 listed in the servers list. Clicking on it and then "Connect"
5090 connected automatically w/o having to enter any hostnames or port
5091 numbers.
5092
5093 It appears SuSE 10.1 comes with avahi (or you can add packages, e.g.
5094 avahi-0.6.5-27) but not the development package (you can use the
5095 OpenSuSE avahi-devel rpm.) Unfortunately, you may need to disable
5096 another Zeroconf daemon "/etc/init.d/mdnsd stop", before doing
5097 "/etc/init.d/avahi-daemon start" and "/etc/init.d/avahi-dnsconfd
5098 start". We also had to comment out the browse-domains line in
5099 /etc/avahi/avahi-daemon.conf. Hopefully there is "LessConf" to do on
5100 other distros/OS's...
5101
5102
5103 Q-62: Can I have x11vnc allow a user to log in with her UNIX username
5104 and password and then have it find her X session display on that
5105 machine and then attach to it? How about starting an X session if one
5106 cannot be found?
5107
5108 The easiest way to do this is via inetd(8) using the -unixpw and
5109 -display WAIT options. The reason inetd(8) makes this easier is that
5110 it starts a new x11vnc process for each new user connection. Otherwise
5111 a wrapper would have to listen for connections and spawn new x11vnc's
5112 (see this example and also the -loopbg option.) inetd(8) is not
5113 required for this, but it makes some aspects more general.
5114
5115 Also with inetd(8) users always connect to a fixed VNC display, say
5116 hostname:0, and do not need to memorize a special VNC display number
5117 just for their personal use, etc.
5118
5119 Update: Use the -find, -create, -svc, and -xdmsvc options that are
5120 shorthand for common FINDCREATEDISPLAY usage modes (e.g. terminal
5121 services) described below. (i.e. simply use "-svc" instead of the
5122 cumbersome "-display WAIT:cmd=FINDCREATEDISPLAY-Xvfb -unixpw -users
5123 unixpw= -ssl SAVE")
5124
5125 The -display WAIT option makes x11vnc wait until a VNC viewer is
5126 connected before attaching to the X display.
5127
5128 Additionally it can be used to run an external command that returns
5129 the DISPLAY and XAUTHORITY data. We provide some useful builtin ones
5130 (FINDDISPLAY and FINDCREATEDISPLAY below), but in principle one could
5131 supply his own script: "-display WAIT:cmd=/path/to/find_display" where
5132 the script find_display might look something like this.
5133
5134 A default script somewhat like the above is used under "-display
5135 WAIT:cmd=FINDDISPLAY" (same as -find) The format for any such command
5136 is that it returns DISPLAY=:disp as the first line and any remaining
5137 lines are either XAUTHORITY=file or raw xauth data (the above example
5138 does the latter.) If applicable (-unixpw mode), the program is run as
5139 the Unix user name who logged in.
5140
5141 On Linux if the virtual terminal is known the program appends ",VT=n"
5142 to the DISPLAY line; a chvt n will be attempted automatically. Or if
5143 only the X server process ID is known it appends ",XPID=n" (a chvt
5144 will be attempted by x11vnc.)
5145
5146 Tip: Note that the -find option is an alias for "-display
5147 WAIT:cmd=FINDDISPLAY". Use it!
5148
5149 The -unixpw option allows UNIX password logins. It conveniently knows
5150 the Unix username whose X display should be found. Here are a couple
5151 /etc/inetd.conf examples of this usage:
5152 5900 stream tcp nowait nobody /usr/sbin/tcpd /usr/local/bin/x11vnc -inetd
5153 -unixpw \
5154 -find -o /var/log/x11vnc.log -ssl SAVE -ssldir /usr/local/certs
5155 5900 stream tcp nowait root /usr/sbin/tcpd /usr/local/bin/x11vnc -inetd
5156 -unixpw \
5157 -find -o /var/log/x11vnc.log -ssl SAVE -users unixpw=
5158
5159 Note we have used the -find alias and the very long lines have been
5160 split. An alternative is to use a wrapper script, e.g.
5161 /usr/local/bin/x11vnc.sh that has all of the options. (see also the
5162 -svc alias.)
5163
5164 In the first inetd line x11vnc is run as user "nobody" and stays user
5165 nobody during the whole session. The permissions of the log files and
5166 certs directory will need to be set up to allow "nobody" to use them.
5167
5168 In the second one x11vnc is run as root and switches to the user that
5169 logs in due to the "-users unixpw=" option.
5170
5171 Note that SSL is required for this mode because otherwise the Unix
5172 password would be passed in clear text over the network. In general
5173 -unixpw is not required for this sort of scheme, but it is convenient
5174 because it determines exactly who the Unix user is whose display
5175 should be sought. Otherwise the find_display script would have to use
5176 some method to work out DISPLAY, XAUTHORITY, etc (perhaps you use
5177 multiple inetd ports and hardwire usernames for different ports.)
5178
5179 If you really want to disable the SSL or SSH -localhost constraints
5180 (this is not recommended unless you really know what you are doing:
5181 Unix passwords sent in clear text is a very bad idea...) read the
5182 -unixpw documentation.
5183
5184 A inetd(8) scheme for a fixed user that doesn't use SSL or unix
5185 passwds could be:
5186 /usr/local/bin/x11vnc -inetd -users =fred -find -rfbauth /home/fred/.vnc/pass
5187 wd -o /var/log/x11vnc.log
5188
5189 The "-users =fred" option will cause x11vnc to switch to user fred and
5190 then find his X display. The VNC password (-rfbauth) as opposed to
5191 Unix password (-unixpw) is used to authenticate the VNC client.
5192
5193 Similar looking commands to the above examples can be run directly and
5194 do not use inetd (just remove the -inetd option and run from the
5195 cmdline, etc.)
5196
5197
5198 X Session Creation: An added (Nov/2006) extension to FINDDISPLAY is
5199 FINDCREATEDISPLAY where if it does not find an X display via the
5200 FINDDISPLAY method it will create an X server session for the user
5201 (i.e. desktop/terminal server.) This is the only time x11vnc actually
5202 tries to start up an X server (normally it just attaches to an
5203 existing one.)
5204
5205 For virtual sessions you will need to install the Xvfb program (e.g.
5206 apt-get install xvfb) or our Xdummy program (see below.)
5207
5208 By default it will only try to start up virtual (non-hardware) X
5209 servers: first Xvfb and if that is not available then Xdummy (included
5210 in the x11vnc source code.) Note that Xdummy only works on Linux
5211 whereas Xvfb works just about everywhere (and in some situations
5212 Xdummy must be run as root.) An advantage of Xdummy over Xvfb is that
5213 Xdummy supports RANDR dynamic screen resizing, which can be handy if
5214 the user accesses the desktop from different sized screens (e.g.
5215 workstation and laptop.)
5216
5217 So an inetd(8) example might look like:
5218 5900 stream tcp nowait root /usr/sbin/tcpd /usr/local/bin/x11vnc -inetd \
5219 -o /var/log/x11vnc.log -http -prog /usr/local/bin/x11vnc \
5220 -ssl SAVE -unixpw -users unixpw= -display WAIT:cmd=FINDCREATEDISPLAY
5221
5222 Where the very long lines have been split. See below where that long
5223 and cumbersome last line is replaced by the -svc alias.
5224
5225 The above mode will allow direct SSL (e.g. ss_vncviewer or SSVNC)
5226 access and also Java Web browers access via: https://hostname:5900/.
5227
5228 Tip: Note that the -create option is an alias for "-display
5229 WAIT:cmd=FINDCREATEDISPLAY-Xvfb".
5230
5231 Tip: Note that -svc is a short hand for the long "-ssl SAVE -unixpw
5232 -users unixpw= -display WAIT:cmd=FINDCREATEDISPLAY" part. Unlike
5233 -create, this alias also sets up SSL encryption and Unix password
5234 login.
5235
5236 The above inetd example then simplifies to:
5237 5900 stream tcp nowait root /usr/sbin/tcpd /usr/local/bin/x11vnc -inetd \
5238 -o /var/log/x11vnc.log -http -prog /usr/local/bin/x11vnc \
5239 -svc
5240
5241 Tip: In addition to the usual unixpw parameters, inside the VNC viewer
5242 the user can specify after his username (following a ":" see -display
5243 WAIT for details) for FINDCREATEDISPLAY they can add "geom=WxH" or
5244 "geom=WxHxD" to specify the width, height, and optionally the color
5245 depth. E.g. "fred:geom=800x600" at the login: prompt. Also if the env.
5246 var X11VNC_CREATE_GEOM is set to the desired WxH or WxHxD that will be
5247 used by x11vnc.
5248
5249 You can set the env. var X11VNC_SKIP_DISPLAY to a comma separated list
5250 of displays to ignore in the FINDDISPLAY process (to force creation of
5251 new displays in some cases.) The user logging in via the vncviewer can
5252 also set this via username:nodisplay=...)
5253
5254 If you do not plan on using the Java Web browser applet you can remove
5255 the -http (and -prog) option since this will speed up logging-in by a
5256 few seconds (x11vnc will not have to wait to see if a connection is
5257 HTTPS or VNC.)
5258
5259 For reference, xinetd format in the file, say, /etc/xinetd.d/x11vnc:
5260 service x11vnc
5261 {
5262 type = UNLISTED
5263 port = 5900
5264 socket_type = stream
5265 protocol = tcp
5266 wait = no
5267 user = root
5268 server = /usr/local/bin/x11vnc
5269 server_args = -inetd -o /var/log/x11vnc.log -http -prog /usr/local/
5270 bin/x11vnc -svc
5271 disable = no
5272 }
5273
5274 To print out the script in this case use "-display
5275 WAIT:cmd=FINDCREATEDISPLAY-print". To change the preference of
5276 Xservers and which to try list them, e.g.: "-display
5277 WAIT:cmd=FINDCREATEDISPLAY-X,Xvfb,Xdummy" or use "-create_xsrv
5278 X,Xvfb,Xdummy". The "X" one means to try to start up a real, hardware
5279 X server, e.g. startx(1) (if there is already a real X server running
5280 this may only work on Linux and the chvt program may need to be run to
5281 switch to the correct Linux virtual terminal.) x11vnc will try to run
5282 chvt automatically if it can determine which VT should be switched to.
5283
5284 XDM/GDM/KDM Login Greeter Panel: If you want to present the user with
5285 a xdm/gdm/kdm display manager "greeter" login you can use Xvfb.xdmcp
5286 instead of Xvfb, etc in the above list. However, you need to configure
5287 xdm/gdm/kdm to accept localhost XDMCP messages, this can be done by
5288 (from -help output):
5289 If you want the FINDCREATEDISPLAY session to contact an XDMCP login
5290 manager (xdm/gdm/kdm) on the same machine, then use "Xvfb.xdmcp"
5291 instead of "Xvfb", etc. The user will have to supply his username
5292 and password one more time (but he gets to select his desktop
5293 type so that can be useful.) For this to work, you will need to
5294 enable localhost XDMCP (udp port 177) for the display manager.
5295 This seems to be:
5296
5297 for gdm in gdm.conf: Enable=true in section [xdmcp]
5298 for kdm in kdmrc: Enable=true in section [Xdmcp]
5299 for xdm in xdm-config: DisplayManager.requestPort: 177
5300
5301 Unless you are also providing XDMCP service to xterminals or other
5302 machines, make sure that the host access list only allows local
5303 connections (the name of this file is often Xaccess and it is usually
5304 setup by default to do just that.) Nowadays, host level firewalling
5305 will also typically block UDP (port 177 for XDMCP) by default
5306 effectively limiting the UDP connections to localhost.
5307
5308 Tip: Note that -xdmsvc is a short hand alias for the long "-ssl SAVE
5309 -unixpw -users unixpw= -display
5310 WAIT:cmd=FINDCREATEDISPLAY-Xvfb.xdmcp". So we simply use:
5311 service x11vnc
5312 {
5313 type = UNLISTED
5314 port = 5900
5315 socket_type = stream
5316 protocol = tcp
5317 wait = no
5318 user = root
5319 server = /usr/local/bin/x11vnc
5320 server_args = -inetd -o /var/log/x11vnc.log -xdmsvc
5321 disable = no
5322 }
5323
5324 (Note: use "-svc" instead of "-xdmsvc" for no XDMCP login greeter.)
5325
5326
5327 Local access (VNC Server and VNC Viewer on the same machine): To
5328 access your virtual X display session locally (i.e. while sitting at
5329 the same machine it is running on) one can perhaps have something like
5330 this in their $HOME/.xinitrc
5331 #!/bin/sh
5332 x11vnc -create -rfbport 5905 -env WAITBG=1
5333 vncviewer -geometry +0+0 -encodings raw -passwd $HOME/.vnc/passwd localhost:5
5334
5335 You may not need the -passwd. Recent RealVNC viewers might be this:
5336 #!/bin/sh
5337 x11vnc -create -rfbport 5905 -env WAITBG=1
5338 vncviewer -FullScreen -PreferredEncoding raw -passwd $HOME/.vnc/passwd localhos
5339 t:5
5340
5341 This way a bare X server is run with no window manager or desktop; it
5342 simply runs only the VNC Viewer on the real X server. The Viewer then
5343 draws the virtual X session on to the real one. On your system it
5344 might not be $HOME/.xinitrc, but rather .xsession, .Xclients, or
5345 something else. You will need to figure out what it is for your system
5346 and configuration.
5347
5348 There may be a problem if the resolution (WxH) of the virtual X
5349 display does not match that of the physical X display.
5350
5351 If you do not want to or cannot figure out the X startup script name
5352 (.xinitrc, etc) you could save the above commands to a shell script,
5353 say "vnclocal", and the log in via the normal KDM or GDM greeter
5354 program using the "Failsafe" option. Then in the lone xterm that comes
5355 up type "vnclocal" to connect to your virtual X display via x11vnc and
5356 vncviewer.
5357
5358 _________________________________________________________________
5359
5360 Summary: The "-display WAIT:cmd=FINDCREATEDISPLAY" scheme can be used
5361 to provide a "desktop service" (i.e. terminal service) on the server
5362 machine: you always get some desktop there, either a real hardware X
5363 server or a virtual one (depending on how you set things up.)
5364
5365 So it provides simple "terminal services" based on Unix username and
5366 password. The created X server sessions (virtual or real hardware)
5367 will remain running after you disconnect the VNC viewer and will be
5368 found again on reconnecting via VNC and logging in. To terminate them
5369 use the normal way to Exit/LogOut from inside your X session. The user
5370 does not have to memorize which VNC display number is his. They all go
5371 the same one (e.g. hostname:0) and it switches based on username.
5372
5373
5374 Q-63: Can I have x11vnc restart itself after it terminates?
5375
5376 One could do this in a shell script, but now there is an option -loop
5377 that makes it easier. Of course when x11vnc restarts it needs to have
5378 permissions to connect to the (potentially new) X display. This mode
5379 could be useful if the X server restarts often. Use e.g. "-loop5000"
5380 to sleep 5000 ms between restarts. Also "-loop2000,5" to sleep 2000 ms
5381 and only restart 5 times.
5382
5383 One can also use the -loopbg to emulate inetd(8) to some degree, where
5384 each connected process runs in the background. It could be combined,
5385 say, with the -svc option to provide simple terminal services without
5386 using inetd(8).
5387
5388
5389 Q-64: How do I make x11vnc work with the Java VNC viewer applet in a
5390 web browser?
5391
5392 To have x11vnc serve up a Java VNC viewer applet to any web browsers
5393 that connect to it, run x11vnc with this option:
5394 -httpdir /path/to/the/java/classes/dir
5395
5396 (this directory will contain the files index.vnc and, for example,
5397 VncViewer.jar) Note that libvncserver contains the TightVNC Java
5398 classes jar file for your convenience. (it is the file
5399 classes/VncViewer.jar in the source tree.)
5400
5401 You will see output something like this:
5402 14/05/2004 11:13:56 Autoprobing selected port 5900
5403 14/05/2004 11:13:56 Listening for HTTP connections on TCP port 5800
5404 14/05/2004 11:13:56 URL http://walnut:5800
5405 14/05/2004 11:13:56 screen setup finished.
5406 14/05/2004 11:13:56 The VNC desktop is walnut:0
5407 PORT=5900
5408
5409 then you can connect to that URL with any Java enabled browser. Feel
5410 free to customize the default index.vnc file in the classes directory.
5411
5412 As of May/2005 the -http option will try to guess where the Java
5413 classes jar file is by looking in expected locations and ones relative
5414 to the x11vnc binary.
5415
5416 Also note that if you wanted to, you could also start the Java viewer
5417 entirely from the viewer-side by having the jar file there and using
5418 either the java or appletviewer commands to run the program.
5419 java -cp ./VncViewer.jar VncViewer HOST far-away.east PORT 5900
5420
5421 Proxies: See the discussion here if the web browser must use a web
5422 proxy to connect to the internet. It is tricky to get Java applets to
5423 work in this case: a signed applet must be used so it can connect to
5424 the proxy and ask for the redirection to the VNC server. One way to do
5425 this is to use the signed SSL one referred to in classes/ssl/proxy.vnc
5426 and set disableSSL=yes (note that this has no encryption; please use
5427 SSL or SSH as discuss elsewhere on this page) in the URL or the file.
5428
5429
5430 Q-65: Are reverse connections (i.e. the VNC server connecting to the
5431 VNC viewer) using "vncviewer -listen" and vncconnect(1) supported?
5432
5433 As of Mar/2004 x11vnc supports reverse connections. On Unix one starts
5434 the VNC viewer in listen mode: "vncviewer -listen" (see your
5435 documentation for Windows, etc), and then starts up x11vnc with the
5436 -connect option. To connect immediately at x11vnc startup time use the
5437 "-connect host:port" option (use commas for a list of hosts to connect
5438 to.) The ":port" is optional (default is VNC listening port is 5500.)
5439
5440 If a file is specified instead: -connect /path/to/some/file then that
5441 file is checked periodically (about once a second) for new hosts to
5442 connect to.
5443
5444 The -remote control option (aka -R) can also be used to do this during
5445 an active x11vnc session, e.g.:
5446 x11vnc -display :0 -R connect:hostname.domain
5447
5448 Use the "-connect_or_exit" option to have x11vnc exit if the reverse
5449 connection fails. Also, note the "-rfbport 0" option disables TCP
5450 listening for connections (potentially useful for reverse connection
5451 mode, assuming you do not want any "forward" connections.)
5452
5453 Note that as of Mar/2006 x11vnc requires password authentication for
5454 reverse connections as well as for forward ones (assuming password
5455 auth has been enabled, e.g. via -rfbauth, -passwdfile, etc.) Many VNC
5456 servers do not require any password for reverse connections. To regain
5457 the old behavior supply this option "-env
5458 X11VNC_REVERSE_CONNECTION_NO_AUTH=1" to x11vnc.
5459
5460 Vncconnect command: To use the vncconnect(1) program (from the core
5461 VNC package at www.realvnc.com) specify the -vncconnect option to
5462 x11vnc (Note: as of Dec/2004 -vncconnect is now the default.)
5463 vncconnect(1) must be pointed to the same X11 DISPLAY as x11vnc (since
5464 it uses X properties to communicate with x11vnc.) If you do not have
5465 or do not want to get the vncconnect(1) program, the following script
5466 (named "Vncconnect") may work if your xprop(1) supports the -set
5467 option:
5468 #!/bin/sh
5469 # usage: Vncconnect <host>
5470 # Vncconnect <host:port>
5471 # note: not all xprop(1) support -set.
5472 #
5473 xprop -root -f VNC_CONNECT 8s -set VNC_CONNECT "$1"
5474
5475
5476 Q-66: Can reverse connections be made to go through a Web or SOCKS
5477 proxy or SSH?
5478
5479 Yes, as of Oct/2007 x11vnc supports reverse connections through
5480 proxies: use the "-proxy host:port" option. The default is to assume
5481 the proxy is a Web proxy. Note that most Web proxies only allow proxy
5482 destination connections to ports 443 (HTTPS) and 563 (SNEWS) and so
5483 this might not be too useful unless the proxy has been modified
5484 (AllowCONNECT apache setting) or the VNC viewer listens on one of
5485 those ports (or the router does a port redir.) A web proxy may also be
5486 specified via "-proxy http://host:port"
5487
5488 For SOCKS4 and SOCKS4a proxies use this format "-proxy
5489 socks://host:port". If the reverse connection hostname is a numerical
5490 IP or "localhost" then SOCKS4 (no host lookup) is used, otherwise
5491 SOCKS4a will be used. For SOCKS5 (proxy will do lookup and many other
5492 things) use "-proxy socks5://host:port". Note that the SSH builtin
5493 SOCKS proxy "ssh -D port" only does SOCKS4 or SOCKS5, so use socks5://
5494 for a ssh -D proxy.
5495
5496 The proxying works for both SSL encrypted and normal reverse
5497 connections.
5498
5499 An experimental mode is "-proxy http://host:port/..." where the URL
5500 (e.g. a CGI script) is retrieved via the GET method. See -proxy for
5501 more info.
5502
5503 Another experimental mode is "-proxy ssh://user@host" in which case a
5504 SSH tunnel is used for the proxying. See -proxy for more info.
5505
5506 Up to 3 proxies may be chained together by listing them by commas
5507 e.g.: "-proxy http://host1:port1,socks5://host2:port2" in case one
5508 needs to ricochet off of several machines to ultimately reach the
5509 listening viewer.
5510
5511
5512 Q-67: Can x11vnc provide a multi-user desktop web login service as an
5513 Apache CGI or PHP script?
5514 Yes. See the example script desktop.cgi for ideas. It is in the source
5515 tree in the directory x11vnc/misc. It serves x11vnc's SSL enabled Java
5516 Applet to the web browser with the correct connection information for
5517 the user's virtual desktop (an Xvfb session via -create; be sure to
5518 add the Xvfb package.) HTTPS/SSL enabled Apache should be used to
5519 serve the script to avoid unix and vnc passwords from being sent in
5520 cleartext and sniffed.
5521
5522 By default it uses a separate VNC port for each user desktop (either
5523 by autoprobing in a range of ports or using a port based on the userid
5524 number.) The web server's firewall must allow incoming connections to
5525 these ports.
5526
5527 It is somewhat difficult to do all of this with x11vnc listening on a
5528 single port, however there is also a 'fixed port' scheme described in
5529 the script based on -loopbg that works fairly well (but more
5530 experience is needed to see what problems contention for the same port
5531 causes; however at worst one user may need to re-login.)
5532
5533 There is also an optional 'port redirection' mode for desktop.cgi that
5534 allows redirection to other machines inside the firewall already
5535 running SSL enabled VNC servers. This provides much of the
5536 functionality as the SSL Portal and is easier to set up.
5537
5538
5539 Q-68: Can I use x11vnc as a replacement for Xvnc? (i.e. not for a real
5540 display, but for a virtual one I keep around.)
5541
5542 You can, but you would not be doing this for performance reasons (for
5543 virtual X sessions via VNC, Xvnc should give the fastest response.)
5544 You may want to do this because Xvnc is buggy and crashes, does not
5545 support an X server extension you desire, or you want to take
5546 advantage of one of x11vnc's unending number of options and features.
5547
5548 One way to achieve this is to have a Xvfb(1) virtual framebuffer X
5549 server running in the background and have x11vnc attached to it.
5550 Another method, faster and more accurate, is to use the "dummy" Device
5551 Driver in XFree86/Xorg (see below.)
5552
5553 For these virtual sessions you will need to install the Xvfb program
5554 (e.g. apt-get install xvfb) or our Xdummy program (see below.)
5555
5556 In either case, one can view this desktop both remotely and also
5557 locally using vncviewer. Make sure vncviewer's "-encodings raw" is in
5558 effect for local viewing (compression seems to slow things down
5559 locally.) For local viewing you set up a "bare" window manager that
5560 just starts up vncviewer and nothing else (See how below.)
5561
5562 Here is one way to start up Xvfb:
5563 xinit -- /usr/bin/Xvfb :1 -cc 4 -screen 0 1024x768x16
5564
5565 This starts up a 16bpp virtual display. To export it via VNC use
5566 x11vnc -display :1 ...
5567
5568 Then have the remote vncviewer attach to x11vnc's VNC display (e.g. :0
5569 which is port 5900.)
5570
5571 The "-cc 4" Xvfb option is to force it to use a TrueColor visual
5572 instead of DirectColor (this works around a recent bug in the Xorg
5573 Xvfb server.)
5574
5575 One good thing about Xvfb is that the virtual framebuffer exists in
5576 main memory (rather than in the video hardware), and so x11vnc can
5577 "screen scrape" it very efficiently (more than, say, 100X faster than
5578 normal video hardware.)
5579
5580 Update Nov/2006: See the FINDCREATEDISPLAY discussion of the "-display
5581 WAIT:cmd=FINDDISPLAY" option where virtual (Xvfb or Xdummy, or even
5582 real ones by changing an option) X servers are started automatically
5583 for new users connecting. This provides a "desktop service" for the
5584 machine. You either get your real X session or your virtual
5585 (Xvfb/Xdummy) one whenever you connect to the machine (inetd(8) is a
5586 nice way to provide this service.) The -find, -create, -svc, and
5587 -xdmsvc aliases can also come in handy here.
5588
5589 There are some annoyances WRT Xvfb however. The default keyboard
5590 mapping seems to be very poor. One should run x11vnc with -add_keysyms
5591 option to have keysyms added automatically. Also, to add the Shift_R
5592 and Control_R modifiers something like this is needed:
5593 #!/bin/sh
5594 xmodmap -e "keycode any = Shift_R"
5595 xmodmap -e "add Shift = Shift_L Shift_R"
5596 xmodmap -e "keycode any = Control_R"
5597 xmodmap -e "add Control = Control_L Control_R"
5598 xmodmap -e "keycode any = Alt_L"
5599 xmodmap -e "keycode any = Alt_R"
5600 xmodmap -e "keycode any = Meta_L"
5601 xmodmap -e "add Mod1 = Alt_L Alt_R Meta_L"
5602
5603 (note: these are applied automatically in the FINDCREATEDISPLAY mode
5604 of x11vnc.) Perhaps the Xvfb options -xkbdb or -xkbmap could be used
5605 to get a better default keyboard mapping...
5606
5607 Dummy Driver: A user points out a faster and more accurate method is
5608 to use the "dummy" Device Driver of XFree86/Xorg instead of Xvfb. He
5609 uses this to create a persistent and resizable desktop accessible from
5610 anywhere. In the Device Section of the config file set Driver "dummy".
5611 You may also need to set VideoRam NNN to be large enough to hold the
5612 framebuffer. The framebuffer is kept in main memory like Xvfb except
5613 that the server code is closely correlated with the real XFree86/Xorg
5614 Xserver unlike Xvfb.
5615
5616 The main drawback to this method (besides requiring extra
5617 configuration and possibly root permission) is that it also does the
5618 Linux Virtual Console/Terminal (VC/VT) switching even though it does
5619 not need to (since it doesn't use a real framebuffer.) There are some
5620 "dual headed" (actually multi-headed/multi-user) patches to the X
5621 server that turn off the VT usage in the X server. Update: As of
5622 Jul/2005 we have an LD_PRELOAD script Xdummy that allows you to use a
5623 stock (i.e. unpatched) Xorg or XFree86 server with the "dummy" driver
5624 and not have any VT switching problems! An advantage of Xdummy over
5625 Xvfb is that Xdummy supports RANDR dynamic screen resizing.
5626
5627 The standard way to start the "dummy" driver would be:
5628 startx -- :1 -config /etc/X11/xorg.conf.dummy
5629
5630 where the file /etc/X11/xorg.conf.dummy has its Device Section
5631 modified as described above. To use the LD_PRELOAD wrapper script:
5632 startx -- /path/to/Xdummy :1
5633
5634 An xdm(1) example is also provided.
5635
5636 In general, one can use these sorts of schemes to use x11vnc to export
5637 other virtual X sessions, say Xnest or even Xvnc itself (useful for
5638 testing x11vnc.)
5639
5640 Local access (VNC Server and VNC Viewer on the same machine): You use
5641 a VNC viewer to access the display remotely; to access your virtual X
5642 display locally (i.e. while sitting at the same machine it is running
5643 on) one can perhaps have something like this in their $HOME/.xinitrc
5644 #!/bin/sh
5645 x11vnc -display :5 -rfbport 5905 -bg
5646 vncviewer -geometry +0+0 -encodings raw -passwd $HOME/.vnc/passwd localhost:5
5647
5648 The display numbers (VNC and X) will likely be different (you could
5649 also try -find), and you may not need the -passwd. Recent RealVNC
5650 viewers might be this:
5651 #!/bin/sh
5652 x11vnc -display :5 -rfbport 5905 -bg
5653 vncviewer -FullScreen -PreferredEncoding raw -passwd $HOME/.vnc/passwd localhos
5654 t:5
5655
5656 This way a bare X server is run with no window manager or desktop; it
5657 simply runs only the VNC Viewer on the real X server. The Viewer then
5658 draws the virtual X session on to the real one. On your system it
5659 might not be $HOME/.xinitrc, but rather .xsession, .Xclients, or
5660 something else. You will need to figure out what it is for your system
5661 and configuration.
5662
5663
5664 XDM/GDM/KDM One-Shot X sessions: For the general replacement of Xvnc
5665 by Xvfb+x11vnc, one user describes a similar setup he created where
5666 the X sessions are one-shot's (destroyed after the vncviewer
5667 disconnects) and it uses the XDM/GDM/KDM login greeter here.
5668
5669
5670 Q-69: How can I use x11vnc on "headless" machines? Why might I want
5671 to?
5672
5673 An interesting application of x11vnc is to let it export displays of
5674 "headless" machines. For example, you may have some lab or server
5675 machines with no keyboard, mouse, or monitor, but each one still has a
5676 video card. One can use x11vnc to provide a simple "desktop service"
5677 from these server machines.
5678
5679 An X server can be started on the headless machine (sometimes this
5680 requires configuring the X server to not fail if it cannot detect a
5681 keyboard or mouse, see the next paragraph.) Then you can export that X
5682 display via x11vnc (e.g. see this FAQ) and access it from anywhere on
5683 the network via a VNC viewer.
5684
5685 Some tips on getting X servers to start on machines without keyboard
5686 or mouse: For XFree86/Xorg the Option "AllowMouseOpenFail" "true"
5687 "ServerFlags" config file option is useful. On Solaris Xsun the
5688 +nkeyboard and +nmouse options are useful (put them in the server
5689 command line args in /etc/dt/config/Xservers.) There are patches
5690 available for Xsun at lease back to Solaris 8 that support this. See
5691 Xserver(1) for more info.
5692
5693 Although this usage may sound strange it can be quite useful for a GUI
5694 (or other) testing or QA setups: the engineers do not need to walk to
5695 lab machines running different hardware, OS's, versions, etc (or have
5696 many different machines in their office.) They just connect to the
5697 various test machines over the network via VNC. The advantage to
5698 testing this way instead of using Xvnc or even Xvfb is that the test
5699 is done using the real X server, fonts, video hardware, etc. that will
5700 be used in the field.
5701
5702 One can imagine a single server machine crammed with as many video
5703 cards as it can hold to provide multiple simultaneous access or
5704 testing on different kinds of video hardware.
5705
5706 See also the FINDCREATEDISPLAY discussion of the "-display
5707 WAIT:cmd=FINDDISPLAY" option where virtual Xvfb or Xdummy, or real X
5708 servers are started automatically for new users connecting. The -find,
5709 -create, -svc, and -xdmsvc aliases can also come in handy here.
5710
5711 [Resource Usage and Performance]
5712
5713 Q-70: I have lots of memory, but why does x11vnc fail with shmget:
5714 No space left on device or Minor opcode of failed request: 1
5715 (X_ShmAttach)?
5716
5717 It is not a matter of free memory, but rather free shared memory (shm)
5718 slots, also known as shm segments. This often occurs on a public
5719 Solaris machine using the default of only 100 slots. You (or the owner
5720 or root) can clean them out with ipcrm(1). x11vnc tries hard to
5721 release its slots, but it, and other programs, are not always able to
5722 (e.g. if kill -9'd.)
5723
5724 Sometimes x11vnc will notice the problem with shm segments and tries
5725 to get by with fewer, only giving a warning like this:
5726 19/03/2004 10:10:58 shmat(tile_row) failed.
5727 shmat: Too many open files
5728 19/03/2004 10:10:58 error creating tile-row shm for len=4
5729 19/03/2004 10:10:58 reverting to single_copytile mode
5730
5731 Here is a shell script shm_clear to list and prompt for removal of
5732 your unattached shm segments (attached ones are skipped.) I use it
5733 while debugging x11vnc (I use "shm_clear -y" to assume "yes" for each
5734 prompt.) If x11vnc is regularly not cleaning up its shm segments,
5735 please contact me so we can work to improve the situation.
5736
5737 Longer term, on Solaris you can put something like this in
5738 /etc/system:
5739 set shmsys:shminfo_shmmax = 0x2000000
5740 set shmsys:shminfo_shmmni = 0x1000
5741
5742 to sweep the problem under the rug (4096 slots.) On Linux, examine
5743 /proc/sys/kernel/shmmni; you can modify the value by writing to that
5744 file.
5745
5746 Things are even more tight on Solaris 8 and earlier, there is a
5747 default maximum number of shm segments per process of 6. The error is
5748 the X server (not x11vnc) being unable to attach to the segments, and
5749 looks something like this:
5750 30/04/2004 14:04:26 Got connection from client 192.168.1.23
5751 30/04/2004 14:04:26 other clients:
5752 X Error of failed request: BadAccess (attempt to access private resource den
5753 ied)
5754 Major opcode of failed request: 131 (MIT-SHM)
5755 Minor opcode of failed request: 1 (X_ShmAttach)
5756 Serial number of failed request: 14
5757 Current serial number in output stream: 17
5758
5759 This tight limit on Solaris 8 can be increased via:
5760 set shmsys:shminfo_shmseg = 100
5761
5762 in /etc/system. See the next paragraph for more workarounds.
5763
5764 To minimize the number of shm segments used by x11vnc try using the
5765 -onetile option (corresponds to only 3 shm segments used, and adding
5766 -fs 1.0 knocks it down to 2.) If you are having much trouble with shm
5767 segments, consider disabling shm completely via the -noshm option.
5768 Performance will be somewhat degraded but when done over local machine
5769 sockets it should be acceptable (see an earlier question discussing
5770 -noshm.)
5771
5772
5773 Q-71: How can I make x11vnc use less system resources?
5774
5775 The -nap (now on by default; use -nonap to disable) and "-wait n"
5776 (where n is the sleep between polls in milliseconds, the default is 30
5777 or so) option are good places to start. In addition, something like
5778 "-sb 15" will cause x11vnc to go into a deep-sleep mode after 15
5779 seconds of no activity (instead of the default 60.)
5780
5781 Reducing the X server bits per pixel depth (e.g. to 16bpp or even
5782 8bpp) will further decrease memory I/O and network I/O. The ShadowFB X
5783 server setting will make x11vnc's screen polling less severe. Using
5784 the -onetile option will use less memory and use fewer shared memory
5785 slots (add -fs 1.0 for one less slot.)
5786
5787
5788 Q-72: How can I make x11vnc use MORE system resources?
5789
5790 You can try -threads (note this mode can be unstable and/or crash; and
5791 as of May/2008 is strongly discouraged, see the option description) or
5792 dial down the wait time (e.g. -wait 1) and possibly dial down -defer
5793 as well. Note that if you try to increase the "frame rate" too much
5794 you can bog down the server end with the extra work it needs to do
5795 compressing the framebuffer data, etc.
5796
5797 That said, it is possible to "stream" video via x11vnc if the video
5798 window is small enough. E.g. a 256x192 xawtv TV capture window (using
5799 the x11vnc -id option) can be streamed over a LAN or wireless at a
5800 reasonable frame rate. If the graphics card's framebuffer read rate is
5801 faster than normal then the video window size and frame rate can be
5802 much higher. The use of TurboVNC and/or TurboJPEG can make the frame
5803 rate somewhat higher still (but most of this hinges on the graphics
5804 card's read rate.)
5805
5806
5807 Q-73: I use x11vnc over a slow link with high latency (e.g. dialup
5808 modem or broadband), is there anything I can do to speed things up?
5809
5810 Some things you might want to experiment with (many of which will help
5811 performance on faster links as well):
5812
5813 X server/session parameters:
5814 * Configure the X server bits per pixel to be 16bpp or even 8bpp.
5815 (reduces amount of data needed to be polled, compressed, and sent)
5816 * Use a smaller desktop size (e.g. 1024x768 instead of 1280x1024)
5817 * Make sure the desktop background is a solid color (the background
5818 is resent every time it is re-exposed.) Consider using the -solid
5819 [color] option to try to do this automatically.
5820 * Configure your window manager or desktop "theme" to not use fancy
5821 images, shading, and gradients for the window decorations, etc.
5822 Disable window animations, etc. Maybe your desktop has a "low
5823 bandwidth" theme you can easily switch into and out of. Also in
5824 Firefox disable eye-candy, e.g.: Edit -> Preferences -> Advanced
5825 -> Use Smooth Scrolling (deselect it.)
5826 * Avoid small scrolls of large windows using the Arrow keys or
5827 scrollbar. Try to use PageUp/PageDown instead. (not so much of a
5828 problem in x11vnc 0.7.2 if -scrollcopyrect is active and detecting
5829 scrolls for the application.)
5830 * If the -wireframe option is not available (earlier than x11vnc
5831 0.7.2 or you have disabled it via -nowireframe) then Disable
5832 Opaque Moves and Resizes in the window manager/desktop.
5833 * However if -wireframe is active (on by default in x11vnc 0.7.2)
5834 then you should Enable Opaque Moves and Resizes in the window
5835 manager! This seems counter-intuitive, but because x11vnc detects
5836 the move/resize events early there is a huge speedup over a slow
5837 link when Opaque Moves and Resizes are enabled. (e.g. CopyRect
5838 encoding will be used.)
5839 * Turn off Anti-aliased fonts on your system, web browser, terminal
5840 windows, etc. AA fonts do not compress as well as traditional
5841 fonts (sometimes 10X less.)
5842 * On Firefox/Mozilla (and anything else) turn off "Smooth Scroll"
5843 animations. In Firefox put in the URL "about:config" and set
5844 general.smoothScroll to false.
5845 * On Xorg/XFree86 turn on the Shadow Framebuffer to speed up
5846 reading. (Option "ShadowFB" "true" in the Device section of
5847 /etc/X11/XF86Config) This disables 2D acceleration on the physical
5848 display and so may not be worth it (if you play games, etc), but
5849 could be of use in some situations. Note: If the network link is
5850 very slow, this speedup may not be noticed.
5851
5852 VNC viewer parameters:
5853 * Use a TightVNC enabled viewer! (Actually, RealVNC 4.x viewer with
5854 ZRLE encoding is not too bad either; some claim it is faster.)
5855 * Make sure the tight (or zrle) encoding is being used (look at
5856 vncviewer and x11vnc outputs)
5857 * Request 8 bits per pixel using -bgr233 (up to 4X speedup over
5858 depth 24 TrueColor (32bpp), but colors will be off)
5859 * RealVNC 4.x viewer has some extremely low color modes (only 64 and
5860 even 8 colors.) SSVNC does too. The colors are poor, but it is
5861 usually noticeably faster than bgr233 (256 colors.)
5862 * Try increasing the TightVNC -compresslevel (compresses more on
5863 server side before sending, but uses more CPU)
5864 * Try reducing the TightVNC -quality (increases JPEG compression,
5865 but is lossy with painting artifacts)
5866 * Try other VNC encodings via -encodings (tight may be the fastest,
5867 but you should compare it to zrle and maybe some of the others)
5868 * On the machine where vncviewer is run, make sure Backing Store is
5869 enabled (Xorg/XFree86 disables it by default causing re-exposures
5870 of vncviewer to be very slow) Option "backingstore" in config
5871 file.
5872
5873 x11vnc parameters:
5874 * Make sure the -wireframe option is active (it should be on by
5875 default) and you have Opaque Moves/Resizes Enabled in the window
5876 manager.
5877 * Make sure the -scrollcopyrect option is active (it should be on by
5878 default.) This detects scrolls in many (but not all) applications
5879 an applies the CopyRect encoding for a big speedup.
5880 * Enforce a solid background when VNC viewers are connected via
5881 -solid
5882 * Try x11vnc's client-side caching client-side caching scheme:
5883 -ncache
5884 * Specify -speeds modem to force the wireframe and scrollcopyrect
5885 heuristic parameters (and any future ones) to those of a dialup
5886 modem connection (or supply the rd,bw,lat numerical values that
5887 characterize your link.)
5888 * If wireframe and scrollcopyrect aren't working, try using the more
5889 drastic -nodragging (no screen updates when dragging mouse, but
5890 sometimes you miss visual feedback)
5891 * Set -fs 1.0 (disables fullscreen updates)
5892 * Try increasing -wait or -defer (reduces the maximum "frame rate",
5893 but won't help much for large screen changes)
5894 * Try the -progressive pixelheight mode with the block pixelheight
5895 100 or so (delays sending vertical blocks since they may change
5896 while viewer is receiving earlier ones)
5897 * If you just want to watch one (simple) window use -id or -appshare
5898 (cuts down extraneous polling and updates, but can be buggy or
5899 insufficient)
5900 * Set -nosel (disables all clipboard selection exchange)
5901 * Use -nocursor and -nocursorpos (repainting the remote cursor
5902 position and shape takes resources and round trips)
5903 * On very slow links (e.g. <= 28.8) you may need to increase the
5904 -readtimeout n setting if it sometimes takes more than 20sec to
5905 paint the full screen, etc.
5906 * Do not use -fixscreen to automatically refresh the whole screen,
5907 tap three Alt_L's then the screen has painting errors (rare
5908 problem.)
5909
5910
5911 Example for the KDE desktop:
5912
5913 Launch the "KDE Control Center" utility. Sometimes this is called
5914 "Personal Settings".
5915
5916 Select "Desktop".
5917
5918 Then Select "Window Behavior". In the "Moving" Tab set these:
5919 * YES - Display content in moving windows
5920 * YES - Display content in resizing windows
5921 * NO - Display window geometry when moving or resizing
5922 * NO - Animate minimize and restore
5923
5924 In the "Translucency" Tab set:
5925 * NO - Use translucency/shadows
5926
5927 Next hit "Back" and then select "Panels".
5928
5929 In the "Appearance" Tab set:
5930 * NO - Enable icon mouseover effects
5931 * NO - Enable transparency
5932
5933 Now go all the way back up to the top and Select "Appearance &
5934 Themes".
5935
5936 Select "Background" and set:
5937 * YES - No picture
5938 * Colors: Single Color
5939
5940 Select "Fonts" and disable anti-aliased fonts if you are bold enough.
5941
5942 Select "Launch Feedback" and set:
5943 * Busy Cursor: No Busy Cursor
5944 * NO - Enable taskbar notification
5945
5946 Select "Screen Saver" and set:
5947 * Screen Saver: Blank Screen
5948
5949 Select "Style" and in the "Effects" Tab set:
5950 * NO - Enable GUI effects
5951
5952
5953 Example for the GNOME desktop:
5954 * TBD.
5955
5956
5957 Q-74: Does x11vnc support the X DAMAGE Xserver extension to find
5958 modified regions of the screen quickly and efficiently?
5959
5960 Yes, as of Mar/2005 x11vnc will use the X DAMAGE extension by default
5961 if it is available on the display. This requires libXdamage to be
5962 available in the build environment as well (recent Linux distros and
5963 Solaris 10 have it.)
5964
5965 The DAMAGE extension enables the X server to report changed regions of
5966 the screen back to x11vnc. So x11vnc doesn't have to guess where the
5967 changes are (by polling every pixel of the entire screen every 2-4
5968 seconds.) The use of X DAMAGE dramatically reduces the load when the
5969 screen is not changing very much (i.e. most of the time.) It also
5970 noticeably improves updates, especially for very small changed areas
5971 (e.g. clock ticking, cursor flashing, typing, etc.)
5972
5973 Note that the DAMAGE extension does not speed up the actual reading of
5974 pixels from the video card framebuffer memory, by, say, mirroring them
5975 in main memory. So reading the fb is still painfully slow (e.g.
5976 5MB/sec), and so even using X DAMAGE when large changes occur on the
5977 screen the bulk of the time is still spent retrieving them. Not ideal,
5978 but use of the ShadowFB XFree86/Xorg option speeds up the reading
5979 considerably (at the cost of h/w acceleration.)
5980
5981 Unfortunately the current Xorg DAMAGE extension implementation can at
5982 times be overly conservative and report very large rectangles as
5983 "damaged" even though only a small portion of the pixels have actually
5984 been modified. This behavior is often the fault of the window manager
5985 (e.g. it redraws the entire, unseen, frame window underneath the
5986 application window when it gains focus), or the application itself
5987 (e.g. does large, unnecessary repaints.)
5988
5989 To work around this deficiency, x11vnc currently only trusts small
5990 DAMAGE rectangles to contain real damage. The larger rectangles are
5991 only used as hints to focus the traditional scanline polling (i.e. if
5992 a scanline doesn't intersect a recent DAMAGE rectangle, the scan is
5993 skipped.) You can use the "-xd_area A" option to adjust the size of
5994 the trusted DAMAGE rectangles. The default is 20000 pixels (e.g. a
5995 140x140 square, etc.) Use "-xd_area 0" to disable the cutoff and trust
5996 all DAMAGE rectangles.
5997
5998 The option "-xd_mem f" may also be of use in tuning the algorithm. To
5999 disable using DAMAGE entirely use "-noxdamage".
6000
6001
6002 Q-75: My OpenGL application shows no screen updates unless I supply
6003 the -noxdamage option to x11vnc.
6004 One user reports in his environment (MythTV using the NVIDIA OpenGL
6005 drivers) he gets no updates after the initial screen is drawn unless
6006 he uses the "-noxdamage" option.
6007
6008 This seems to be a bug in the X DAMAGE implementation of that driver.
6009 You may have to use -noxdamage as well. A way to autodetect this will
6010 be tried, probably the best it will do is automatically stop using X
6011 DAMAGE.
6012
6013 A developer for MiniMyth reports that the 'alphapulse' tag of the
6014 theme G.A.N.T. can also cause problems, and should be avoided when
6015 using VNC.
6016
6017 Update: see this FAQ too.
6018
6019
6020 Q-76: When I drag windows around with the mouse or scroll up and down
6021 things really bog down (unless I do the drag in a single, quick
6022 motion.) Is there anything to do to improve things?
6023
6024 This problem is primarily due to slow hardware read rates from video
6025 cards: as you scroll or move a large window around the screen changes
6026 are much too rapid for x11vnc to keep up them (it can usually only
6027 read the video card at about 5-10 MB/sec, so it can take a good
6028 fraction of a second to read the changes induce from moving a large
6029 window, if this to be done a number of times in succession the window
6030 or scroll appears to "lurch" forward.) See the description in the
6031 -pointer_mode option for more info. The next bottleneck is compressing
6032 all of these changes and sending them out to connected viewers,
6033 however the VNC protocol is pretty much self-adapting with respect to
6034 that (updates are only packaged and sent when viewers ask for them.)
6035
6036 As of Jan/2004 there are some improvements to libvncserver. The
6037 default should now be much better than before and dragging small
6038 windows around should no longer be a huge pain. If for some reason
6039 these changes make matters worse, you can go back to the old way via
6040 the "-pointer_mode 1" option.
6041
6042 Also added was the -nodragging option that disables all screen updates
6043 while dragging with the mouse (i.e. mouse motion with a button held
6044 down.) This gives the snappiest response, but might be undesired in
6045 some circumstances when you want to see the visual feedback while
6046 dragging (e.g. menu traversal or text selection.)
6047
6048 As of Dec/2004 the -pointer_mode n option was introduced. n=1 is the
6049 original mode, n=2 an improvement, etc.. See the -pointer_mode n help
6050 for more info.
6051
6052 Also, in some circumstances the -threads option can improve response
6053 considerably. Be forewarned that if more than one vncviewer is
6054 connected at the same time then libvncserver may not be thread safe
6055 (try to get the viewers to use different VNC encodings, e.g. tight and
6056 ZRLE.) This option can be unstable and so as of Feb/2008 it is
6057 disabled by default. Set env. X11VNC_THREADED=1 to re-enable.
6058
6059 As of Apr/2005 two new options (see the wireframe FAQ and
6060 scrollcopyrect FAQ below) provide schemes to sweep this problem under
6061 the rug for window moves or resizes and for some (but not all) window
6062 scrolls. These are the preferred way of avoiding the "lurching"
6063 problem, contact me if they are not working. Note on SuSE and some
6064 other distros the RECORD X extension used by scrollcopyrect is not
6065 enabled by default, turn it on in xorg.conf:
6066 Section "Module"
6067 ...
6068 Load "record"
6069 ...
6070 EndSection
6071
6072
6073 Q-77: Why not do something like wireframe animations to avoid the
6074 windows "lurching" when being moved or resized?
6075
6076 Nice idea for a hack! As of Apr/2005 x11vnc by default will apply
6077 heuristics to try to guess if a window is being (opaquely) moved or
6078 resized. If such a change is detected framebuffer polling and updates
6079 will be suspended and only an animated "wireframe" (a rectangle
6080 outline drawn where the moved/resized window would be) is shown. When
6081 the window move/resize stops, it returns to normal processing: you
6082 should only see the window appear in the new position. This spares you
6083 from interacting with a "lurching" window between all of the
6084 intermediate steps. BTW the lurching is due to slow video card read
6085 rates (see here too.) A displacement, even a small one, of a large
6086 window requires a non-negligible amount of time, a good fraction of a
6087 second, to read in from the hardware framebuffer.
6088
6089 Note that Opaque Moves/Resizes must be Enabled by your window manager
6090 for -wireframe to do any good.
6091
6092 The mode is currently on by default because most people are afflicted
6093 with the problem. It can be disabled with the -nowireframe option (aka
6094 -nowf.) Why might one want to turn off the wireframing? Since x11vnc
6095 is merely guessing when windows are being moved/resized, it may guess
6096 poorly for your window-manager or desktop, or even for the way you
6097 move the pointer. If your window-manager or desktop already does its
6098 own wireframing then this mode is a waste of time and could do the
6099 wrong thing occasionally. There may be other reasons the new mode
6100 feels unnatural. If you have very expensive video hardware (SGI, well
6101 now even proprietary Xorg drivers are fast at reading) or are using an
6102 in-RAM video framebuffer (SunRay, ShadowFB, Xvfb), the read rate from
6103 that framebuffer may be very fast (100's of MB/sec) and so you don't
6104 really see much lurching (at least over a fast LAN): opaque moves look
6105 smooth in x11vnc. Note: ShadowFB is often turned on when you are using
6106 the vesafb or fbdev XFree86 video driver instead of a native one so
6107 you might be using it already and not know.
6108
6109 The heuristics used to guess window motion or resizing are simple, but
6110 are not fool proof: x11vnc is sometimes tricked and so you'll
6111 occasionally see the lurching opaque move and rarely something even
6112 worse.
6113
6114 First it assumes that the move/resize will occur with a mouse button
6115 pressed, held down and dragged (of course this is only mostly true.)
6116 Next it will only consider a window for wireframing if the mouse
6117 pointer is initially "close enough" to the edges of the window frame,
6118 e.g. you have grabbed the title bar or a resizer edge (this
6119 requirement can be disabled and it also not applied if a modifier key,
6120 e.g. Alt, is pressed.) If these are true, it will wait an amount of
6121 time to see if the window starts moving or resizing. If it does, it
6122 starts drawing the wireframe "outline" of where the window would be.
6123 When the mouse button is released, or a timeout occurs, it goes back
6124 to the standard mode to allow the actual framebuffer changes to
6125 propagate to the viewers.
6126
6127 These parameters can be tweaked:
6128 * Color/Shade of the wireframe.
6129 * Linewidth of the outline frame.
6130 * Cutoff size of windows to not apply wireframing to.
6131 * Cutoffs for closeness to Top, Bottom, Left, and Right edges of
6132 window.
6133 * Modifier keys to enable interior window grabbing.
6134 * Maximum time to wait for dragging pointer events.
6135 * Maximum time to wait for the window to start moving/resizing.
6136 * Maximum time to show a wireframe animation.
6137 * Minimum time between sending wireframe outlines.
6138
6139 See the "-wireframe tweaks" option for more details. On a slow link,
6140 e.g. dialup modem, the parameters may be automatically adjusted for
6141 better response.
6142
6143
6144 CopyRect encoding: In addition to the above there is the
6145 "-wirecopyrect mode" option. It is also on by default. This instructs
6146 x11vnc to not only show the wireframe animation, but to also instruct
6147 all connected VNC viewers to locally translate the window image data
6148 from the original position to the new position on the screen when the
6149 animation is done. This speedup is the VNC CopyRect encoding: the
6150 framebuffer update doesn't need to send the actual new image data.
6151 This is nice in general, and very convenient over a slow link, but
6152 since it is based on heuristics you may need to disable it with the
6153 -nowirecopyrect option (aka -nowcr) if it works incorrectly or
6154 unnaturally for you.
6155
6156 The -wirecopyrect modes are: "never" (same as -nowirecopyrect); "top",
6157 only apply the CopyRect if the window is appears to be on the top of
6158 the window stack and is not obstructed by other windows; and "always"
6159 to always try to apply the CopyRect (obstructed regions are usually
6160 clipped off and not translated.)
6161
6162 Note that some desktops (KDE and xfce) appear to mess with the window
6163 stacking in ways that are not yet clear. In these cases x11vnc works
6164 around the problem by applying the CopyRect even if obscuring windows'
6165 data is translated! Use -nowirecopyrect if this yields undesirable
6166 effects for your desktop.
6167
6168 Also, the CopyRect encoding may give incorrect results under -scale
6169 (depending on the scale factor the CopyRect operation is often only
6170 approximate: the correctly scaled framebuffer will be slightly
6171 different from the translated one.) x11vnc will try to push a
6172 "cleanup" update after the CopyRect if -scale is in effect. Use
6173 -nowirecopyrect if this or other painting errors are unacceptable.
6174
6175
6176 Q-78: Can x11vnc try to apply heuristics to detect when a window is
6177 scrolling its contents and use the CopyRect encoding for a speedup?
6178
6179 Another nice idea for a hack! As of May/2005 x11vnc will by default
6180 apply heuristics to try to detect if the window that has the input
6181 focus is scrolling its contents (but only when x11vnc is feeding user
6182 input, keystroke or pointer, to the X server.) So, when detected,
6183 scrolls induced by dragging on a scrollbar or by typing (e.g. Up or
6184 Down arrows, hitting Return in a terminal window, etc), will show up
6185 much more quickly than via the standard x11vnc screen polling update
6186 mechanism.
6187
6188 There will be a speedup for both slow and fast links to viewers. For
6189 slow links the speedup is mostly due to the CopyRect encoding not
6190 requiring the image data to be transmitted over the network. For fast
6191 links the speedup is primarily due to x11vnc not having to read the
6192 scrolled framebuffer data from the X server (recall that reading from
6193 the hardware framebuffer is slow.)
6194
6195 To do this x11vnc uses the RECORD X extension to snoop the X11
6196 protocol between the X client with the focus window and the X server.
6197 This extension is usually present on most X servers (but SuSE disables
6198 it for some reason.) On XFree86/Xorg it can be enabled via Load
6199 "record" in the Module section of the config file if it isn't already:
6200 Section "Module"
6201 ...
6202 Load "record"
6203 ...
6204 EndSection
6205
6206 Currently the RECORD extension is used as little as possible so as to
6207 not slow down regular use. Only simple heuristics are applied to
6208 detect XCopyArea and XConfigureWindow calls from the application.
6209 These catch a lot of scrolls, e.g. in mozilla/firefox and in terminal
6210 windows like gnome-terminal and xterm. Unfortunately the toolkits KDE
6211 applications use make scroll detection less effective (only rarely are
6212 they detected: i.e. Konqueror and Konsole don't work.) An interesting
6213 project, that may be the direction x11vnc takes, is to record all of
6214 the X11 protocol from all clients and try to "tee" the stream into a
6215 modified Xvfb watching for CopyRect and other VNC speedups. A
6216 potential issue is the RECORD stream is delayed from actual view on
6217 the X server display: if one falls too far behind it could become a
6218 mess...
6219
6220 The initial implementation of -scrollcopyrect option is useful in that
6221 it detects many scrolls and thus gives a much nicer working
6222 environment (especially when combined with the -wireframe
6223 -wirecopyrect options, which are also on by default; and if you are
6224 willing to enable the ShadowFB things are very fast.) The fact that
6225 there aren't long delays or lurches during scrolling is the primary
6226 improvement.
6227
6228 But there are some drawbacks:
6229 * Not all scrolls are detected. Some apps scroll windows in ways
6230 that cannot currently be detected, and other times x11vnc "misses"
6231 the scroll due to timeouts, etc. Sometimes it is more distracting
6232 that a speedup occasionally doesn't work as opposed to being
6233 consistently slow!
6234 * For rapid scrolling (i.e. sequence of many scrolls over a short
6235 period) there can be painting errors (tearing, bunching up, etc.)
6236 during the scroll. These will repair themselves after the scroll
6237 is over, but when they are severe it can be distracting. Try to
6238 think of the approximate window contents as a quicker and more
6239 useful "animation" compared to the slower polling scheme...
6240 * Scrolling inside shells in terminal windows (gnome-terminal,
6241 xterm), can lead to odd painting errors. This is because x11vnc
6242 did not have time to detect a screen change just before the scroll
6243 (most common is the terminal undraws the block cursor before
6244 scrolling the text up: in the viewer you temporarily see multiple
6245 block cursors.) Another issue is with things like more(1): scroll
6246 detection for 5-6 lines happens nicely, but then it can't keep up
6247 and so there is a long pause for the standard polling method to
6248 deliver the remaining updates.
6249 * More rarely sometimes painting errors are not repaired after the
6250 scroll is over. This may be a bug in x11vnc or libvncserver, or it
6251 may be an inescapable fact of the CopyRect encoding and the delay
6252 between RECORD callbacks and what is actually on the X display.
6253 One can tap the Alt_L key (Left "Alt" key) 3 times in a row to
6254 signal x11vnc to refresh the screen to all viewers. Your
6255 VNC-viewer may have its own screen refresh hot-key or button. See
6256 also: -fixscreen
6257 * Some applications, notably OpenOffice, do XCopyArea scrolls in
6258 weird ways that assume ancestor window clipping is taking place.
6259 See the -scr_skip option for ways to tweak this on a
6260 per-application basis.
6261 * Selecting text while dragging the mouse may be slower, especially
6262 if the Button-down event happens near the window's edge. This is
6263 because the scrollcopyrect scheme is watching for scrolls via
6264 RECORD and has to wait for a timeout to occur before it does the
6265 update.
6266 * For reasons not yet understood the RECORD extension can stop
6267 responding (and hence scrolls are missed.) As a workaround x11vnc
6268 attempts to reset the RECORD connection every 60 seconds or so.
6269 Another workaround is to type 4 Super_L (Left Super/Windows-Flag
6270 key) in a row to reset RECORD. Work is in progress to try to fix
6271 this bug.
6272 * Sometimes you need to "retrain" x11vnc for a certain window
6273 because it fails to detect scrolls in it. Sometimes clicking
6274 inside the application window or selecting some text in it to
6275 force the focus helps.
6276 * When using the -scale option there will be a quick CopyRect
6277 scroll, but it needs to be followed by a slower "cleanup" update.
6278 This is because for a fixed finite screen resolution (e.g. 75 dpi)
6279 scaling and copyrect-ing are not exactly independent. Scaling
6280 involves a blending of nearby pixels and if you translate a pixel
6281 the neighbor pixel weighting may be different. So you have to wait
6282 a bit for the cleanup update to finish. On slow links x11vnc may
6283 automatically decide to not detect scrolls when -scale is in
6284 effect. In general it will also try to defer the cleanup update if
6285 possible.
6286
6287 If you find the -scrollcopyrect behavior too approximate or
6288 distracting you can go back to the standard polling-only update method
6289 with the -noscrollcopyrect (or -noscr for short.) If you find some
6290 extremely bad and repeatable behavior for -scrollcopyrect please
6291 report a bug.
6292
6293 Alternatively, as with -wireframe, there are many tuning parameters to
6294 try to improve the situation. You can also access these parameters
6295 inside the gui under "Tuning". These parameters can be tweaked:
6296 * The minimum pixel area of a rectangle to be watched for scrolls.
6297 * A list if application names to skip scroll detection.
6298 * Which keystrokes should trigger scroll detection.
6299 * Which applications should have a "terminal" tweak applied to them.
6300 * When repeating keys (e.g. Up arrow) should be discarded to
6301 preserve a scroll.
6302 * Cutoffs for closeness to Top, Bottom, Left, and Right edges of
6303 window for mouse induced scrolls.
6304 * Set timeout parameters for keystroke induced scrolls.
6305 * Set timeout parameters for mouse pointer induced scrolls.
6306 * Have the full screen be periodically refreshed to fix painting
6307 errors.
6308
6309
6310 Q-79: Can x11vnc do client-side caching of pixel data? I.e. so when
6311 that pixel data is needed again it does not have to be retransmitted
6312 over the network.
6313
6314 As of Dec/2006 in the 0.9 development tarball there is an experimental
6315 client-side caching implementation enabled by the "-ncache n" option.
6316 In fact, during the test period it was on by default with n set to 10.
6317 To disable it use "-noncache".
6318
6319 It is a simple scheme where a (very large) lower portion of the
6320 framebuffer (i.e. starting just below the user's actual desktop
6321 display) is used for storing pixel data. CopyRect; a fast, essentially
6322 local viewer-side VNC encoding; is used to swap the pixel data in and
6323 out of the actual display area. It gives an excellent speedup for
6324 iconifying/deiconifying and moving windows and re-posting of menus
6325 (often it doesn't feel like VNC at all: there is no delay waiting for
6326 the pixel data to fill in.)
6327
6328 This scheme is nice because it does all of this within the existing
6329 VNC protocol, and so it works with all VNC viewers.
6330
6331 A challenge to doing more sophisticated (e.g. compressed and/or
6332 shared) client-side caching is that one needs to extend the VNC
6333 protocol, modify a viewer and then also convince users to adopt your
6334 modified VNC Viewer (or get the new features to be folded into the
6335 main VNC viewers, patches accepted, etc... likely takes many years
6336 before they might be deployed in the field.) So it is convenient that
6337 the "-ncache n" works with any unaltered VNC viewer.
6338
6339 A drawback of the "-ncache n" method is that in the VNC Viewer you can
6340 scroll down and actually see the cached pixel data. So it looks like
6341 there is a bug: you can scroll down in your viewer and see a strange
6342 "history" of windows on your desktop. This is working as intended. One
6343 will need to try to adjust the size of his VNC Viewer window so the
6344 cache area cannot be seen. SSVNC (see below) can do this
6345 automatically.
6346
6347 At some point LibVNCServer may implement a "rfbFBCrop" pseudoencoding
6348 that viewers can use to learn which portion of the framebuffer to
6349 actually show to the users (with the hidden part used for caching, or
6350 perhaps something else, maybe double buffering or other offscreen
6351 rendering...)
6352
6353 The Enhanced TightVNC Viewer (SSVNC) Unix viewer has a nice -ycrop
6354 option to help hide the pixel cache area from view. It will turn on
6355 automatically if the framebuffer appears to be very tall (height more
6356 than twice the width), or you can supply the actual value for the
6357 height. If the screen is resized by scaling, etc, the ycrop value is
6358 scaled as well. In fullscreen mode you cannot scroll past the end of
6359 the actual screen, and in non-fullscreen mode the window manager frame
6360 is adjusted to fit the actual display (so you don't see the pixel
6361 cache region) and the scrollbars are very thin to avoid distraction
6362 and trouble fitting inside your display. Use the "-sbwidth n" viewer
6363 option to make the scrollbars thicker if you like.
6364
6365 Another drawback of the scheme is that it is VERY memory intensive,
6366 the n in "-ncache n" is the factor of increase over the base
6367 framebuffer size to use for caching. It is an even integer and should
6368 be fairly large, 6-12, to achieve good response. This usually requires
6369 about 50-100MB of additional RAM on both the client and server sides.
6370 For example with n=6 a 1280x1024 display will use a framebuffer that
6371 is 1280x7168: everything below row 1024 is the pixel buffer cache. If
6372 you are running on low memory machines or memory is tight because of
6373 other running applications you should not use -ncache.
6374
6375 The reason for so much memory is because the pixel data is not
6376 compressed and so the whole window to be saved must be stored
6377 "offscreen". E.g. for a large web browser window this can be nearly 1
6378 million pixels, and that is only for a single window! One typically
6379 wants to cycle between 5-10 large active windows. Also because both
6380 backing-store (the window's actual contents) and save-unders (the
6381 pixels covered up by the window) are cached offscreen that introduces
6382 an additional factor of 2 in memory use.
6383
6384 However, even in the smallest usage mode with n equal 2 and
6385 -ncache_no_rootpixmap set (this requires only 2X additional
6386 framebuffer memory) there is still a noticable improvement for many
6387 activities, although it is not as dramatic as with, say n equal 12 and
6388 rootpixmap (desktop background) caching enabled.
6389
6390 The large memory consumption of the current implementation can be
6391 thought of as a tradeoff to providing caching and being compatible
6392 with all VNC viewers and also ease of implementing. Hopefully it can
6393 be tuned to use less, or the VNC community will extend the protocol to
6394 allow caching and replaying of compressed blobs of data.
6395
6396 Another option to experiment with is "-ncache_cr". By specifying it,
6397 x11vnc will try to do smooth opaque window moves instead of its
6398 wireframe. This can give a very nice effect (note: on Unix the realvnc
6399 viewer seems to be smoother than the tightvnc viewer), but can lead to
6400 some painting problems, and can be jerky in some circumstances.
6401
6402 Surprisingly, for very slow connections, e.g. modem, the -ncache_cr
6403 option can actually improve window drags. This is probably because no
6404 pixel data (only CopyRect instructions) are sent when dragging a
6405 window. Normally, the wireframe must be sent and this involves
6406 compressing and sending the lines that give rise to the moving box
6407 effect (note that real framebuffer data is sent to "erase" the white
6408 lines of the box.)
6409
6410 If you experience painting errors you can can tap the Alt_L key (Left
6411 "Alt" key) 3 times in a row to signal x11vnc to refresh the screen to
6412 all viewers. You may also need to iconify and then deiconify any
6413 damaged windows to correct their cache data as well. Note that if you
6414 change color viewer depth (e.g. 8bpp to full color) dynamically that
6415 will usually lead to the entire extended framebuffer being resent
6416 which can take a long time over very slow links: it may be better to
6417 reconnect and reset the format right after doing so. x11vnc will try
6418 to detect the format change and clear (make completely black) the
6419 cache region.
6420
6421 Gotcha for older Unix VNC Viewers: The older Unix VNC viewers (e.g.
6422 current TightVNC Unix Viewer) require X server backingstore to keep
6423 off-viewer screen data local. If the viewer-side X server has
6424 backingstore disabled (sadly, currently the default on Linux, etc),
6425 then to get the offscreen pixels the viewer has to ask for a refresh
6426 over the network, thereby defeating the caching. Use something like
6427 this in your viewer-side /etc/X11/xorg.conf file (or otherwise get
6428 your viewer-side system to do it)
6429 Section "Device"
6430 ...
6431 Option "backingstore"
6432 ...
6433 EndSection
6434
6435 No problems like this have been observed with Windows VNC Viewers:
6436 they all seem to keep their entire framebuffer in local memory.
6437
6438 Gotcha for KDE krdc VNC Viewer: One user found that KDE's krdc viewer
6439 has some sort of hardwired limit on the maximum size of the
6440 framebuffer (64MB?). It fails quickly saying "The connection to the
6441 host has been interrupted." The workaround for his 1280x1024
6442 x11vnc-side display was to run with "-ncache 10", i.e. a smaller value
6443 to be under the krdc threshold.
6444
6445 Although this scheme is not as quick (nor as compressed) as
6446 nx/nomachine, say, it does provide a good step in the direction of
6447 improving VNC performance by client side caching.
6448
6449
6450 Q-80: Does x11vnc support TurboVNC?
6451
6452 As of Feb/2009 (development tarball) there is an experimental kludge
6453 to let you build x11vnc using TurboVNC's modified TightVNC encoding.
6454 TurboVNC is part of the VirtualGL project. It does two main things to
6455 speed up the TightVNC encoding:
6456 * It eliminates bottlenecks, overheads, wait-times in the TightVNC
6457 encoding implementation and instead only worries about sending
6458 very well (and quickly) compressed JPEG data.
6459 * A fast proprietary JPEG implemention is used (Intel IPP on x86)
6460 instead of the usual libjpeg implementation. TurboJPEG is an
6461 interface library, libturbojpeg, provided by the project that
6462 achieves this.
6463
6464 TurboVNC works very well over LAN and evidently fast Broadband too.
6465 When using it with x11vnc in such a situation you may want to dial
6466 down the delays, e.g. "-wait 5" and "-defer 5" (or even a smaller
6467 setting) to poll and pump things out more quickly.
6468
6469 See the instructions in "x11vnc/misc/turbovnc/README" for how to build
6470 x11vnc with TurboVNC support. You will also need to download the
6471 TurboJPEG software.
6472
6473 In brief, the steps look like this:
6474 cd x11vnc-x.y.z/x11vnc/misc/turbovnc
6475 ./apply_turbovnc
6476 cd ../../..
6477 env LDFLAGS='-L/DIR -Xlinker --rpath=/DIR' ./configure
6478 make AM_LDFLAGS='-lturbojpeg'
6479
6480 where you replace "/DIR" with the directory containing libturbojpeg.so
6481 you downloaded separately. If it works out well enough TurboVNC
6482 support will be integrated into x11vnc and more of its tuning features
6483 will be implemented. Support for TurboVNC in SSVNC viewer has been
6484 added as an experiment as well. If you try either one, let us know how
6485 it went.
6486
6487 There also may be some Linux.i686 and Darwin.i386 x11vnc binaries with
6488 TurboVNC support in the misc. bins directory. For other platforms you
6489 will need to compile yourself.
6490
6491 On relatively cheap and old hardware (Althon64 X2 5000+ / GeForce
6492 6200) x11vnc and SSVNC, both TurboVNC enabled, were able to sustain
6493 13.5 frames/sec (fps) and 15 Megapixels/sec using the VirtualGL
6494 supplied OpenGL benchmark program glxspheres. VirtualGL on higher-end
6495 hardware can sustain 20-30 fps with the glxspheres benchmark.
6496
6497 Potential Slowdown: As we describe elsewhere, unless you use x11vnc
6498 with an X server using, say, NVidia proprietary drivers (or a virtual
6499 X server like Xvfb or Xdummy, or in ShadowFB mode), then the read rate
6500 from the graphics card can be rather slow (e.g. 10 MB/sec) and becomes
6501 the bottleneck when using x11vnc over fast networks. Note that all of
6502 Xorg's drivers currently (2009) have slow read rates (only proprietary
6503 drivers appear to have optimized reads.)
6504
6505 So under these (more or less typical) conditions, the speed
6506 improvement provided by TurboVNC may only be marginal. Look for this
6507 output to see your read rate:
6508 28/02/2009 11:11:07 Autoprobing TCP port
6509 28/02/2009 11:11:07 Autoprobing selected port 5900
6510 28/02/2009 11:11:08 fb read rate: 10 MB/sec
6511 28/02/2009 11:11:08 screen setup finished.
6512
6513 A rate of 10 MB/sec means a 1280x1024x24 screen takes 0.5 seconds to
6514 read in. TurboVNC compresses that to JPEG in a much shorter time. On
6515 the other hand, an NVidia driver may have a read rate of 250 MB/sec
6516 and so only takes 0.02 seconds to read the entire screen in.
6517
6518
6519
6520 [Mouse Cursor Shapes]
6521
6522 Q-81: Why isn't the mouse cursor shape (the little icon shape where
6523 the mouse pointer is) correct as I move from window to window?
6524
6525 On X servers supporting XFIXES or Solaris/IRIX Overlay extensions it
6526 is possible for x11vnc to do this correctly. See a few paragraphs down
6527 for the answer.
6528
6529 Historically, the X11 mouse cursor shape (i.e. little picture: an
6530 arrow, X, I-beam, resizer, etc) is one of the few WRITE-only objects
6531 in X11. That is, an application can tell the X server what the cursor
6532 shape should be when the pointer is in a given window, but a program
6533 (like x11vnc) unfortunately cannot read this information. I believe
6534 this is because the cursor shape is often downloaded to the graphics
6535 hardware (video card), but I could be mistaken.
6536
6537 A simple kludge is provided by the "-cursor X" option that changes the
6538 cursor when the mouse is on the root background (or any window has the
6539 same cursor as the root background.) Note that desktops like GNOME or
6540 KDE often cover up the root background, so this won't work for those
6541 cases. Also see the "-cursor some" option for additional kludges.
6542
6543 Note that as of Aug/2004 on Solaris using the SUN_OVL overlay
6544 extension and IRIX, x11vnc can show the correct mouse cursor when the
6545 -overlay option is supplied. See this FAQ for more info.
6546
6547 Also as of Dec/2004 XFIXES X extension support has been added to allow
6548 exact extraction of the mouse cursor shape. XFIXES fixes the problem
6549 of the cursor-shape being write-only: x11vnc can now query the X
6550 server for the current shape and send it back to the connected
6551 viewers. XFIXES is available on recent Linux Xorg based distros and
6552 Solaris 10.
6553
6554 The only XFIXES issue is the handling of alpha channel transparency in
6555 cursors. If a cursor has any translucency then in general it must be
6556 approximated to opaque RGB values for use in VNC. There are some
6557 situations where the cursor transparency can also handled exactly:
6558 when the VNC Viewer requires the cursor shape be drawn into the VNC
6559 framebuffer or if you apply a patch to your VNC Viewer to extract
6560 hidden alpha channel data under 32bpp. Details can be found here.
6561
6562
6563 Q-82: When using XFIXES cursorshape mode, some of the cursors look
6564 really bad with extra black borders around the cursor and other cruft.
6565 How can I improve their appearance?
6566
6567 This happens for cursors with transparency ("alpha channel"); regular
6568 X cursors (bitmaps) should be correct. Unfortunately x11vnc 0.7 was
6569 released with a very poor algorithm for approximating the
6570 transparency, which led to the ugly black borders.
6571
6572 The problem is as follows: XFIXES allows x11vnc to retrieve the
6573 current X server cursor shape, including the alpha channel for
6574 transparency. For traditional bitmap cursors the alpha value will be 0
6575 for completely transparent pixels and 255 for completely opaque
6576 pixels; whereas for modern, eye-candy cursors an alpha value between 0
6577 and 255 means to blend in the background colors to that degree with
6578 the cursor colors. The pixel color blending formula is something like
6579 this: Red = Red_cursor * a + Red_background * (1 - a), (where here 0
6580 =< a =< 1), with similar for Green and Blue. The VNC protocol does not
6581 currently support an alpha channel in cursors: it only supports
6582 regular X bitmap cursors and Rich Cursors that have RGB (Red, Green,
6583 Blue) color data, but no "A" = alpha data. So in general x11vnc has to
6584 approximate a cursor with transparency to create a Rich Cursor. This
6585 is easier said than done: some cursor themes have cursors with
6586 complicated drop shadows and other forms of translucency.
6587
6588 Anyway, for the x11vnc 0.7.1 release the algorithm for approximating
6589 transparency is much improved and hopefully gives decent cursor shapes
6590 for most cursor themes and you don't have to worry about it.
6591
6592 In case it still looks bad for your cursor theme, there are (of
6593 course!) some tunable parameters. The "-alphacut n" option lets you
6594 set the threshold "n" (between 0 and 255): cursor pixels with alpha
6595 values below n will be considered completely transparent while values
6596 equal to or above n will be completely opaque. The default is 240. The
6597 "-alphafrac f" option tries to correct individual cursors that did not
6598 fare well with the default -alphacut value: if a cursor has less than
6599 fraction f (between 0.0 and 1.0) of its pixels selected by the default
6600 -alphacut, the threshold is lowered until f of its pixels are
6601 selected. The default fraction is 0.33.
6602
6603 Finally, there is an option -alpharemove that is useful for themes
6604 where many cursors are light colored (e.g. "whiteglass".) XFIXES
6605 returns the cursor data with the RGB values pre-multiplied by the
6606 alpha value. If the white cursors look too grey, specify -alpharemove
6607 to brighten them by having x11vnc divide out the alpha value.
6608
6609 One user played with these parameters and reported back:
6610 Of the cursor themes present on my system:
6611
6612 gentoo and gentoo-blue: alphacut:192 - noalpharemove
6613
6614 gentoo-silver: alphacut:127 and alpharemove
6615
6616 whiteglass and redglass (presumably also handhelds, which is based
6617 heavily on redglass) look fine with the apparent default of alphacut:255.
6618
6619
6620 Q-83: In XFIXES mode, are there any hacks to handle cursor
6621 transparency ("alpha channel") exactly?
6622
6623 As of Jan/2005 libvncserver has been modified to allow an alpha
6624 channel (i.e. RGBA data) for Rich Cursors. So x11vnc can now send the
6625 alpha channel data to libvncserver. However, this data will only be
6626 used for VNC clients that do not support the CursorShapeUpdates VNC
6627 extension (or have disabled it.) It can be disabled for all clients
6628 with the -nocursorshape x11vnc option. In this case the cursor is
6629 drawn, correctly blended with the background, into the VNC framebuffer
6630 before being sent out to the client. So the alpha blending is done on
6631 the x11vnc side. Use the -noalphablend option to disable this behavior
6632 (always approximate transparent cursors with opaque RGB values.)
6633
6634 The CursorShapeUpdates VNC extension complicates matters because the
6635 cursor shape is sent to the VNC viewers supporting it, and the viewers
6636 draw the cursor locally. This improves response over slow links. Alpha
6637 channel data for these locally drawn cursors is not supported by the
6638 VNC protocol.
6639
6640 However, in the libvncserver CVS there is a patch to the TightVNC
6641 viewer to make this work for CursorShapeUpdates under some
6642 circumstances. This hack is outside of the VNC protocol. It requires
6643 the screens on both sides to be depth 24 at 32bpp (it uses the extra 8
6644 bits to secretly hide the cursor alpha channel data.) Not only does it
6645 require depth 24 at 32bpp, but it also currently requires the client
6646 and server to be of the same endianness (otherwise the hidden alpha
6647 data gets reset to zero by a libvncserver translation function; we can
6648 fix this at some point if there is interest.) The patch is for the
6649 TightVNC 1.3dev5 Unix vncviewer and it enables the TightVNC viewer to
6650 do the cursor alpha blending locally. The patch code should give an
6651 example on how to change the Windows TightVNC viewer to achieve the
6652 same thing (send me the patch if you get that working.)
6653
6654 This patch is applied to the Enhanced TightVNC Viewer (SSVNC) package
6655 we provide.
6656
6657 [Mouse Pointer]
6658
6659 Q-84: Why does the mouse arrow just stay in one corner in my
6660 vncviewer, whereas my cursor (that does move) is just a dot?
6661
6662 This default takes advantage of a tightvnc extension
6663 (CursorShapeUpdates) that allows specifying a cursor image shape for
6664 the local VNC viewer. You may disable it with the -nocursor option to
6665 x11vnc if your viewer does not have this extension.
6666
6667 Note: as of Aug/2004 this should be fixed: the default for
6668 non-tightvnc viewers (or ones that do not support CursorShapeUpdates)
6669 will be to draw the moving cursor into the x11vnc framebuffer. This
6670 can also be disabled via -nocursor.
6671
6672
6673 Q-85: Can I take advantage of the TightVNC extension to the VNC
6674 protocol where Cursor Positions Updates are sent back to all connected
6675 clients (i.e. passive viewers can see the mouse cursor being moved
6676 around by another viewer)?
6677
6678 Use the -cursorpos option when starting x11vnc. A VNC viewer must
6679 support the Cursor Positions Updates for the user to see the mouse
6680 motions (the TightVNC viewers support this.) As of Aug/2004 -cursorpos
6681 is the default. See also -nocursorpos and -nocursorshape.
6682
6683
6684 Q-86: Is it possible to swap the mouse buttons (e.g. left-handed
6685 operation), or arbitrarily remap them? How about mapping button clicks
6686 to keystrokes, e.g. to partially emulate Mouse wheel scrolling?
6687
6688 You can remap the mouse buttons via something like: -buttonmap 13-31
6689 (or perhaps 12-21.) Also, note that xmodmap(1) lets you directly
6690 adjust the X server's button mappings, but in some circumstances it
6691 might be more desirable to have x11vnc do it.
6692
6693 One user had an X server with only one mouse button(!) and was able to
6694 map all of the VNC client mouse buttons to it via: -buttonmap 123-111.
6695
6696 Note that the -debug_pointer option prints out much info for every
6697 mouse/pointer event and is handy in solving problems.
6698
6699 To map mouse button clicks to keystrokes you can use the alternate
6700 format where the keystrokes are enclosed between colons like this
6701 :<KeySym>: in place of the mouse button digit. For a sequence of
6702 keysyms separate them with "+" signs. Look in the include file
6703 <X11/keysymdef.h>, or use xev(1), or -debug_keyboard to find the
6704 keysym names. Button clicks can also be included in the sequence via
6705 the fake keysyms Button1, etc.
6706
6707 As an example, suppose the VNC viewer machine has a mouse wheel (these
6708 generate button 4 and 5 events), but the machine that x11vnc is run on
6709 only has the 3 regular buttons. In normal operation x11vnc will
6710 discard the button 4 and 5 events. However, either of the following
6711 button maps could possibly be of use emulating the mouse wheel events
6712 in this case:
6713 -buttonmap 12345-123:Prior::Next:
6714 -buttonmap 12345-123:Up+Up+Up::Down+Down+Down:
6715
6716 Exactly what keystroke "scrolling" events they should be bound to
6717 depends on one's taste. If this method is too approximate, one could
6718 consider not using -buttonmap but rather configuring the X server to
6719 think it has a mouse with 5 buttons even though the physical mouse
6720 does not. (e.g. 'Option "ZAxisMapping" "4 5"'.)
6721
6722 Note that when a keysym-mapped mouse button is clicked down this
6723 immediately generates the key-press and key-release events (for each
6724 keysym in turn if the mapping has a sequence of keysyms.) When the
6725 mouse button goes back up nothing is generated.
6726
6727 If you include modifier keys like Shift_L instead of key-press
6728 immediately followed by key-release the state of the modifier key is
6729 toggled (however the initial state of the modifier key is ignored.) So
6730 to map the right button to type my name 'Karl Runge' I could use this:
6731 -buttonmap 3-:Shift_L+k+Shift_L+a+r+l+space+Shift_L+r+Shift_L+u+n+g+e:
6732
6733 (yes, this is getting a little silly.)
6734
6735 BTW, Coming the other way around, if the machine you are sitting at
6736 does not have a mouse wheel, but the remote machine does (or at least
6737 has 5 buttons configured), this key remapping can be useful:
6738 -remap Super_R-Button4,Menu-Button5
6739
6740 you just tap those two keys to get the mouse wheel scrolls (this is
6741 more useful than the Up and Down arrow keys because a mouse wheel
6742 "click" usually gives a multi-line scroll.)
6743 [Keyboard Issues]
6744
6745 Q-87: How can I get my AltGr and Shift modifiers to work between
6746 keyboards for different languages?
6747
6748 The option -modtweak should help here. It is a mode that monitors the
6749 state of the Shift and AltGr Modifiers and tries to deduce the correct
6750 keycode to send, possibly by sending fake modifier key presses and
6751 releases in addition to the actual keystroke.
6752
6753 Update: As of Jul/2004 -modtweak is now the default (use -nomodtweak
6754 to get the old behavior.) This was done because it was noticed on
6755 newer XFree86 setups even on bland "us" keyboards like "pc104 us"
6756 XFree86 included a "ghost" key with both "<" and ">" it. This key does
6757 not exist on the keyboard (see this FAQ for more info.) Without
6758 -modtweak there was then an ambiguity in the reverse map keysym =>
6759 keycode, making it so the "<" symbol could not be typed.
6760
6761 Also see the FAQ about the -xkb option for a more powerful method of
6762 modifier tweaking for use on X servers with the XKEYBOARD extension.
6763
6764 When trying to resolve keyboard mapping problems, note that the
6765 -debug_keyboard option prints out much info for every keystroke and so
6766 can be useful debugging things.
6767
6768 Note that one user had a strange setup and none of the above helped.
6769 His solution was to disable all of the above and use -nomodtweak. This
6770 is the simplest form of keystroke insertion and it actually solved the
6771 problem. Try it if the other options don't help.
6772
6773
6774 Q-88: When I try to type a "<" (i.e. less than) instead I get ">"
6775 (i.e. greater than)! Strangely, typing ">" works OK!!
6776
6777 Does your keyboard have a single key with both "<" and ">" on it? Even
6778 if it doesn't, your X server may think your keyboard has such a key
6779 (e.g. pc105 in the XF86Config file when it should be something else,
6780 say pc104.)
6781
6782 Short Cut: Try the -xkb or -sloppy_keys options and see if that helps
6783 the situation. The discussion below is a bit outdated (e.g. -modtweak
6784 is now the default) but it is useful reference for various tricks and
6785 so is kept.
6786
6787
6788 The problem here is that on the Xserver where x11vnc is run there are
6789 two keycodes that correspond to the "<" keysym. Run something like
6790 this to see:
6791
6792 xmodmap -pk | egrep -i 'KeyCode|less|greater'
6793 There are 4 KeySyms per KeyCode; KeyCodes range from 8 to 255.
6794 KeyCode Keysym (Keysym) ...
6795 59 0x002c (comma) 0x003c (less)
6796 60 0x002e (period) 0x003e (greater)
6797 94 0x003c (less) 0x003e (greater)
6798
6799 That keycode 94 is the special key with both "<" and ">". When x11vnc
6800 receives the "<" keysym over the wire from the remote VNC client, it
6801 unfortunately maps it to keycode 94 instead of 59, and sends 94 to the
6802 X server. Since Shift is down (i.e. you are Shifting the comma key),
6803 the X server interprets this as Shifted-94, which is ">".
6804
6805 A workaround in the X server configuration is to "deaden" that special
6806 key:
6807
6808 xmodmap -e "keycode 94 = "
6809
6810 However, one user said he had to do this:
6811
6812 xmodmap -e "keycode 94 = 0x002c 0x003c"
6813
6814 (If the numerical values are different for your setup, substitute the
6815 ones that correspond to your display. The above xmodmap scheme can
6816 often be used to work around other ambiguous keysym to keycode
6817 mappings.)
6818
6819 Alternatively, here are some x11vnc options to try to work around the
6820 problem:
6821 -modtweak
6822
6823 and
6824 -remap less-comma
6825
6826 These are convenient in that they do not modify the actual X server
6827 settings. The former (-modtweak) is a mode that monitors the state of
6828 the Shift and AltGr modifiers and tries to deduce the correct keycode
6829 sequence to send. Since Jul/2004 -modtweak is now the default. The
6830 latter (-remap less-comma) is an immediate remapping of the keysym
6831 less to the keysym comma when it comes in from a client (so when Shift
6832 is down the comma press will yield "<".)
6833
6834 See also the FAQ about the -xkb option as a possible workaround using
6835 the XKEYBOARD extension.
6836
6837 Note that the -debug_keyboard option prints out much info for every
6838 keystroke to aid debugging keyboard problems.
6839
6840
6841 Q-89: Extra Character Inserted, E.g.: When I try to type a "<" (i.e.
6842 less than) instead I get "<," (i.e. an extra comma.)
6843
6844 This is likely because you press "Shift" then "<" but then released
6845 the Shift key before releasing the "<". Because of a keymapping
6846 ambiguity the last event "< up" is interpreted as "," because that key
6847 unshifted is the comma.
6848
6849 This extra character insertion will happen for other combinations of
6850 characters: in general it can happen whenever the Shift key is
6851 released early.
6852
6853 This should not happen in -xkb mode, because it works hard to resolve
6854 the ambiguities. If you do not want to use -xkb, try the option
6855 -sloppy_keys to attempt a similar type of algorithm.
6856
6857 One user had this problem for Italian and German keyboards with the
6858 key containing ":" and "." When he typed ":" he would get an extra "."
6859 inserted after the ":". The solution was -sloppy_keys.
6860
6861
6862 Q-90: I'm using an "international" keyboard (e.g. German "de", or
6863 Danish "dk") and the -modtweak mode works well if the VNC viewer is
6864 run on a Unix/Linux machine with a similar keyboard. But if I run
6865 the VNC viewer on Unix/Linux with a different keyboard (e.g. "us") or
6866 Windows with any keyboard, I can't type some keys like: "@", "$",
6867 "<", ">", etc. How can I fix this?
6868
6869 The problem with Windows is it does not seem to handle AltGr well. It
6870 seems to fake it up by sending Control_L+Alt_R to applications. The
6871 Windows VNC viewer sends those two down keystrokes out on the wire to
6872 the VNC server, but when the user types the next key to get, e.g., "@"
6873 the Windows VNC viewer sends events bringing the up the
6874 Control_L+Alt_R keys, and then sends the "@" keysym by itself.
6875
6876 The Unix/Linux VNC viewer on a "us" keyboard does a similar thing
6877 since "@" is the Shift of the "2" key. The keysyms Shift and "@" are
6878 sent to the VNC server.
6879
6880 In both cases no AltGr is sent to the VNC server, but we know AltGr is
6881 needed on the physical international keyboard to type a "@".
6882
6883 This all worked fine with x11vnc running with the -modtweak option (it
6884 figures out how to adjust the Modifier keys (Shift or AltGr) to get
6885 the "@".) However it fails under recent versions of XFree86 (and the
6886 X.org fork.) These run the XKEYBOARD extension by default and make
6887 heavy use of it to handle international keyboards.
6888
6889 To make a long story short, on these newer XFree86 setups the
6890 traditional X keymap lookup x11vnc uses is no longer accurate. x11vnc
6891 can't find the keysym "@" anywhere in the keymapping! (even though it
6892 is in the XKEYBOARD extended keymapping.)
6893
6894 How to Solve: As of Jul/2004 x11vnc has two changes:
6895 * -modtweak (tweak Modifier keys) is now the default (use
6896 -nomodtweak to go back to the old way)
6897 * there is a new option -xkb to use the XKEYBOARD extension API to
6898 do the Modifier key tweaking.
6899
6900 The -xkb option seems to fix all of the missing keys: "@", "<", ">",
6901 etc.: it is recommended that you try it if you have this sort of
6902 problem. Let us know if there are any remaining problems (see the next
6903 paragraph for some known problems.) If you specify the -debug_keyboard
6904 (aka -dk) option twice you will get a huge amount of keystroke
6905 debugging output (send it along with any problems you report.)
6906
6907 Update: as of Jun/2005 x11vnc will try to automatically enable -xkb if
6908 it appears that would be beneficial (e.g. if it sees any of "@", "<",
6909 ">", "[" and similar keys are mapped in a way that needs the -xkb to
6910 access them.) To disable this automatic check use -noxkb.
6911
6912 Known problems:
6913 * One user had to disable a "ghost" Mode_switch key that was causing
6914 problems under -xkb. His physical AltGr key was bound to
6915 ISO_Level3_Shift (which seems to be the XKEYBOARD way of doing
6916 things), while there was a ghost key Mode_switch (which seems to
6917 be obsolete) in the mapping as well. Both of these keysyms were
6918 bound to Mod5 and x11vnc was unfortunately choosing Mode_switch.
6919 From the x11vnc -xkb -dk -dk output it was noted that Mode_switch
6920 was attached to keycode 93 (no physical key generates this
6921 keycode) while ISO_Level3_Shift was attached to keycode 113. The
6922 keycode skipping option was used to disable the ghost key:
6923 -skip_keycodes 93
6924 * In implementing -xkb we noticed that some characters were still
6925 not getting through, e.g. "~" and "^". This is not really an
6926 XKEYBOARD problem. What was happening was the VNC viewer was
6927 sending the keysyms asciitilde and asciicircum to x11vnc, but on
6928 the X server with the international keyboard those keysyms were
6929 not mapped to any keys. So x11vnc had to skip them (Note: as of
6930 May/2005 they are added by default see -add_keysyms below.)
6931 The way these characters are typically entered on international
6932 keyboards is by "dead" (aka "mute") keys. E.g. to enter "~" at the
6933 physical display the keysym dead_tilde is pressed and released
6934 (this usually involves holding AltGr down while another key is
6935 pressed) and then space is pressed. (this can also be used get
6936 characters with the "~" symbol on top, e.g. "" by typing "a"
6937 instead of space.)
6938 What to do? In general the VNC protocol has not really solved this
6939 problem: what should be done if the VNC viewer sends a keysym not
6940 recognized by the VNC server side? Workarounds can possibly be
6941 created using the -remap x11vnc option:
6942 -remap asciitilde-dead_tilde,asciicircum-dead_circumflex
6943 etc. Use -remap filename if the list is long. Please send us your
6944 workarounds for this problem on your keyboard. Perhaps we can have
6945 x11vnc adjust automatically at some point. Also see the
6946 -add_keysyms option in the next paragraph.
6947 Update: for convenience "-remap DEAD" does many of these mappings
6948 at once.
6949 * To complement the above workaround using the -remap, an option
6950 -add_keysyms was added. This option instructs x11vnc to bind any
6951 unknown Keysyms coming in from VNC viewers to unused Keycodes in
6952 the X server. This modifies the global state of the X server. When
6953 x11vnc exits it removes the extra keymappings it created. Note
6954 that the -remap mappings are applied first, right when the Keysym
6955 is received from a VNC viewer, and only after that would
6956 -add_keysyms, or anything else, come into play.
6957 Update: -add_keysyms is now on by default. Use -noadd_keysyms to
6958 disable.
6959
6960
6961 Q-91: When typing I sometimes get double, triple, or more of my
6962 keystrokes repeated. I'm sure I only typed them once, what can I do?
6963
6964 This may be due to an interplay between your X server's key autorepeat
6965 delay and the extra time delays caused by x11vnc processing.
6966
6967 Short answer: disable key autorepeating by running the command "xset r
6968 off" on the Xserver where x11vnc is run (restore via "xset r on") or
6969 use the new (Jul/2004) -norepeat x11vnc option. You will still have
6970 autorepeating because that is taken care of on your VNC viewer side.
6971
6972 Update: as of Dec/2004 -norepeat is now the default. Use -repeat to
6973 disable it.
6974
6975 Details:
6976 suppose you press a key DOWN and it generates changes in large regions
6977 of the screen. The CPU and I/O work x11vnc does for the large screen
6978 change could be longer than your X server's key autorepeat delay.
6979 x11vnc may not get to processing the key UP event until after the
6980 screen work is completed. The X server believes the key has been held
6981 down all this time, and applies its autorepeat rules.
6982
6983 Even without inducing changes in large regions of the screen, this
6984 problem could arise when accessing x11vnc via a dialup modem or
6985 otherwise high latency link (e.g. > 250 ms latency.)
6986
6987 Look at the output of "xset q" for the "auto repeat delay" setting. Is
6988 it low (e.g. < 300 ms)? If you turn off autorepeat completely: "xset r
6989 off", does the problem go away?
6990
6991 The workaround is to manually apply "xset r off" and "xset r on" as
6992 needed, or to use the -norepeat (which has since Dec/2004 been made
6993 the default.) Note that with X server autorepeat turned off the VNC
6994 viewer side of the connection will (nearly always) do its own
6995 autorepeating so there is no big loss here, unless someone is also
6996 working at the physical display and misses his autorepeating.
6997
6998
6999 Q-92: The x11vnc -norepeat mode is in effect, but I still get repeated
7000 keystrokes!!
7001
7002 Are you using x11vnc to log in to an X session via display manager?
7003 (as described in this FAQ) If so, x11vnc is starting before your
7004 session and it disables autorepeat when you connect, but then after
7005 you log in your session startup (GNOME, KDE, ...) could be resetting
7006 the autorepeat to be on. Or it could be something inside your desktop
7007 trying to be helpful that decides to turn it back on.
7008
7009 x11vnc in -norepeat mode will by default reset autorepeat to off 2
7010 times (to help get thru the session startup problem), but it will not
7011 continue to battle with things turning autorepeat back on. It will
7012 also turn autorepeat off whenever it goes from a state of zero clients
7013 to one client. You can adjust the number of resets via "-norepeat N",
7014 or use "-norepeat -1" to have it keep resetting it whenever autorepeat
7015 gets turned back on when clients are connected.
7016
7017 In general you can manually turn autorepeating off by typing "xset r
7018 off", or a using desktop utility/menu, or "x11vnc -R norepeat". If
7019 something in your desktop is automatically turning it back on you
7020 should figure out how to disable that somehow.
7021
7022
7023 Q-93: After using x11vnc for a while, I find that I cannot type some
7024 (or any) characters or my mouse clicks and drags no longer have any
7025 effect, or they lead to strange effects. What happened?
7026
7027 Probably a modifier key, e.g. Control or Alt is "stuck" in a pressed
7028 down state.
7029
7030 This happens for VNC in general by the following mechanism. Suppose on
7031 the Viewer side desktop there is some hot-key to switch
7032 desktops/rooms/spaces, etc. E.g. suppose Alt+LeftArrow moves to the
7033 left desktop/room/space. Or suppose an Alt+hotkey combination
7034 iconifies a window. This can leave the Alt key pressed down on the
7035 remote side.
7036
7037 Consider the sequence that happens. The Alt_L key and then the
7038 LeftArrow key go down. Since you are inside the viewer the Alt_L key
7039 press is sent to the other side (x11vnc) and so it is pressed down in
7040 the remote desktop as well. (by "Alt_L" we mean the Alt key on the
7041 left-hand side of the keyboard.) Your local desktop (where the VNC
7042 Viewer is running) then warps to the new desktop/room/space: Leaving
7043 the Alt_L key still pressed down in the remote desktop.
7044
7045 If someone is sitting at the desktop, or when you return in the viewer
7046 it may be very confusing because the Alt_L is still pressed down but
7047 you (or the person sitting at the desktop) do not realize this.
7048 Depending on which remote desktop (x11vnc side) is used, it can act
7049 very strangely.
7050
7051 A quick workaround when you notice this is to press and release all of
7052 the Alt, Shift, Control, Windows-Flag, modifier keys to free the
7053 pressed one. You need to do this for both the left and right Shift,
7054 Alt, Control, etc. keys to be sure.
7055
7056 Note that many VNC Viewers try to guard against this when they are
7057 notified by the window system that the viewer app has "lost focus".
7058 When it receives the "lost focus" event, the viewer sends VNC
7059 Key-Release events for all modifier keys that are currently pressed
7060 down. This does not always work, however, since it depends on how the
7061 desktop manages these "warps". If the viewer is not notified it cannot
7062 know it needs to release the modifiers.
7063
7064 You can also use the -clear_mods option to try to clear all of the
7065 modifier keys at x11vnc startup. You will still have to be careful
7066 that you do not leave the modifier key pressed down during your
7067 session. It is difficult to prevent this problem from occurring (short
7068 of using -remap to prevent sending all of the problem modifier keys,
7069 which would make the destkop pretty unusable.)
7070
7071 During a session these x11vnc remote control commands can also help:
7072 x11vnc -R clear_mods
7073 x11vnc -R clear_keys
7074 x11vnc -R clear_locks
7075 x11vnc -R clear_all
7076
7077 A similar problem can occur if you accidentally press the Caps_Lock or
7078 Num_Lock down. When these are locked on the remote side it can
7079 sometimes lead to strange desktop behavior (e.g. cannot drag or click
7080 on windows.) As above you may not notice this because the lock isn't
7081 down on the local (Viewer) side. See this FAQ on lock keys problem.
7082 These options may help avoid the problem: -skip_lockkeys and
7083 -capslock. See also -clear_all.
7084
7085
7086 Q-94: The machine where I run x11vnc has an AltGr key, but the local
7087 machine where I run the VNC viewer does not. Is there a way I can map
7088 a local unused key to send an AltGr? How about a Compose key as well?
7089
7090 Something like "-remap Super_R-Mode_switch" x11vnc option may work.
7091 Note that Super_R is the "Right Windoze(tm) Flaggie" key; you may want
7092 to choose another. The -debug_keyboard option comes in handy in
7093 finding keysym names (so does xev(1).)
7094
7095 For Compose how about "-remap Menu-Multi_key" (note that Multi_key is
7096 the official name for Compose.) To do both at the same time: "-remap
7097 Super_R-Mode_switch,Menu-Multi_key" or use "-remap filename" to
7098 specify remappings from a file.
7099
7100
7101 Q-95: I have a Sun machine I run x11vnc on. Its Sun keyboard has just
7102 one Alt key labelled "Alt" and two Meta keys labelled with little
7103 diamonds. The machine where I run the VNC viewer only has Alt keys.
7104 How can I send a Meta keypress? (e.g. emacs needs this)
7105
7106 Here are a couple ideas. The first one is to simply use xmodmap(1) to
7107 adjust the Sun X server. Perhaps xmodmap -e "keysym Alt_L = Meta_L
7108 Alt_L" will do the trick. (there are other ways to do it, one user
7109 used: xmodmap -e "keycode 26 = Meta_L" for his setup.)
7110
7111 Since xmodmap(1) modifies the X server mappings you may not want to do
7112 this (because it affects local work on that machine.) Something like
7113 the -remap Alt_L-Meta_L to x11vnc may be sufficient for ones needs,
7114 and does not modify the X server environment. Note that you cannot
7115 send Alt_L in this case, maybe -remap Super_L-Meta_L would be a better
7116 choice if the Super_L key is typically unused in Unix.
7117
7118
7119 Q-96: Running x11vnc on HP-UX I cannot type "#" I just get a "3"
7120 instead.
7121
7122 One user reports this problem on HP-UX Rel_B.11.23. The problem was
7123 traced to a strange keyboard mapping for the machine (e.g. xmodmap -pk
7124 output) that looked like:
7125 ...
7126 039 2 at at at
7127 ...
7128 047 3 numbersign numbersign numbersign
7129
7130 and similar triple mappings (with two in the AltGr/Mode_switch group)
7131 of a keysum to a single keycode.
7132
7133 Use the -nomodtweak option as a workaround. You can also use xmodmap
7134 to correct these mappings in the server, e.g.:
7135 xmodmap -e "keycode 47 = 3 numbersign"
7136
7137 Also, as of Feb/2007, set the environment variable MODTWEAK_LOWEST=1
7138 (either in your shell or via "-env MODTWEAK_LOWEST=1" option) to
7139 handle these mappings better.
7140
7141
7142 Q-97: Can I map a keystroke to a mouse button click on the remote
7143 machine?
7144
7145 This can be done directly in some X servers using AccessX and
7146 Pointer_EnableKeys, but is a bit awkward. It may be more convenient to
7147 have x11vnc do the remapping. This can be done via the -remap option
7148 using the fake "keysyms" Button1, Button2, etc. as the "to" keys (i.e.
7149 the ones after the "-")
7150
7151 As an example, consider a laptop where the VNC viewer is run that has
7152 a touchpad with only two buttons. It is difficult to do a middle
7153 button "paste" because (using XFree86/Xorg Emulate3Buttons) you have
7154 to click both buttons on the touch pad at the same time. This
7155 remapping:
7156 -remap Super_R-Button2
7157
7158 maps the Super_R "flag" key press to the Button2 click, thereby making
7159 X pasting a bit easier.
7160
7161 Note that once the key goes down, the button down and button up events
7162 are generated immediately on the x11vnc side. When the key is released
7163 (i.e. goes up) no events are generated.
7164
7165 Q-98: How can I get Caps_Lock to work between my VNC viewer and
7166 x11vnc?
7167
7168 This is a little tricky because it is possible to get the Caps_Lock
7169 state out of sync between your viewer-side machine and the x11vnc-side
7170 X server. For best results, we recommend not ever letting the
7171 Caps_Lock keypresses be processed by x11vnc. That way when you press
7172 Caps_Lock in the viewer your local machine goes into the Caps_Lock on
7173 state and sends keysym "A" say when you press "a". x11vnc will then
7174 fake things up so that Shift is held down to generate "A". The
7175 -skip_lockkeys option should help to accomplish this. For finer grain
7176 control use something like: "-remap Caps_Lock-None".
7177
7178 Also try the -nomodtweak and -capslock options.
7179
7180 Another useful option that turns off any Lock keys on the remote side
7181 at startup and end is the -clear_all option. During a session you can
7182 run these remote control commands to modify the Lock keys:
7183 x11vnc -R clear_locks
7184 x11vnc -R clear_all
7185
7186 the former will try to unset any Lock keys, the latter will do same
7187 and also try to make it so no key is pressed down (e.g. "stuck" Alt_L,
7188 etc.)
7189 [Screen Related Issues and Features]
7190
7191 Q-99: The remote display is larger (in number of pixels) than the
7192 local display I am running the vncviewer on. I don't like the
7193 vncviewer scrollbars, what I can do?
7194
7195 vncviewer has a option (usually accessible via F8 key or -fullscreen
7196 option) for vncviewer to run in full screen, where it will
7197 automatically scroll when the mouse is near the edge of the current
7198 view. For quick scrolling, also make sure Backing Store is enabled on
7199 the machine vncviewer is run on. (XFree86/Xorg disables it by default
7200 for some reason, add Option "backingstore" to XF86Config on the
7201 vncviewer side.)
7202
7203 BTW, contact me if you are having problems with vncviewer in
7204 fullscreen mode with your window manager (i.e. no keyboard response.)
7205 I have a workaround for vncviewer using XGrabServer().
7206
7207 There may also be scaling viewers out there (e.g. TightVNC or UltraVNC
7208 on Windows) that automatically shrink or expand the remote framebuffer
7209 to fit the local display. Especially for hand-held devices. See also
7210 the next FAQ on x11vnc scaling.
7211
7212
7213 Q-100: Does x11vnc support server-side framebuffer scaling? (E.g. to
7214 make the desktop smaller.)
7215
7216 As of Jun/2004 x11vnc provides basic server-side scaling. It is a
7217 global scaling of the desktop, not a per-client setting. To enable it
7218 use the "-scale fraction" option. "fraction" can either be a floating
7219 point number (e.g. -scale 0.75) or the alternative m/n fraction
7220 notation (e.g. -scale 3/4.) Note that if fraction is greater than one
7221 the display is magnified.
7222
7223 Extra resources (CPU, memory I/O, and memory) are required to do the
7224 scaling. If the machine is slow where x11vnc is run with scaling
7225 enabled, the interactive response can be unacceptable. OTOH, if run
7226 with scaling on a fast machine the performance degradation is usually
7227 not a big issue or even noticeable.
7228
7229 It may help to compile x11vnc with compiler option -O3 or -O4 to speed
7230 up the scaling code. Set the CFLAGS env. var. before running
7231 configure.
7232
7233 Also, if you just want a quick, rough "thumbnail" of the display you
7234 can append ":nb" to the fraction to turn on "no blending" mode. E.g.:
7235 "-scale 1/3:nb" Fonts will be difficult to read, but the larger
7236 features will be recognizable. BTW, "no blending" mode is forced on
7237 when scaling 8bpp PseudoColor displays (because blending an indexed
7238 colormap is a bad idea and leads to random colors, use :fb to force it
7239 on.)
7240
7241 One can also use the ":nb" with an integer scale factor (say "-scale
7242 2:nb") to use x11vnc as a screen magnifier for vision impaired
7243 applications. Since with integer scale factors the framebuffers become
7244 huge and scaling operations time consuming, be sure to use ":nb" for
7245 the fastest response.
7246
7247 In general for a scaled display if you are using a TightVNC viewer you
7248 may want to turn off jpeg encoding (e.g. vncviewer -nojpeg host:0.)
7249 There appears to be a noise enhancement effect, especially for regions
7250 containing font/text: the scaling can introduce some pixel artifacts
7251 that evidently causes the tight encoding algorithm to incorrectly
7252 detect the regions as image data and thereby introduce additional
7253 pixel artifacts due to the lossiness of the jpeg compression
7254 algorithm. Experiment to see if -nojpeg vncviewer option improves the
7255 readability of text when using -scale to shrink the display size. Also
7256 note that scaling may actually slow down the transfer of text regions
7257 because after being scaled they do not compress as well. (this can
7258 often be a significant slowdown, e.g. 10X.)
7259
7260 Another issue is that it appears VNC viewers require the screen width
7261 to be a multiple of 4. When scaling x11vnc will round the width to the
7262 nearest multiple of 4. To disable this use the ":n4" sub option (like
7263 ":nb" in the previous paragraph; to specify both use a comma:
7264 ":nb,n4", etc.)
7265
7266 If one desires per-client scaling for something like 1:1 from a
7267 workstation and 1:2 from a smaller device (e.g. handheld), currently
7268 the only option is to run two (or more) x11vnc processes with
7269 different scalings listening on separate ports (-rfbport option, etc.)
7270
7271 Update: As of May/2006 x11vnc also supports the UltraVNC server-side
7272 scaling. This is a per-client scaling by factors 1/2, 1/3, ... and so
7273 may be useful for PDA's ("-scale 1/2", etc. will give similar results
7274 except that it applies to all clients.) You may need to supply
7275 "-rfbversion 3.6" for this to be recognized by UltraVNC viewers.
7276
7277 BTW, whenever you run two or more x11vnc's on the same X display and
7278 use the GUI, then to avoid all of the x11vnc's simultaneously
7279 answering the gui you will need to use something like "-connect file1
7280 -gui ..." with different connect files for each x11vnc you want to
7281 control via the gui (or remote-control.) The "-connect file1" usage
7282 gives separate communication channels between a x11vnc process and the
7283 gui process. Otherwise they all share the same X property channels:
7284 VNC_CONNECT and X11VNC_REMOTE.
7285
7286 Update: As of Mar/2005 x11vnc now scales the mouse cursor with the
7287 same scale factor as the screen. If you don't want that, use the
7288 "-scale_cursor frac" option to set the cursor scaling to a different
7289 factor (e.g. use "-scale_cursor 1" to keep the cursor at its natural
7290 unscaled size.)
7291
7292
7293 Q-101: Does x11vnc work with Xinerama? (i.e. multiple monitors joined
7294 together to form one big, single screen.)
7295
7296 Yes, it should generally work because it simply polls the big
7297 effective screen.
7298
7299 If the viewing-end monitor is not as big as the remote Xinerama
7300 display, then the vncviewer scrollbars, etc, will have to be used to
7301 pan across the large area. However one user started two x11vnc's, one
7302 with "-clip 1280x1024+0+0" and the other with "-clip 1280x1024+1280+0"
7303 to split the big screen into two and used two VNC viewers to access
7304 them.
7305
7306 As of Jun/2008: Use "-clip xinerama0" to clip to the first xinerama
7307 sub-screen (if xinerama is active.) xinerama1 for the 2nd sub-screen,
7308 etc. This way you don't need to figure out the WxH+X+Y of the desired
7309 xinerama sub-screen. screens are sorted in increasing distance from
7310 the (0,0) origin (I.e. not the Xserver's order.)
7311
7312 There are a couple potential issues with Xinerama however. If the
7313 screen is not rectangular (e.g. 1280x1024 and 1024x768 monitors joined
7314 together), then there will be "non-existent" areas on the screen. The
7315 X server will return "garbage" image data for these areas and so they
7316 may be distracting to the viewer. The -blackout x11vnc option allows
7317 you to blacken-out rectangles by manually specifying their WxH+X+Y
7318 geometries. If your system has the libXinerama library, the -xinerama
7319 x11vnc option can be used to have it automatically determine the
7320 rectangles to be blackened out. (Note on 8bpp PseudoColor displays the
7321 fill color may not be black.) Update: -xinerama is now on by default.
7322
7323 Some users have reported that the mouse does not behave properly for
7324 their Xinerama display: i.e. the mouse cannot be moved to all regions
7325 of the large display. If this happens try using the -xwarppointer
7326 option. This instructs x11vnc to fake mouse pointer motions using the
7327 XWarpPointer function instead of the XTestFakeMotionEvent XTEST
7328 function. (This may be due to a bug in the X server for XTEST when
7329 Xinerama is enabled.) Update: As of Dec/2006 -xwarppointer will be
7330 applied automatically if Xinerama is detected. To disable use:
7331 -noxwarppointer
7332
7333
7334 Q-102: Can I use x11vnc on a multi-headed display that is not Xinerama
7335 (i.e. separate screens :0.0, :0.1, ... for each monitor)?
7336
7337 You can, but it is a little bit awkward: you must start separate
7338 x11vnc processes for each screen, and on the viewing end start up
7339 separate VNC viewer processes connecting to them. e.g. on the remote
7340 end:
7341 x11vnc -display :0.0 -bg -q -rfbport 5900
7342 x11vnc -display :0.1 -bg -q -rfbport 5901
7343
7344 (this could be automated in the display manager Xsetup for example)
7345 and then on the local machine where you are sitting:
7346 vncviewer somehost:0 &
7347 vncviewer somehost:1 &
7348
7349 Note: if you are running on Solaris 8 or earlier you can easily hit up
7350 against the maximum of 6 shm segments per process (for Xsun in this
7351 case) from running multiple x11vnc processes. You should modify
7352 /etc/system as mentioned in another FAQ to increase the limit. It is
7353 probably also a good idea to run with the -onetile option in this case
7354 (to limit each x11vnc to 3 shm segments), or even -noshm to use no shm
7355 segments.
7356
7357
7358 Q-103: Can x11vnc show only a portion of the display? (E.g. for a
7359 special purpose application or a very large screen.)
7360
7361 As of Mar/2005 x11vnc has the "-clip WxH+X+Y" option to select a
7362 rectangle of width W, height H and offset (X, Y). Thus the VNC screen
7363 will be the clipped sub-region of the display and be only WxH in size.
7364 One user used -clip to split up a large Xinerama screen into two more
7365 managable smaller screens.
7366
7367 This also works to view a sub-region of a single application window if
7368 the -id or -sid options are used. The offset is measured from the
7369 upper left corner of the selected window.
7370
7371
7372 Q-104: Does x11vnc support the XRANDR (X Resize, Rotate and
7373 Reflection) extension? Whenever I rotate or resize the screen x11vnc
7374 just seems to crash.
7375
7376 As of Dec/2004 x11vnc supports XRANDR. You enable it with the -xrandr
7377 option to make x11vnc monitor XRANDR events and also trap X server
7378 errors if the screen change occurred in the middle of an X call like
7379 XGetImage. Once it traps the screen change it will create a new
7380 framebuffer using the new screen.
7381
7382 If the connected vnc viewers support the NewFBSize VNC extension
7383 (Windows TightVNC viewer and RealVNC 4.0 windows and Unix viewers do)
7384 then the viewer will automatically resize. Otherwise, the new
7385 framebuffer is fit as best as possible into the original viewer size
7386 (portions of the screen may be clipped, unused, etc.) For these
7387 viewers you can try the -padgeom option to make the region big enough
7388 to hold all resizes and rotations. We have fixed this problem for the
7389 TightVNC Viewer on Unix: SSVNC
7390
7391 If you specify "-xrandr newfbsize" then vnc viewers that do not
7392 support NewFBSize will be disconnected before the resize. If you
7393 specify "-xrandr exit" then all will be disconnected and x11vnc will
7394 terminate.
7395
7396
7397 Q-105: Independent of any XRANDR, can I have x11vnc rotate and/or
7398 reflect the screen that the VNC viewers see? (e.g. for a handheld
7399 whose screen is rotated 90 degrees.)
7400
7401 As of Jul/2006 there is the -rotate option allow this. E.g's: "-rotate
7402 +90", "-rotate -90", "-rotate x", etc.
7403
7404
7405 Q-106: Why is the view in my VNC viewer completely black? Or why is
7406 everything flashing around randomly?
7407
7408 See the next FAQ for a possible explanation.
7409
7410
7411 Q-107: I use Linux Virtual Terminals (VT's) to implement 'Fast User
7412 Switching' between users' sessions (e.g. Betty is on Ctrl-Alt-F7,
7413 Bobby is on Ctrl-Alt-F8, and Sid is on Ctrl-Alt-F1: they use those
7414 keystrokes to switch between their sessions.) How come the view in a
7415 VNC viewer connecting to x11vnc is either completely black or
7416 otherwise all messed up unless the X session x11vnc is attached to is
7417 in the active VT?
7418
7419 This seems to have to do with how applications (the X server processes
7420 in this case) must "play nicely" if they are not on the active VT
7421 (sometimes called VC for virtual console.) That is, they should not
7422 read from the keyboard or mouse or manage the video display unless
7423 they have the active VT. Given that it appears the XGetImage() call
7424 must ultimately retrieve the framebuffer data from the video hardware
7425 itself, it would make sense x11vnc's polling wouldn't work unless the
7426 X session had active control of the VT.
7427
7428 There does not seem to be an easy way to work around this. Even xwd(1)
7429 doesn't work in this case (try it.) Something would need to be done at
7430 a lower level, say in the XFree86/Xorg X server. Also, using the
7431 Shadow Framebuffer (a copy of the video framebuffer is kept in main
7432 memory) does not appear to fix the problem.
7433
7434 If no one is sitting at the workstation and you just want to remotely
7435 switch the VT over to the one associated with your X session (so
7436 x11vnc can poll it correctly), one can use the chvt(1) command, e.g.
7437 "chvt 7" for VT #7.
7438
7439
7440 Q-108: I am using x11vnc where my local machine has "popup/hidden
7441 taskbars" and the remote display where x11vnc runs also has
7442 "popup/hidden taskbars" and they interfere and fight with each other.
7443 What can I do?
7444
7445 When you move the mouse to the edge of the screen where the popups
7446 happen, the taskbars interfere with each other in strange ways. This
7447 sometimes happens where the local machine is GNOME or Mac OS X and the
7448 remote machine is GNOME. Is there a way to temporarily disable one or
7449 both of these magic desktop taskbars?
7450
7451 One x11vnc user suggests: it should be straightforward to right mouse
7452 click on the task bar panel, and uncheck "enable auto-hide" from the
7453 panel properties dialog box. This will make the panel always visible.
7454
7455 Q-109: Help! x11vnc and my KDE screensaver keep switching each other
7456 on and off every few seconds.
7457
7458 This is a new (Jul/2006) problem seen, say, on the version of KDE that
7459 is shipped with SuSE 10.1. It is not yet clear what is causing this...
7460 If you move the mouse through x11vnc the screensaver shuts off like it
7461 should but then a second or two after you stop moving the mouse the
7462 screensaver snaps back on.
7463
7464 This may be a bug in kdesktop_lock. For now the only workaround is to
7465 disable the screensaver. You can try using another one such as
7466 straight xscreensaver (see the instructions here for how to disable
7467 kdesktop_lock.) If you have more info on this or see it outside of KDE
7468 please let us know.
7469
7470 Update: It appears this is due to kdesktop_lock enabling the screen
7471 saver when the Monitor is in DPMS low-power state (e.g. standby,
7472 suspend, or off.) In Nov/2006 the x11vnc -nodpms option was added as a
7473 workaround. Normally it is a good thing that the monitor powers down
7474 (since x11vnc can still poll the framebuffer in this state), but if
7475 you experience the kdesktop_lock problem you can specify the "-nodpms"
7476 option to keep the Monitor out of low power state while VNC clients
7477 are connected. This is basically the same as typing "xset dpms force
7478 on" periodically. (if you don't want to do these things just disable
7479 the screensaver.) Feel free to file a bug against kdesktop_lock with
7480 KDE.
7481
7482 Q-110: I am running the compiz 3D window manager (or beryl, MythTv,
7483 Google Earth, or some other OpenGL app) and I do not get screen
7484 updates in x11vnc.
7485
7486 This appears to be because the 3D OpenGL/GLX hardware screen updates
7487 do not get reported via the XDAMAGE mechanism. So this is a bug in
7488 compiz/beryl or XDAMAGE/Xorg or the (possibly 3rd party) video card
7489 driver.
7490
7491 As a workaround apply the -noxdamage option. As of Feb/2007 x11vnc
7492 will try to autodetect the problem and disable XDAMAGE if is appears
7493 to be missing a lot of updates. But if you know you are using compiz
7494 you might as well always supply -noxdamage. Thanks to this user who
7495 reported the problem and discovered the workaround.
7496
7497 A developer for MiniMyth reports that the 'alphapulse' tag of the
7498 theme G.A.N.T. can also cause problems, and should be avoided when
7499 using VNC.
7500
7501 Please report a bug or complaint to Beryl/Compiz and/or Xorg about
7502 this: running x11vnc with -noxdamage disables a nice improvement in
7503 responsiveness (especially for typing) and also leads to unnecessary
7504 CPU and memory I/O load due to the extra polling.
7505
7506 Update: as of May/2010 NVIDIA may have fixed this problem in their
7507 proprietary drivers. See the NVIDIA Release Notes. (look for
7508 'x11vnc'.)
7509
7510 Q-111: Can I use x11vnc to view my VMWare session remotely?
7511
7512 Yes, since VMWare usually runs as an X application you can view it via
7513 x11vnc in the normal way.
7514
7515 Note that VMWare has several viewing modes:
7516 * Normal X application window (with window manager frame)
7517 * Quick-Switch mode (with no window manager frame)
7518 * Fullscreen mode
7519
7520 The way VMWare does Fullscreen mode on Linux is to display the Guest
7521 desktop in a separate Virtual Terminal (e.g. VT 8) (see this FAQ on
7522 VT's for background.) Unfortunately, this Fullscreen VT is not an X
7523 server. So x11vnc cannot access it (however, see this discussion of
7524 -rawfb for a possible workaround.) x11vnc works fine with "Normal X
7525 application window" and "Quick-Switch mode" because these use X.
7526
7527 Update: It appears the in VMWare 5.x the Fullscreen mode is X, so
7528 x11vnc access does work.
7529
7530 One user reports he left his machine with VMWare in the Fullscreen
7531 mode, and even though his X session wasn't in the active VT, he could
7532 still connect x11vnc to the X session and pass the keystrokes Ctrl-Alt
7533 (typing "blind") to the VMWare X app. This induced VMWare to switch
7534 out of Fullscreen into Normal X mode and he could continue working in
7535 the Guest desktop remotely.
7536
7537
7538 Aside: Sometimes it is convenient (for performance, etc.) to start
7539 VMWare in its own X session using startx(1). This can be used to have
7540 a minimal window manger (e.g. twm or even no window manager), to
7541 improve response. One can also cut the display depth (e.g. to 16bpp)
7542 in this 2nd X session to improve video performance. This 2nd X session
7543 emulates Fullscreen mode to some degree and can be viewed via x11vnc
7544 as long as the VMWare X session is in the active VT.
7545
7546 Also note that with a little bit of playing with "xwininfo -all
7547 -children" output one can extract the (non-toplevel) window-id of the
7548 of the Guest desktop only when VMWare is running as a normal X
7549 application. Then one can export just the guest desktop (i.e. without
7550 the VMWare menu buttons) by use of the -id windowid option. The
7551 caveats are the X session VMWare is in must be in the active VT and
7552 the window must be fully visible, so this mode is not terribly
7553 convenient, but could be useful in some circumstances (e.g. running
7554 VMWare on a very powerful server machine in a server room that happens
7555 to have a video card, (but need not have a monitor, Keyboard or
7556 mouse).)
7557
7558
7559
7560 [Exporting non-X11 devices via VNC]
7561
7562 Q-112: Can non-X devices (e.g. a raw framebuffer) be viewed (and even
7563 controlled) via VNC with x11vnc?
7564
7565 As of Apr/2005 there is support for this. Two options were added:
7566 "-rawfb string" (to indicate the raw frame buffer device, file, etc.
7567 and its parameters) and "-pipeinput command" (to provide an external
7568 program that will inject or otherwise process mouse and keystroke
7569 input.) Some useful -pipeinput schemes, VID, CONSOLE, and UINPUT, have
7570 since been built into x11vnc for convenience.
7571
7572 This non-X mode for x11vnc is somewhat experimental because it is so
7573 removed in scope from the intended usage of the tool. Incomplete
7574 attempt is made to make all of the other options consistent with non-X
7575 framebuffer polling. So all of the X-related options (e.g.
7576 -add_keysyms, -xkb) are just ignored or may cause an error if used. Be
7577 careful applying such an option via remote control.
7578
7579 The format for the -rawfb string is:
7580 -rawfb <type>:<object>@<W>x<H>x<bpp>[-<BPL>][:<R>/<G>/<B>][+<offset>]
7581
7582 There are also some useful aliases (e.g. "console".) Some examples:
7583 -rawfb shm:210337933@800x600x32:ff/ff00/ff0000
7584
7585 -rawfb map:/dev/fb0@1024x768x16
7586
7587 -rawfb map:/tmp/Xvfb_screen0@640x480x8+3232
7588
7589 -rawfb file:/tmp/my.pnm@250x200x24+37
7590
7591 -rawfb file:/dev/urandom@128x128x8
7592
7593 -rawfb snap:/dev/video0@320x240x24 -24to32
7594
7595 -rawfb console
7596
7597 -rawfb vt2
7598
7599 -rawfb video
7600
7601 -rawfb setup:mycmd.sh
7602
7603 So the type can be "shm" for shared memory objects, and "map" or
7604 "file" for file objects. "map" uses mmap(2) to map the file into
7605 memory and is preferred over "file" (that uses the slower lseek(2)
7606 access method.) Only use file if map isn't working. BTW, "mmap" is an
7607 alias for "map" and if you do not supply a type and the file exists,
7608 map is assumed (see the -help output and below for some exceptions to
7609 this.) The "snap:" setting applies the -snapfb option with "file:"
7610 type reading (this is useful for exporting webcams or TV tuner video;
7611 see the next FAQ for more info.)
7612
7613 Also, if the string is of the form "setup:cmd" then cmd is run and the
7614 first line of its output retrieved and used as the rawfb string. This
7615 allows initializing the device, determining WxHxB, etc.
7616
7617 The object will be the numerical shared memory id for the case of shm.
7618 The idea here is some other program has created this shared memory
7619 segment and periodically updates it with new framebuffer data. x11vnc
7620 polls the area for changes. See shmat(2) and ipcs(8) for more info.
7621 The ipcs command will list current shared memory segments on the
7622 system. Sometimes you can snoop on a program's framebuffer it did not
7623 expect you would be polling!
7624
7625 The object will be the path to the regular or character special file
7626 for the cases of map and file. The idea here is that in the case of a
7627 regular file some other program is writing/updating framebuffer image
7628 data to it. In the case of a character special (e.g. /dev/fb0) it is
7629 the kernel that is "updating" the framebuffer data.
7630
7631 In most cases x11vnc needs to be told the width, height, and number of
7632 bits per pixel (bpp) of the framebuffer. This is the @WxHxB field. For
7633 the case of the Linux framebuffer device, /dev/fb0, the fbset(8) may
7634 be of use (but may not always be accurate for what is currently
7635 viewable.) In general some guessing may be required, especially for
7636 the bpp. Update: in "-rawfb console" mode x11vnc will use the linuxfb
7637 API to try to guess (it is still not always accurate.) Also try
7638 "-rawfb vtN" (on x11vnc 0.9.7 and later) for the N-th Linux text
7639 console (aka virtual terminal.) If the number of Bytes Per Line is not
7640 WxHxB/8 (i.e. the framebuffer lines are padded) you can specify this
7641 information after WxHxB via "-BPL", e.g. @800x600x16-2048
7642
7643 Based on the bpp x11vnc will try to guess the red, green, and blue
7644 masks (these indicate which bits correspond to each color.) It if gets
7645 it wrong you can specify them manually via the optional ":R/G/B"
7646 field. E.g. ":0xff0000/0x00ff00/0x0000ff" (this is the default for
7647 32bpp.)
7648
7649 Finally, the framebuffer may not begin at the beginning of the memory
7650 object, so use the optional "+offset" parameter to indicate where the
7651 framebuffer information starts. So as an example, the Xvfb virtual
7652 framebuffer has options -shmem and -fbdir for exporting its virtual
7653 screen to either shm or a mapped file. The format of these is XWD and
7654 so the initial header should be skipped. BTW, since XWD is not
7655 strictly RGB the view will only be approximate, but usable. Of course
7656 for the case of Xvfb x11vnc can poll it much better via the X API, but
7657 you get the idea.
7658
7659 By default in -rawfb mode x11vnc will actually close any X display it
7660 happened to open. This is basically to shake out bugs (e.g it will
7661 crash rather than mysteriously interacting with the X display.) If you
7662 want x11vnc to keep the X display open while polling the raw
7663 framebuffer prefix a "+" sign at the beginning of the string (e.g.
7664 +file:/dev/urandom@64x64x8) This could be convenient for keeping the
7665 remote control channel active (it uses X properties.) The "-connect
7666 /path/to/file" mechanism could also be used for remote control to
7667 avoid the X property channel. Rare usage, but if you also supply
7668 -noviewonly in this "+" mode then the mouse and keyboard input are
7669 still sent to the X display, presumably for doing something amusing
7670 with /dev/fb...
7671
7672 Interesting Devices:. Here are some aliases for interesting device
7673 files that can be polled via -rawfb:
7674 -rawfb console /dev/fb0 Linux Console
7675 -rawfb vt2 /dev/vcsa2 Linux Console (e.g. virtual ter
7676 minal #2)
7677 -rawfb video /dev/video0 Video4Linux Capture device
7678 -rawfb rand /dev/urandom Random Bytes
7679 -rawfb null /dev/zero Zero Bytes (black screen)
7680
7681 The Linux console, /dev/fb0, etc needs to have its driver enabled in
7682 the kernel. Some of the drivers are video card specific and
7683 accelerated. The console is either the Text consoles (usually
7684 tty1-tty6), or X graphical display (usually starting at tty7.) In
7685 addition to the text console other graphical ones may be viewed and
7686 interacted with as well, e.g. DirectFB or SVGAlib apps, VMWare non-X
7687 fullscreen, or Qt-embedded apps (PDAs/Handhelds.) By default the
7688 pipeinput mechanisms UINPUT and CONSOLE (keystrokes only) are
7689 automatically attempted in this mode under "-rawfb console".
7690
7691 The Video4Linux Capture device, /dev/video0, etc is either a Webcam or
7692 a TV capture device and needs to have its driver enabled in the
7693 kernel. See this FAQ for details. If specified via "-rawfb Video" then
7694 the pipeinput method "VID" is applied (it lets you change video
7695 parameters dynamically via keystrokes.)
7696
7697 The last two, /dev/urandom and /dev/zero are just for fun, but are
7698 also useful in testing.
7699
7700
7701 All of the above -rawfb options are just for viewing the raw
7702 framebuffer (although some of the aliases do imply keystroke and mouse
7703 pipeinput methods.) That may be enough for certain applications of
7704 this feature (e.g. suppose a video camera mapped its framebuffer into
7705 memory and you just wanted to look at it via VNC.)
7706 To handle the pointer and keyboard input from the viewer users the
7707 "-pipeinput cmd" option was added to indicate a helper program to
7708 process the user input. The input is streamed to it and looks
7709 something like this:
7710 Pointer 1 205 257 0 None
7711 Pointer 1 198 253 0 None
7712 Pointer 1 198 253 1 ButtonPress-1
7713 Pointer 1 198 253 0 ButtonRelease-1
7714 Pointer 1 198 252 0 None
7715 Keysym 1 1 119 w KeyPress
7716 Keysym 1 0 119 w KeyRelease
7717 Keysym 1 1 65288 BackSpace KeyPress
7718 Keysym 1 0 65288 BackSpace KeyRelease
7719 Keysym 1 1 112 p KeyPress
7720 Keysym 1 0 112 p KeyRelease
7721
7722 Run "-pipeinput tee:/bin/cat" to get a description of the format. Note
7723 that the -pipeinput option is independent of -rawfb mode and so may
7724 have some other interesting uses. The "tee:" prefix means x11vnc will
7725 both process the user input and pipe it to the command. The default is
7726 to just pipe it to the -pipeinput command.
7727
7728 Note the -pipeinput helper program could actually control the raw
7729 framebuffer. In the libvncserver CVS a simple example program
7730 x11vnc/misc/slide.pl is provided that demonstrates a simple jpeg
7731 "slideshow" application. Also the builtin "-pipeinput VID" mode does
7732 this for webcams and TV capture devices (/dev/video0.)
7733
7734 The -pipeinput program is run with these environment variables set:
7735 X11VNC_PID, X11VNC_PROG, X11VNC_CMDLINE, X11VNC_RAWFB_STR to aid its
7736 knowing what is up.
7737
7738 Another example provided in libvncserver CVS is a script to inject
7739 keystrokes into the Linux console (e.g. the virtual consoles:
7740 /dev/tty1, /dev/tty2, etc) in x11vnc/misc/vcinject.pl. It is based on
7741 the vncterm/LinuxVNC.c program also in the libvncserver CVS. So to
7742 view and interact with VT #2 (assuming it is the active VT) one can
7743 run something like:
7744 x11vnc -rawfb map:/dev/fb0@1024x768x16 -pipeinput './vcinject.pl 2'
7745
7746 This assumes your Linux framebuffer device (/dev/fb0) is properly
7747 configured. See fbset(8) and other documentation. Try
7748 "file:/dev/fb0@WxHxB" as a last resort. Starting with x11vnc 0.8.1,
7749 the above VT injection is built in, as well as WxHxB determination.
7750 Just use something like:
7751 x11vnc -rawfb console
7752
7753 this will try to guess the active virtual console (via /dev/tty0) and
7754 also the /dev/fb0 WxHxB and rgb masks automatically. Use, e.g.,
7755 "-rawfb console3" to force the VT number. This input method can be
7756 used generally via "-pipeinput CONSOLE". Also starting with x11vnc
7757 0.8.2 the "-pipeinput UINPUT" mode is tried first (it does both
7758 keyboard and mouse input) and then falls back to CONSOLE mode if it is
7759 not available. Here is the -help output for this mode:
7760
7761 If the rawfb string begins with "console" the framebuffer device
7762 /dev/fb0 is opened (this requires the appropriate kernel modules to
7763 be installed) and so is /dev/tty0. The latter is used to inject
7764 keystrokes (not all are supported, but the basic ones are.) You
7765 will need to be root to inject keystrokes. /dev/tty0 refers to the
7766 active VT, to indicate one explicitly, use "console2", etc. using
7767 the VT number.
7768
7769 If the Linux version seems to be 2.6 or later and the "uinput"
7770 module appears to be present, then the uinput method will be used
7771 instead of /dev/ttyN. uinput allows insertion of BOTH keystrokes
7772 and mouse input and so it preferred when accessing graphical (e.g.
7773 Qt-embedded) linux console apps. See -pipeinput UINPUT below for
7774 more information on this mode (you may want to also use the
7775 -nodragging and -cursor none options.) Use "console0", etc or
7776 -pipeinput CONSOLE to force the /dev/ttyN method.
7777
7778 Note you can change VT remotely using the chvt(1) command.
7779 Sometimes switching out and back corrects the framebuffer state.
7780
7781 To skip input injecting entirely use "consolex".
7782
7783 The string "/dev/fb0" (1, etc) can be used instead of "console".
7784 This can be used to specify a different framebuffer device, e.g.
7785 /dev/fb1. As a shortcut the "/dev/" can be dropped. If the name is
7786 something nonstandard, use "console:/dev/foofb"
7787
7788 If you do not want x11vnc to guess the framebuffer's WxHxB and
7789 masks automatically (sometimes the kernel gives inaccurate
7790 information), specify them with a @WxHxB at the end of the string.
7791
7792 The above is just an example of what can be done. Note that if you
7793 really want to view and interact with the Linux Text console it is
7794 better to use the more accurate and faster LinuxVNC program. The
7795 advantage x11vnc -rawfb might have is that it can allow interaction
7796 with a non-text application, e.g. one based on SVGAlib or Qt-embedded
7797 Also, for example the VMWare Fullscreen mode is actually viewable
7798 under -rawfb and can be interacted with if uinput is enabled.
7799
7800 If the Linux uinput driver is available then full keystroke and mouse
7801 input into the Linux console can be performed. You may be able to
7802 enable uinput via commands like these:
7803 modprobe uinput
7804 mknod /dev/input/uinput c 10 223
7805
7806 The -rawfb and -pipeinput features are intended to help one creatively
7807 "get out of a jam" (say on a legacy or embedded device) where X is
7808 absent or doesn't work properly. Feedback and bug reports are welcome.
7809 For more control and less overhead use libvncserver in your own C
7810 program that passes the framebuffer to libvncserver.
7811
7812
7813 Q-113: Can I export the Linux Console (Virtual Terminals) via VNC
7814 using x11vnc?
7815
7816 Yes, you may need to be root to access the devices that make up the
7817 linux console.
7818
7819 To access the active Linux console via the computer's framebuffer try
7820 something like:
7821 x11vnc -rawfb console
7822 x11vnc -rawfb console2
7823
7824 These will try to access the framebuffer through /dev/fb (or /dev/fb0,
7825 etc.) and if it succeeds it will show any text or graphics that is
7826 currently displayed. Keystrokes will be injected via the device
7827 /dev/tty0 (to force an explicit virtual terminal append a number, e.g.
7828 "console2" to select /dev/tty2.)
7829
7830 If your Linux system does not have a framebuffer device (/dev/fb) you
7831 can get one by adding, e.g., vga=0x31B boot parameter. This enables
7832 the VGA framebuffer device at 1280x1024x24. 0x317 gives 1024x768x16,
7833 etc. You can also enable a Linux framebuffer device by modprobing a
7834 framebuffer driver specific to your video card.
7835
7836 Note that this "-rawfb console" mode shows the contents of the
7837 hardware framebuffer, and so will show whatever is on the screen. It
7838 has no concept of Virtual Terminals WRT what there is to view, it
7839 always shows the active virtual terminal.
7840
7841 Another mode is specific to the Linux text Virtual Terminals, it shows
7842 their text and colors (but no graphics) regardless of whether it is
7843 the active VT or not. It is available on x11vnc 0.9.7 and later.
7844 Enable this mode like this:
7845 x11vnc -rawfb vt
7846 x11vnc -rawfb vt2
7847
7848 The former will select the active one, the latter the 2nd VT. x11vnc
7849 implements this mode by opening the current console text file
7850 "/dev/vcsa2" instead of "/dev/fb". In this way it provides the basic
7851 functionality of the LibVNCServer LinuxVNC program.
7852
7853 The vt mode can be a useful way to try to get a machine's X server
7854 working remotely, e.g. you edit /etc/X11/xorg.conf and then type
7855 startx (or similar, e.g. gdm) in the virtual terminal. A 2nd x11vnc
7856 could be used to see if the X server is now working correctly.
7857
7858 Q-114: Can I export via VNC a Webcam or TV tuner framebuffer using
7859 x11vnc?
7860
7861 Yes, this is possible to some degree with the -rawfb option. There is
7862 no X11 involved: snapshots from the video capture device are used for
7863 the screen image data. See the previous FAQ on -rawfb for background.
7864 For best results, use x11vnc version 0.8.1 or later.
7865
7866 Roughly, one would do something like this:
7867 x11vnc -rawfb snap:/dev/video@320x240x32
7868
7869 This requires that the system allows simple read(2) access to the
7870 video device. This is true for video4Linux on Linux kernel 2.6 and
7871 later (it won't work for 2.4, you'll need a separate program to
7872 snapshot to a file that you point -rawfb to; ask me if it is not clear
7873 what to do.)
7874
7875 The "snap:" enforces -snapfb mode which appears to be necessary. The
7876 read pointer for video capture devices cannot be repositioned (which
7877 would be needed for scanline polling), but you can read a full frame
7878 of data from the device.
7879
7880 On Linux, if the Video4Linux API is present or the v4l-info(1) program
7881 (related to xawtv) exists in in PATH, then x11vnc can be instructed to
7882 try it to determine the -rawfb WxHxB parameters for you automatically.
7883 In this case one would just type:
7884 x11vnc -rawfb video
7885
7886 or "-rawfb video1" for the 2nd video device, etc.
7887
7888 x11vnc has also been extended to use the Video4Linux API over v4l-info
7889 if it is available at build time. This enables setting parameters
7890 (e.g. size and brightness) via x11vnc. See the description below.
7891 Without Video4Linux you will need to initialize the settings of the
7892 video device using something like xawtv or spcaview (and then hope the
7893 settings persist until x11vnc reopens the device.)
7894
7895 Many video4linux drivers tend to set the framebuffer to be 24bpp (as
7896 opposed to 32bpp.) Since this can cause problems with VNC viewers,
7897 etc, the -24to32 option will be automatically imposed when in 24bpp.
7898
7899 Note that by its very nature, video capture involves rapid change in
7900 the framebuffer. This is especially true for cameras where slight
7901 wavering in brightness is always happening. This can lead to much
7902 network bandwidth consumption for the VNC traffic and also local CPU
7903 and I/O resource usage. You may want to experiment with "dialing down"
7904 the framerate via the -wait, -slow_fb, or -defer options. Decreasing
7905 the window size and bpp also helps.
7906
7907
7908 Setting Camera/Tuner parameters via x11vnc:
7909
7910 There is also some support for setting parameters of the capture
7911 device. This is done via "-rawfb video:<settings>". This could be
7912 useful for unattended startup at boottime, etc. Here is the -help
7913 description:
7914
7915 A more sophisticated video device scheme allows initializing the
7916 device's settings using:
7917
7918 -rawfb video:<settings>
7919
7920 The prefix could also be, as above, e.g. "video1:" to specify the
7921 device file. The v4l API must be available for this to work.
7922 Otherwise, you will need to try to initialize the device with an
7923 external program, e.g. xawtv, spcaview, and hope they persist when
7924 x11vnc re-opens the device.
7925
7926 <settings> is a comma separated list of key=value pairs. The
7927 device's brightness, color, contrast, and hue can be set to
7928 percentages, e.g. br=80,co=50,cn=44,hu=60.
7929
7930 The device filename can be set too if needed (if it does not start
7931 with "video"), e.g. fn=/dev/qcam.
7932
7933 The width, height and bpp of the framebuffer can be set via, e.g.,
7934 w=160,h=120,bpp=16.
7935
7936 Related to the bpp above, the pixel format can be set via the
7937 fmt=XXX, where XXX can be one of: GREY, HI240, RGB555, RGB565,
7938 RGB24, and RGB32 (with bpp 8, 8, 16, 16, 24, and 32 respectively.)
7939 See http://www.linuxtv.org for more info (V4L api.)
7940
7941 For TV/rf tuner cards one can set the tuning mode via tun=XXX where
7942 XXX can be one of PAL, NTSC, SECAM, or AUTO.
7943
7944 One can switch the input channel by the inp=XXX setting, where XXX
7945 is the name of the input channel (Television, Composite1, S-Video,
7946 etc.) Use the name that is in the information about the device that
7947 is printed at startup.
7948
7949 For input channels with tuners (e.g. Television) one can change
7950 which station is selected by the sta=XXX setting. XXX is the
7951 station number. Currently only the ntsc-cable-us (US cable)
7952 channels are built into x11vnc. See the -freqtab option below to
7953 supply one from xawtv. If XXX is greater than 500, then it is
7954 interpreted as a raw frequency in KHz.
7955
7956 Example:
7957
7958 -rawfb video:br=80,w=320,h=240,fmt=RGB32,tun=NTSC,sta=47
7959
7960 one might need to add inp=Television too for the input channel to
7961 be TV if the card doesn't come up by default in that one.
7962
7963 Note that not all video capture devices will support all of the
7964 above settings.
7965
7966 See the -pipeinput VID option below for a way to control the
7967 settings through the VNC Viewer via keystrokes.
7968
7969 As above, if you specify a "@WxHxB..." after the <settings> string
7970 they are used verbatim: the device is not queried for the current
7971 values. Otherwise the device will be queried.
7972
7973 Also, if you supply the "-pipeinput VID" (or use "-rawfb Video")
7974 option you can control the settings to some degree via keystroke
7975 mappings, e.g. B to increase the brightness or Up arrow to change the
7976 TV station:
7977
7978 For "-pipeinput VID" and you are using the -rawfb for a video
7979 capture device, then an internal list of keyboard mappings is used
7980 to set parameters of the video. The mappings are:
7981
7982 "B" and "b" adjust the brightness up and down.
7983 "H" and "h" adjust the hue.
7984 "C" and "c" adjust the colour.
7985 "N" and "n" adjust the contrast.
7986 "S" and "s" adjust the size of the capture screen.
7987 "I" and "i" cycle through input channels.
7988 Up and Down arrows adjust the station (if a tuner)
7989 F1, F2, ..., F6 will switch the video capture pixel
7990 format to HI240, RGB565, RGB24, RGB32, RGB555, and
7991 GREY respectively. See -rawfb video for details.
7992
7993 See also the -freqtab option to supply your own xawtv channel to
7994 frequency mappings for your country (only ntsc-cable-us is built into
7995 x11vnc.)
7996
7997
7998 Q-115: Can I connect via VNC to a Qt-embedded/Qt-enhanced/Qtopia
7999 application running on my handheld, cell phone, or PC using the Linux
8000 console framebuffer (i.e. not X11)?
8001
8002 Yes, the basic method for this is the -rawfb scheme where the Linux
8003 console framebuffer (usually /dev/fb0) is polled and the uinput driver
8004 is used to inject keystrokes and mouse input. Often you will just have
8005 to type:
8006 x11vnc -rawfb console
8007
8008 (you may need to enable the uinput driver on the system via "modprobe
8009 uinput; mknod /dev/input/uinput c 10 223") If this does not find the
8010 correct frame buffer properties figure them out or guess them and use
8011 something like:
8012 x11vnc -rawfb /dev/fb0@640x480x16
8013
8014 Also, to force usage of the uinput injection method use "-pipeinput
8015 UINPUT". See the -pipeinput description for tunable parameters, etc.
8016
8017 One problem with the x11vnc uinput scheme is that it cannot guess the
8018 mouse motion "acceleration" used by the windowing application (e.g.
8019 QWS or X11.) For X11 and Qt-embedded the acceleration is usually 2
8020 (i.e. a dx of 1 from the mouse yields a 2 pixel displacement of the
8021 mouse cursor.) The default x11vnc uses is 2, since that is often used.
8022 However for one Qt-embedded system we needed to do:
8023 x11vnc -rawfb console -pipeinput UINPUT:accel=4.0
8024
8025 to get reasonable positioning of the mouse.
8026
8027 Even with the correct acceleration setting there is still some drift
8028 (probably because of the mouse threshold where the acceleration kicks
8029 in) and so x11vnc needs to reposition the cursor from 0,0 about 5
8030 times a second. See the -pipeinput UINPUT option for tuning parameters
8031 that can be set (there are some experimental thresh=N tuning
8032 parameters as well)
8033
8034 Currently, one can expect mouse input to be a little flakey. All in
8035 all, the Linux framebuffer input mechanism for Qt-embedded framebuffer
8036 apps is not perfect, but it is usable.
8037
8038 If you need to create a smaller x11vnc binary for a handheld
8039 environment be sure to run strip(1) on it and also consider
8040 configuring with, e.g. "env CPPFLAGS='-DSMALL_FOOTPRINT=1' ./configure
8041 ..." to remove rarely used features and large texts (use 2 or 3
8042 instead of 1 to remove more.) Currently (Jul/2006) this can lower the
8043 size of the x11vnc from 1.1MB to 0.6-0.7MB.
8044
8045 The x11vnc uinput method applies to nearly anything on the Linux
8046 framebuffer console, not just Qt-embedded/Qtopia. DirectFB, SDL using
8047 fbcon driver, SVGAlib applications can also be viewed and interacted
8048 with. Even a Linux X session can be viewed and interacted with without
8049 using X11 (and x11vnc does not have to terminate when the X server
8050 restarts!) The Linux Text consoles (F1-F6) also work.
8051
8052 Note that Qt-embedded supplies its own VNC graphics driver, but it
8053 cannot do both the Linux console framebuffer and VNC at the same time,
8054 which is often what is desired from VNC.
8055
8056 Update: We are finding some setups like Qtopia on the IPAQ do not
8057 allow mouse input via uinput. Please help us debug this problem by
8058 trying x11vnc on your device and letting us know what does and does
8059 not work. See the next FAQ for a possible workaround for touchscreens.
8060
8061
8062 Q-116: How do I inject touch screen input into an
8063 Qt-embedded/Qt-enhanced/Qtopia cell phone such as openmoko/qtmoko Neo
8064 Freerunner?
8065
8066 The qtmoko project does not use X11 for the graphical display.
8067 Unfortunately the Linux uinput method described in the previous FAQ
8068 does not work because Qt is using TSLIB (touch screen library) to
8069 process the input and it only reads from one device (often
8070 /dev/input/event1) and not from the new UINPUT device that x11vnc
8071 creates (under -pipeinput UINPUT)
8072
8073 So something else needs to be done. It was discovered that by simply
8074 writing the touchscreen events directly to /dev/input/event1 then
8075 input can be injected into the system. There is no x11vnc builtin mode
8076 for this yet (until we understand it better), but there is a working
8077 script provided in x11vnc/misc/qt_tslib_inject.pl. So one could use it
8078 this way for example:
8079 x11vnc ... -rawfb console -pipeinput path/to/qt_tslib_inject.pl -env INJECT_O
8080 PTIONS=clickonly,cal=/etc/pointercal
8081
8082 Read the script for how to enable other options and what the above
8083 options mean (e.g. /etc/pointercal contains TSLIB's calibration
8084 parameters and are necessary to achieve accurate pointing.)
8085
8086 The x11vnc/misc/qt_tslib_inject.pl script can potentially be modified
8087 to handle other devices where the uinput method fails. It could also
8088 be modified to create 'hot keys', etc.
8089
8090 Please let us know how things go if you try this out; there is much to
8091 learn about synthetic input injection in handhelds and cell phones. As
8092 we learn more we can develop a builtin x11vnc mode for this sort of
8093 injection.
8094
8095 Update Dec/2010: There is experimental built-in UINPUT support in the
8096 x11vnc development tarball for qtmoko with touchpad managed by tslib.
8097 See -pipeinput UINPUT for more info. Here is an example:
8098 x11vnc -rawfb console -pipeinput UINPUT:touch,tslib_cal=/etc/pointercal,dire
8099 ct_abs=/dev/input/event1,nouinput,dragskip=3
8100
8101
8102 Q-117: Now that non-X11 devices can be exported via VNC using x11vnc,
8103 can I build it with no dependencies on X11 header files and libraries?
8104
8105 Yes, as of Jul/2006 x11vnc enables building for -rawfb only support.
8106 Just do something like when building:
8107 ./configure --without-x (plus any other flags)
8108 make
8109
8110 You can then test via "ldd x11vnc" that the binary does not depend on
8111 libX11.so, etc. See the previous FAQ's for non-X11 framebuffer usage.
8112 If you use this for an interesting non-X11 application please let us
8113 know what you did.
8114
8115
8116 Q-118: How do I cross compile x11vnc for a different architecture than
8117 my Linux i386 or amd64 PC?
8118
8119 You will need a cross-compiling toolchain. Perhaps your distro
8120 provides these or you can find a HOWTO for your distro. We found a
8121 nice one at qtmoko.org for building armel binaries on Debian Linux
8122 i386 machines. It includes most of the libraries that x11vnc needs. We
8123 use that example here.
8124
8125 We ran this script to set PATH, configure, and build:
8126 #!/bin/sh
8127
8128 # toolchain from: qtmoko-debian-toolchain-armv4t-eabi.tar.gz
8129
8130 export PATH=/opt/toolchains/arm920t-eabi/bin:$PATH
8131
8132 env CC=arm-linux-gcc ./configure --host=arm-linux --without-avahi
8133
8134 make
8135
8136 arm-linux-strip ./x11vnc/x11vnc
8137 ls -l ./x11vnc/x11vnc
8138
8139 Note we had to include --without-avahi due to lack of
8140 libavahi-client.so.3 supplied by the toolchain we used. One would need
8141 to add it if it was desired on the target machine. We also stripped
8142 the binary to make it smaller.
8143
8144 For an embedded system one may also want to add --without-x if the
8145 embedded system does not use X11 and the -rawfb mechanism must be
8146 used.
8147
8148
8149 Q-119: Does x11vnc support Mac OS X Aqua/Quartz displays natively
8150 (i.e. no X11 involved)?
8151
8152 Yes, since Nov/2006 in the development tree (x11vnc-0.8.4 tarball)
8153 there is support for native Mac OS X Aqua/Quartz displays using the
8154 -rawfb mechanism described above. The mouse and keyboard input is
8155 achieved via Mac OS X API's.
8156
8157 So you can use x11vnc as an alternative to OSXvnc (aka Vine Server),
8158 or Apple Remote Desktop (ARD). Perhaps there is some x11vnc feature
8159 you'd like to use on Mac OS X, etc. For a number of activities (e.g.
8160 window drags) it seems to be faster than OSXvnc.
8161
8162 Notes:
8163
8164 X11: x11vnc will also work (as it has for years) with a X11 server
8165 (XDarwin) running on Mac OS X (people often install this software to
8166 display remote X11 apps on their Mac OS X system, or use some old
8167 favorites locally such as xterm.) However in this case x11vnc will
8168 only work reasonably in single window -id windowid mode (and the
8169 window may need to have mouse focus.)
8170
8171 If you do not have the DISPLAY env. variable set, x11vnc will assume
8172 native Aqua/Quartz on Mac OS X, however if DISPLAY is set it will
8173 assume an X11 connection. Use "-rawfb console" to force the native
8174 display (or unset DISPLAY.)
8175
8176 Update: Leopard sets DISPLAY by default in all sessions. Since it
8177 starts with the string "/tmp/" x11vnc will use that to know if it
8178 should ignore it. Use "-display :0.0" to force it.
8179
8180 Building: If you don't have the X11 build and runtime packages
8181 installed you will need to build it like this:
8182 (cd to the e.g. x11vnc-0.9, source directory)
8183 ./configure --without-x
8184 make
8185
8186 Win2VNC/x2vnc: One handy use is to use the -nofb mode to redirect
8187 mouse and keyboard input to a nearby Mac (i.e. one to the side of your
8188 desk) via x2vnc or Win2VNC. See this FAQ for more info.
8189
8190 Options: Here are the Mac OS X specific x11vnc options:
8191 -macnodim For the native Mac OS X server, disable dimming.
8192 -macnosleep For the native Mac OS X server, disable display sleep
8193 .
8194 -macnosaver For the native Mac OS X server, disable screensaver.
8195 -macnowait For the native Mac OS X server, do not wait for the
8196 user to switch back to his display.
8197 -macwheel n For the native Mac OS X server, set the mouse wheel
8198 speed to n (default 5.)
8199 -macnoswap For the native Mac OS X server, do not swap mouse
8200 buttons 2 and 3.
8201 -macnoresize For the native Mac OS X server, do not resize or rese
8202 t
8203 the framebuffer even if it is detected that the scree
8204 n
8205 resolution or depth has changed.
8206 -maciconanim n For the native Mac OS X server, set n to the number
8207 of milliseconds that the window iconify/deiconify
8208 animation takes. In -ncache mode this value will be
8209 used to skip the animation if possible. (default 400)
8210 -macmenu For the native Mac OS X server, in -ncache client-sid
8211 e
8212 caching mode, try to cache pull down menus (not perfe
8213 ct
8214 because they have animated fades, etc.)
8215
8216 PasteBoard/Clipboard: There is a bug that the Clipboard (called
8217 PasteBoard on Mac it appears) exchange will not take place unless
8218 x11vnc was started from inside the Aqua display (e.g. started inside a
8219 Terminal app window.) Otherwise it cannot connect to the PasteBoard
8220 server. So Clipboard exchange won't work for our standard "ssh in"
8221 startup scheme.
8222
8223 Hopefully this deficiency can be removed, but until then for Clipboard
8224 exchange to work you will need to start x11vnc inside the desktop
8225 session (i.e. either start it running before you leave, or start up a
8226 2nd x11vnc inside from a 1st one started outside, or use the apple
8227 script below)
8228
8229 Here also is a osascript trick that seems to work (it opens the
8230 Terminal app and instructs it to start x11vnc):
8231
8232 #!/bin/sh
8233 #
8234 # start_x11vnc: start x11vnc in a Terminal window
8235 # (this will allow Clipboard/Pasteboard exchange to work)
8236
8237 tmp=/tmp/start_x11vnc.$$
8238
8239 cat > $tmp <<END
8240
8241 tell application "Terminal"
8242 activate
8243 do script with command "$HOME/x11vnc -rfbauth .vnc/passwd -ssl SAVE"
8244 end tell
8245
8246 END
8247
8248 osascript $tmp
8249 rm -f $tmp
8250
8251 where you should customize the x11vnc command line to your needs and
8252 the full path to the binary. Save it in a file e.g. "start_x11vnc" and
8253 then after you SSH in just type "./start_x11vnc" (or have ssh run the
8254 command for you.) Then once you are connected via VNC, iconify the
8255 Terminal windows (you can't delete them since that will kill x11vnc.)
8256
8257 Update Aug/2010: A user reports the following useful information:
8258 This is not a problem on Mac OS X 10.6.x (Snow Leopard) when connecting
8259 via ssh to start x11vnc. And, on Mac OS X 10.5.x (Leopard), the problem
8260 can be permanently eliminated by doing this:
8261
8262
8263 sudo /usr/libexec/PlistBuddy -c 'delete :LimitLoadToSessionType' \
8264 -c 'add :LimitLoadToSessionType string Background' \
8265 /System/Library/LaunchAgents/com.apple.pboard.plist
8266 # ignore any 'Delete: Entry, ":LimitLoadToSessionType", Does Not Exist' message
8267
8268 and then restarting (yes, you must restart not just log off). But
8269 ONLY do that for Mac OS X 10.5.x and NOT for 10.6.x (which doesn't
8270 need it anyway).
8271
8272 We recently got access to a MacOSX 10.6.4 (Snow Leopard) macbook and
8273 have confirmed that the above is correct.
8274
8275
8276 Q-120: Can x11vnc be used as a VNC reflector/repeater to improve
8277 performance for the case of a large number of simultaneous VNC viewers
8278 (e.g. classroom broadcasting or a large demo)?
8279
8280 Yes, as of Feb/2007 there is the "-reflect host:N" option to connect
8281 to the VNC server "host:N" (either another x11vnc or any other VNC
8282 server) and re-export it. VNC viewers then connect to the x11vnc(s)
8283 running -reflect.
8284
8285 The -reflect option is the same as: "-rawfb vnc:host:N". See the
8286 -rawfb description under "VNC HOST" for more details.
8287
8288 You can replace "host:N" with "listen" or "listen:port" for reverse
8289 connections.
8290
8291 One can set up a number of such reflectors/repeaters to spread the
8292 resource usage around, e.g.:
8293 C -------<-------|
8294 C -------<-------|
8295 C -------<-------|---- R -----|
8296 C -------<-------| |
8297 C -------<-------| |
8298 |
8299 C -------<-------| |
8300 C -------<-------| |
8301 C -------<-------|---- R -----|
8302 C -------<-------| |
8303 C -------<-------| |
8304 |====== S
8305 C -------<-------| |
8306 C -------<-------| |
8307 C -------<-------|---- R -----|
8308 C -------<-------| |
8309 C -------<-------| |
8310 |
8311 C -------<-------| |
8312 C -------<-------| |
8313 C -------<-------|---- R -----|
8314 C -------<-------|
8315 C -------<-------|
8316
8317 Where "S" is the original VNC Server, "C" denote VNC viewer clients,
8318 and "R" denotes an x11vnc running -reflect to "S".
8319
8320 Ideally, a client "C" will be fairly close network-wise to its "R". It
8321 is fine to run the "R" on the same machine as one of its "C's". A nice
8322 setup for a large, (e.g. 64-128) viewer classroom broadcast case would
8323 be to run R's on areas isolated by network switches, e.g. one R per
8324 switch.
8325
8326 In an extreme case (e.g. 1000 viewers) one might actually need a 2nd
8327 layer of R's in the tree. If you try something like that let us know!
8328
8329 There are many resource savings in doing something like the above. The
8330 first obvious one is network bandwidth savings. Another is less CPU
8331 load on "S" since it handles many fewer simultaneous connections.
8332 Also, if there are a few clients C on very slow links, their presence
8333 does not slow down every other client, just the clients on their "R".
8334 One way a slow client affects things is if there are some large
8335 framebuffer writes (e.g. jpeg image region) then the repeater may
8336 block waiting for that large write to finish before going onto the
8337 next client (however, if the write is small enough, the kernel will
8338 buffer it and the server can go on to service the next client.)
8339
8340 The x11vnc -reflect implementation uses the libvncclient library in
8341 the LibVNCServer project to handle the connection to "S". It is not
8342 currently very efficient since it simply does its normal framebuffer
8343 polling scheme on the libvncclient framebuffer (which it then
8344 re-exports via VNC to its clients C.) However, CopyRect and
8345 CursorShape encodings are preserved in the reflection and that helps.
8346 Dragging windows with the mouse can be a problem (especially if S is
8347 not doing wireframing somehow, consider -nodragging if the problem is
8348 severe) For a really fast reflector/repeater it would have to be
8349 implemented from scratch with performance in mind. See these other
8350 projects:
8351 http://sourceforge.net/projects/vnc-reflector/,
8352 http://www.tightvnc.com/projector/ (closed source?),
8353
8354
8355 Automation via Reverse Connections: Instead of having the R's
8356 connect directly to S and then the C's connect directly to the R they
8357 should use, some convenience can be achieved by using reverse
8358 connections (the x11vnc ""-connect host1,host2,..." option.) Suppose
8359 all the clients "C" are started up in Listen mode:
8360 client1> vncviewer -listen
8361 client2> vncviewer -listen
8362 client3> vncviewer -listen
8363 ...
8364 client64> vncviewer -listen
8365
8366 (e.g. client1> is the cmdline prompt on machine client1 ... etc) and
8367 all the repeaters R are started like this:
8368 repeater1> x11vnc -reflect listen -connect client1,client2,...client8
8369 repeater2> x11vnc -reflect listen -connect client9,client10,...client16
8370 ...
8371 repeater8> x11vnc -reflect listen -connect client57,client58,...client64
8372
8373 and finally the main server is started to kick the whole thing into
8374 motion:
8375 vncserver> x11vnc -display :0 -connect repeater1,repeater2,...repeater8
8376
8377 (or instruct a non-x11vnc VNC server to reverse connect to the
8378 repeaters.) For a classroom broadcasting setup one might have the
8379 first two sets of commands start automatically at bootup or when
8380 someone logs in, and then start everything up with the S server. One
8381 may even be able to script the forward connection bootstrap case, let
8382 us know what you did. A really nice thing would be some sort of
8383 auto-discovery of your repeater, etc...
8384
8385 Q-121: Can x11vnc be used during a Linux, Solaris, etc. system
8386 Installation so the Installation can be done remotely?
8387
8388 This can be done, but it doesn't always work because it depends on how
8389 the OS does its install. We have to "sneak in" somehow. Note that some
8390 OS's have a remote install (ssh etc.) built in and so you might want
8391 to use that instead.
8392
8393 Usually the OS install will have to be a network-install in order to
8394 have networking up during the install. Otherwise, you may have a
8395 (slim) chance to configure the networking manually (ifconfig(8) and
8396 route(8).)
8397
8398 To avoid library dependencies problems in the typical minimal (e.g.
8399 busybox) installation OS it is a good idea to build a statically
8400 linked x11vnc binary. A way that often works is to do a normal build
8401 and then paste the final x11vnc link line into a shell script. Then
8402 change the "gcc" to "gcc -static" and run the shell script. You may
8403 need to disable features (e.g. "--without-xfixes") if there is not a
8404 static library for the feature available. You may also need to add
8405 extra link options (e.g. "-lXrender") to complete library dependencies
8406 manually.
8407
8408 Let's call the binary x11vnc.static. Place it on a webserver
8409 somewhere. It may be possible to retrieve it via scp(1) too.
8410
8411 During the install you need to get a shell to retreive x11vnc.static
8412 and run it.
8413
8414 If the Solaris install is an older X-based one, there will be a menu
8415 for you to get a terminal window. From that window you might be able
8416 to retrieve x11vnc.static via wget, scp, or ftp. Remember to do "chmod
8417 755 ./x11vnc.static" and then find the -auth file as in this FAQ.
8418
8419 If it is a Linux install that uses an X server (e.g. SuSE and probably
8420 Fedora), then you can often get a shell by pressing Ctrl-Alt-F2 or
8421 similar. Then get the x11vnc binary via something like this:
8422 cd /tmp
8423 wget http://192.168.0.22/x11vnc.static
8424 chmod 755 ./x11vnc.static
8425
8426 Find the name of the auth file as in this FAQ. (maybe run "ps wwaux |
8427 grep auth".) Then run it like this:
8428 ./x11vnc.static -forever -nopw -display :0 -auth /tmp/wherever/the/authfile
8429
8430 then press Alt-F7 to go back to the X install. You should now be able
8431 to connect via a vnc viewer and continue the install. Watch out for
8432 the display being :1, etc.
8433
8434 If there is a firewall blocking incoming connections during the
8435 install, use the "-connect hostname" option option for a reverse
8436 connection to the hostname running the VNC viewer in listen mode.
8437
8438 Debian based installs are either console-text or console-framebuffer
8439 based. These are install (or expert) and installgui (or expertgui)
8440 boot lines, respectively. For the console-text based installs you
8441 probably need to add a boot cmd line option like vga=0x314 (which is
8442 800x600x16) to get the console-text to use the linux framebuffer
8443 device properly.
8444
8445 For a Debian console-text based install after the network is
8446 configured press Ctrl-Alt-F2 to get a shell. Retrieve the binary via
8447 wget as above and chmod 755 it. Then run it something like this:
8448 sleep 10; ./x11vnc.static -forever -nopw -rawfb console
8449
8450 then before the sleep is over press Alt-F1 to get back to the install
8451 virtual console. You should be able to connect via a VNC viewer and
8452 continue with the install.
8453
8454 For a recent (2009) Debian install we booted with "expert vga=0x301"
8455 and "expert vga=0x311" to get console text based installs at 640x480x8
8456 and 640x480x16, respectively (replace "expert" with "install" if you
8457 like.) Otherwise it was giving a 16 color 640x480x4 (4 bit per pixel)
8458 display which x11vnc could not handle.
8459
8460 For Debian console-framebuffer GUI based installs (installgui or
8461 expertgui) we have not be able to enter keystrokes or mouse motions.
8462 This may be resolved if the install had the Linux kernel module
8463 uinput, but it doesn't; one can wget uinput.ko and then run insmod on
8464 it, but the module must match the installation kernel. So, failing
8465 that, you can only do the GUI view-only, which can be handy to watch a
8466 long network install from your desk instead of in front of the machine
8467 being installed. For these, after the network is configured press
8468 Ctrl-Alt-F2 to get a shell. Retrieve the binary via wget as above and
8469 chmod 755 it. Then run it something like this:
8470 sleep 10; ./x11vnc.static -forever -nopw -rawfb console
8471
8472 then before the sleep is over press Alt-F5 to get back to the GUI
8473 install console. You should be able to connect via a VNC viewer and
8474 watch the install.
8475 [Misc: Clipboard, File Transfer/Sharing, Printing, Sound, Beeps,
8476 Thanks, etc.]
8477
8478 Q-122: Does the Clipboard/Selection get transferred between the
8479 vncviewer and the X display?
8480
8481 As of Jan/2004 x11vnc supports the "CutText" part of the RFB (aka VNC)
8482 protocol. When text is selected/copied in the X session that x11vnc is
8483 polling it will be sent to connected VNC viewers. And when CutText is
8484 received from a VNC viewer then x11vnc will set the X11 selections
8485 PRIMARY, CLIPBOARD, and CUTBUFFER0 to it. x11vnc is able to hold the
8486 PRIMARY and CLIPBOARD selections (Xvnc does not seem to do this.)
8487
8488 The X11 selections can be confusing, especially to those coming from
8489 Windows or MacOSX where there is just a single 'Clipboard'. The X11
8490 CLIPBOARD selection is a lot like that of Windows and MacOSX, e.g.
8491 highlighted text is sent to the clipboard when the user activates
8492 "Edit -> Copy" or presses "Control+C" (and pasting it via "Edit ->
8493 Paste" or "Control+V".) The X11 PRIMARY selection has been described
8494 as 'for power users' or 'an Easter Egg'. As soon as text is
8495 highlighted it is set to the PRIMARY selection and so it is
8496 immediately ready for pasting, usually via the Middle Mouse Button or
8497 "Shift+Insert". See this jwz link for more information.
8498
8499 x11vnc's default behavior is to watch both CLIPBOARD and PRIMARY and
8500 whenever one of them changes, it sends the new text to connected
8501 viewers. Note that since the RFB protocol only has a single "CutText"
8502 then both selections are "merged" to some degree (and this can lead to
8503 confusing results.) One user was confused why x11vnc was "forgetting"
8504 his CLIPBOARD selection and the reason was he also changed PRIMARY
8505 some time after he copied text to the clipboard. Usually an app will
8506 set PRIMARY as soon as any text is highlighted so it easy to see how
8507 CLIPBOARD was forgotten. Use the -noprimary described below as a
8508 workaround. Similarly, by default when x11vnc receives CutText it sets
8509 both CLIPBOARD and PRIMARY to it (this is probably less confusing, but
8510 could possibly lead to some failure modes as well.)
8511
8512 You may not like these defaults. Here are ways to change the behavior:
8513 * If you don't want the Clipboard/Selection exchanged at all use the
8514 -nosel option.
8515 * If you want changes in PRIMARY to be ignored use the -noprimary
8516 option.
8517 * If you want changes in CLIPBOARD to be ignored use the
8518 -noclipboard option.
8519 * If you don't want x11vnc to set PRIMARY to the "CutText" received
8520 from viewers use the -nosetprimary option.
8521 * If you don't want x11vnc to set CLIPBOARD to the "CutText"
8522 received from viewers use the -nosetclipboard option.
8523
8524 You can also fine-tune it a bit with the -seldir dir option and also
8525 -input.
8526
8527 You may need to watch out for desktop utilities such as KDE's
8528 "Klipper" that do odd things with the selection, clipboard, and
8529 cutbuffers.
8530
8531
8532 Q-123: Can I use x11vnc to record a Shock Wave Flash (or other format)
8533 video of my desktop, e.g. to record a tutorial or demo?
8534
8535 Yes, it is possible with a number of tools that record VNC and
8536 transform it to swf format or others. One such popular tool is
8537 pyvnc2swf. There are a number of tutorials (broken link?) on how to do
8538 this. Another option is to use the vnc2mpg that comes in the
8539 LibVNCServer package.
8540 An important thing to remember when doing this is that tuning
8541 parameters should be applied to x11vnc to speed up its polling for
8542 this sort of application, e.g. "-wait 10 -defer 10".
8543
8544 Q-124: Can I transfer files back and forth with x11vnc?
8545
8546 As of Oct/2005 and May/2006 x11vnc enables, respectively, the TightVNC
8547 and UltraVNC file transfer implementations that were added to
8548 libvncserver. This currently works with TightVNC and UltraVNC viewers
8549 (and Windows viewers only support filetransfer it appears... but they
8550 do work to some degree under Wine on Linux.)
8551
8552 The SSVNC Unix VNC viewer supports UltraVNC file transfer by use of a
8553 Java helper program.
8554
8555 TightVNC file transfer is off by default, if you want to enable it use
8556 the -tightfilexfer option.
8557
8558 UltraVNC file transfer is off by default, to enable it use something
8559 like "-rfbversion 3.6 -permitfiletransfer"
8560 options (UltraVNC incorrectly uses the RFB protocol version to
8561 determine if its features are available, so x11vnc has to pretend to
8562 be version 3.6.) As of Sep/2006 "-ultrafilexfer" is an alias for these
8563 two options. Note that running as RFB version 3.6 may confuse other
8564 VNC Viewers.
8565
8566 Sadly you cannot do both -tightfilexfer and -ultrafilexfer at the same
8567 time because the latter requires setting the version to 3.6 and
8568 tightvnc will not do filetransfer when it sees that version number.
8569
8570 Also, because of the way the LibVNCServer TightVNC file transfer is
8571 implemented, you cannot do Tightvnc file transfer in -unixpw mode.
8572 However, UltraVNC file transfer does work in -unixpw (but if a client
8573 tries it do a filetransfer during the login process it will be
8574 disconnected.)
8575
8576 IMPORTANT: please understand if -ultrafilexfer or -tightfilexfer is
8577 specified and you run x11vnc as root for, say, inetd or display
8578 manager (gdm, kdm, ...) access and you do not have it switch users via
8579 the -users option, then VNC Viewers that connect are able to do
8580 filetransfer reads and writes as *root*.
8581
8582 The UltraVNC and TightVNC settings can be toggled on and off inside
8583 the gui or by -R remote control. However for TightVNC the changed
8584 setting only applies for NEW clients, current clients retain their
8585 TightVNC file transfer ability. For UltraVNC it works better, however
8586 if an UltraVNC client has initiated a file transfer dialog it will
8587 remain in effect until the dialog is closed. If you want to switch
8588 between UltraVNC and TightVNC file transfer in the gui or by remote
8589 control you will probably be foiled by the "-rfbversion 3.6" issue.
8590
8591
8592 Q-125: Which UltraVNC extensions are supported?
8593
8594 Some of them are supported. To get UltraVNC Viewers to attempt to use
8595 these extensions you will need to supply this option to x11vnc:
8596 -rfbversion 3.6
8597
8598 Or use -ultrafilexfer which is an alias for the above option and
8599 "-permitfiletransfer". UltraVNC evidently treats any other RFB version
8600 number as non-UltraVNC.
8601
8602 Here are a list of the UltraVNC extensions supported by x11vnc:
8603 * ServerInput: "Toggle Remote Input and Remote Blank Monitor"
8604 * FileTransfer: "Open File Transfer..."
8605 * SingleWindow: "Select Single Window..."
8606 * TextChat: "Open Chat..."
8607 * 1/n Server Scaling
8608
8609 The SSVNC Unix VNC viewer supports these UltraVNC extensions.
8610
8611 To disable SingleWindow and ServerInput use -noultraext (the others
8612 are managed by LibVNCServer.) See this option too: -noserverdpms.
8613
8614 Also, the UltraVNC repeater proxy is supported for use with reverse
8615 connections: "-connect repeater://host:port+ID:NNNN". Use it for both
8616 plaintext and SSL connections. This mode can send any string before
8617 switching to the VNC protocol, and so could be used with other
8618 proxy/gateway tools. Also, a perl repeater implemention is here:
8619 ultravnc_repeater.pl
8620
8621
8622 Q-126: Can x11vnc emulate UltraVNC's Single Click helpdesk mode for
8623 Unix? I.e. something very simple for a naive user to initiate a
8624 reverse vnc connection from their Unix desktop to a helpdesk
8625 operator's VNC Viewer.
8626
8627 Yes, UltraVNC's Single Click (SC) mode can be emulated fairly well on
8628 Unix.
8629
8630 We use the term "helpdesk" below, but it could be any sort of remote
8631 assistance you want to set up, e.g. something for Unix-using friends
8632 or family to use. This includes Mac OS X.
8633
8634 Assume you create a helpdesk directory "hd" on your website:
8635 http://www.mysite.com/hd (any website that you can upload files to
8636 should work, although remember the user will be running the programs
8637 you place there.)
8638
8639 In that "hd" subdirectory copy an x11vnc binary to be run on the Unix
8640 user's machine (e.g. Linux, etc) and also create a file named "vnc"
8641 containing the following:
8642 #!/bin/sh
8643
8644 webhost="http://www.mysite.com/hd" # Your helpdesk dir URL.
8645
8646 vnchost="ip.someplace.net" # Your host running 'vncviewer -listen'
8647 # It could also be your IP number. If it is
8648 # a router/firewall, you will need to
8649 # configure it to redirect port 5500 to you
8650 r
8651 # workstation running 'vncviewer -listen'
8652
8653 dir=/tmp/vnc_helpdesk.$$ # Make a temporary working dir.
8654 mkdir $dir || exit 1
8655 cd $dir || exit 1
8656
8657 trap "cd /tmp; rm -rf $dir" 0 2 15 # Cleans up on exit.
8658
8659 wget $webhost/x11vnc # Fetch x11vnc binary. If multi-
8660 chmod 755 ./x11vnc # platform, use $webhost/`uname`/x11vnc
8661 # or similar.
8662
8663 ./x11vnc -connect_or_exit $vnchost -rfbport 0 -nopw
8664
8665 with the hostnames / IP addresses customized to your case.
8666
8667 On the helpdesk VNC viewer machine (ip.someplace.net in this example)
8668 you have the helpdesk operator running VNC viewer in listen mode:
8669 vncviewer -listen
8670
8671 or if on Windows, etc. somehow have the VNC viewer be in "listen"
8672 mode.
8673
8674 Then, when the naive user needs assistance you instruct him to open up
8675 a terminal window on his Unix desktop and paste the following into the
8676 shell:
8677 wget -qO - http://www.mysite.com/hd/vnc | sh -
8678
8679 and then press Enter. You could have this instruction on a web page or
8680 in an email you send him, etc. This requires that the wget is
8681 installed on the user's Unix machine (he might only have curl or lynx,
8682 see below for more info.)
8683
8684
8685 So I guess this is about 3-4 clicks (start a terminal and paste) and
8686 pressing "Enter" instead of "single click"...
8687
8688 See this page for some variations on this method, e.g. how to add a
8689 password, SSL Certificates, etc.
8690
8691
8692 If you don't have a website (there are many free ones) or don't want
8693 to use one you will have to email him all of the ingredients (x11vnc
8694 binary and a launcher script) and tell him how to run it. This could
8695 be easy or challenging depending on the skill of the naive unix
8696 user...
8697
8698 A bit of obscurity security could be put in with a -passwd, -rfbauth
8699 options, etc. (note that x11vnc will require a password even for
8700 reverse connections.) More info here.
8701
8702
8703 Firewalls: If the helpdesk (you) with the vncviewer is behind a
8704 NAT/Firewall/Router the router will have to be configured to redirect
8705 a port (i.e. 5500 or maybe different one if you like) to the vncviewer
8706 machine. If the vncviewer machine also has its own host-level
8707 firewall, you will have to open up the port there as well.
8708
8709 NAT-2-NAT: There is currently no way to go "NAT-2-NAT", i.e. both User
8710 and Helpdesk workstations behind NAT'ing Firewall/Routers without
8711 configuring a router to do a port redirection (i.e. on your side, the
8712 HelpDesk.) To avoid modifying either firewall/router, one would need
8713 some public (IP address reachable on the internet) redirection/proxy
8714 service. Perhaps such a thing exists. http://sc.uvnc.com provides this
8715 service for their UltraVNC Single Click users.
8716
8717 Update: It may be possible to do "NAT-2-NAT" with a UDP tunnel such as
8718 http://samy.pl/pwnat/. All that is required is that both NAT firewalls
8719 allow in UDP packets from an IP address to which a UDP packet has
8720 recently been sent to. If you try it out let us know how it went.
8721
8722
8723 Very Naive Users:
8724
8725 If it is beyond the user how to open a terminal window and paste in a
8726 command (you have my condolences...) you would have to somehow setup
8727 his Web browser to download the "vnc" file (or a script containing the
8728 above wget line) and prompt the user if he wants to run it. This may
8729 be tricky to set up (which is probably a good thing to not have the
8730 web browser readily run arbitrary programs downloaded from the
8731 internet...)
8732
8733 One command-line free way, tested with KDE, is to name the file vnc.sh
8734 and then instruct the user to right-click on the link and do "Save
8735 Link As" to his Desktop. It will appear as an icon, probably one that
8736 looks like a terminal or a command line prompt. He next should
8737 right-click on the icon and select "Properties" and go to the
8738 "Permissions" tab. Then in that dialog select the checkbox "Is
8739 executable". He should then be able to click on the icon to launch it.
8740 Another option is to right-click on the icon and select "Open With ->
8741 Other ..." and for the name of the application type in "/bin/sh".
8742 Unfortunately in both cases the command output is lost and so errors
8743 cannot be debugged as easily. A similar thing appears to work in GNOME
8744 if under "Properties -> Permissions" they click on "Execute" checkbox
8745 for "Owner". Then when they click on the icon, they will get a dialog
8746 where they can select "Run in Terminal". In general for such cases, if
8747 it is feasible, it might be easier to ssh to his machine and set
8748 things up yourself...
8749
8750
8751 SSL Encrypted Helpdesk Connections:
8752
8753 As of Apr/2007 x11vnc supports reverse connections in SSL and so we
8754 can do this. On the Helpdesk side (Viewer) you will need STUNNEL or
8755 better use the Enhanced TightVNC Viewer (SSVNC) package we provide
8756 that automates all of the SSL for you.
8757
8758 To do this create a file named "vncs" in the website "hd" directory
8759 containing the following:
8760 #!/bin/sh
8761
8762 webhost="http://www.mysite.com/hd" # Your helpdesk dir URL.
8763
8764 vnchost="ip.someplace.net" # Your host running 'vncviewer -listen'
8765 # It could also be your IP number. If it is
8766 # a router/firewall, you will need to
8767 # configure it to redirect port 5500 to you
8768 r
8769 # workstation running 'vncviewer -listen'
8770
8771 dir=/tmp/vnc_helpdesk.$$ # Make a temporary working dir.
8772 mkdir $dir || exit 1
8773 cd $dir || exit 1
8774
8775 trap "cd /tmp; rm -rf $dir" 0 2 15 # Cleans up on exit.
8776
8777 wget $webhost/x11vnc # Fetch x11vnc binary. If multi-
8778 chmod 755 ./x11vnc # platform, use $webhost/`uname`/x11vnc
8779 # or similar.
8780
8781 ./x11vnc -connect_or_exit $vnchost -rfbport 0 -nopw -ssl # Note -ssl option.
8782
8783 with the hostnames or IP addresses customized to your case.
8784
8785 The only change from the "vnc" above is the addition of the -ssl
8786 option to x11vnc. This will create a temporary SSL cert: openssl(1)
8787 will need to be installed on the user's end. A fixed SSL cert file
8788 could be used to avoid this (and provide some authentication; more
8789 info here.)
8790
8791 The naive user will be doing this:
8792 wget -qO - http://www.mysite.com/hd/vncs | sh -
8793
8794 (or perhaps even use https:// if available.)
8795
8796 But before that, the helpdesk operator needs to have "vncviewer
8797 -listen" running as before, however he needs an SSL tunnel at his end.
8798 The easiest way to do this is use Enhanced TightVNC Viewer (SSVNC).
8799 Start it, and select Options -> 'Reverse VNC Connection (-listen)'.
8800 Then UN-select 'Verify All Certs' (this can be enabled later if you
8801 want; you'll need the x11vnc SSL certificate), and click 'Listen'.
8802
8803 If you don't want to use SSVNC for the viewer, but rather set up
8804 STUNNEL manually instead, make a file "stunnel.cfg" containing:
8805 foreground = yes
8806 pid =
8807
8808 [vnc]
8809 accept = 5500
8810 connect = localhost:5501
8811
8812 and run:
8813 stunnel ./stunnel.cfg
8814
8815 and then start the "vncviewer -listen 1" (i.e. 1 to correspond to the
8816 5501 port.) Note that this assumes the stunnel install created a
8817 Server SSL cert+key, usually /etc/stunnel/stunnel.pem (not all distros
8818 will do this.) Also, that file is by default only readable by root, so
8819 stunnel needs to be run as root. If your system does not have a key
8820 installed or you do not want to run stunnel as root (or change the
8821 permissions on the file), you can use x11vnc to create one for you for
8822 example:
8823 x11vnc -sslGenCert server self:mystunnel
8824
8825 answer the prompts with whatever you want; you can take the default
8826 for all of them if you like. The openssl(1) package must be installed.
8827 See this link and this one too for more info on SSL certs. This
8828 creates $HOME/.vnc/certs/server-self:mystunnel.pem, then you would
8829 change the "stunnel.cfg" to look something like:
8830 foreground = yes
8831 pid =
8832 cert = /home/myusername/.vnc/certs/server-self:mystunnel.pem
8833
8834 [vnc]
8835 accept = 5500
8836 connect = localhost:5501
8837
8838 In any event, with stunnel having been setup, the naive user is
8839 instructed to paste in and run:
8840 wget -qO - http://www.mysite.com/hd/vncs | sh -
8841
8842 to pick up the vncs script this time.
8843
8844 Of course if a man-in-the-middle can alter what the user downloads
8845 then all bets are off!.
8846
8847 More SSL variations and info about certificates can be found here.
8848
8849
8850 OpenSSL libssl.so.0.9.7 problems:
8851
8852 If you build your own stunnel or x11vnc for deployment, you may want
8853 to statically link libssl.a and libcrypto.a into it because Linux
8854 distros are currently a bit of a mess regarding which version of
8855 libssl is installed.
8856
8857 You will find the details here.
8858
8859
8860 Q-127: Can I (temporarily) mount my local (viewer-side) Windows/Samba
8861 File share on the machine where x11vnc is running?
8862
8863 You will have to use an external network redirection for this.
8864 Filesystem mounting is not part of the VNC protocol.
8865
8866 We show a simple Samba example here.
8867
8868 First you will need a tunnel to redirect the SMB requests from the
8869 remote machine to the one you sitting at. We use an ssh tunnel:
8870 sitting-here> ssh -C -R 1139:localhost:139 far-away.east
8871
8872 Or one could combine this with the VNC tunnel at the same time, e.g.:
8873 sitting-here> ssh -C -R 1139:localhost:139 -t -L 5900:localhost:5900 far-away
8874 .east 'x11vnc -localhost -display :0'
8875
8876 Port 139 is the Windows Service port. For Windows systems instead of
8877 Samba, you may need to use the actual IP address of the Window machine
8878 instead of "localhost" in the -R option (since the Windows service
8879 does not listen on localhost by default.)
8880
8881 Note that we use 1139 instead of 139 on the remote side because 139
8882 would require root permission to listen on (and you may have a samba
8883 server running on it already.)
8884
8885 The ssh -C is to enable compression, which might speed up the data
8886 transfers.
8887
8888 Depending on the remote system side configuration, it may or may not
8889 be possible to mount the SMB share as a non-root user. Try it first as
8890 a non-root user and if that fails you will have to become root.
8891
8892 We will assume the user name is "fred" and we will try to mount the
8893 viewer-side Windows SMB share "//haystack/pub" in
8894 /home/fred/smb-haystack-pub.
8895 far-away> mkdir -p /home/fred/smb-haystack-pub
8896 far-away> smbmount //haystack/pub /home/fred/smb-haystack-pub -o username=fre
8897 d,ip=127.0.0.1,port=1139
8898
8899 (The 2nd command may need to be run as root.) Then run "df" or "ls -l
8900 /home/fred/smb-haystack-pub" to see if it is mounted properly. Consult
8901 the smbmount(8) and related documentation (it may require some
8902 fiddling to get write permissions correct, etc.) To unmount:
8903 far-away> smbumount /home/fred/smb-haystack-pub
8904
8905 At some point we hope to fold some automation for SMB ssh redir setup
8906 into the Enhanced TightVNC Viewer (SSVNC) package we provide (as of
8907 Sep 2006 it is there for testing.)
8908
8909
8910 Q-128: Can I redirect CUPS print jobs from the remote desktop where
8911 x11vnc is running to a printer on my local (viewer-side) machine?
8912
8913 You will have to use an external network redirection for this.
8914 Printing is not part of the VNC protocol.
8915
8916 We show a simple Unix to Unix CUPS example here. Non-CUPS port
8917 redirections (e.g. LPD) should also be possible, but may be a bit more
8918 tricky. If you are viewing on Windows SMB and don't have a local cups
8919 server it may be trickier still (see below.)
8920
8921 First you will need a tunnel to redirect the print requests from the
8922 remote machine to the one you sitting at. We use an ssh tunnel:
8923 sitting-here> ssh -C -R 6631:localhost:631 far-away.east
8924
8925 Or one could combine this with the VNC tunnel at the same time, e.g.:
8926 sitting-here> ssh -C -R 6631:localhost:631 -t -L 5900:localhost:5900 far-away
8927 .east 'x11vnc -localhost -display :0'
8928
8929 Port 631 is the default CUPS port. The above assumes you have a Cups
8930 server running on your viewer machine (localhost:631), if not, use
8931 something like my-cups-srv:631 (the viewer-side Cups server) in the -R
8932 instead.
8933
8934 Note that we use 6631 instead of 631 on the remote side because 631
8935 would require root permission to listen on (and you likely have a cups
8936 server running on it already.)
8937
8938 Now the tricky part: to get applications to notice your cups
8939 server/printer on localhost:6631.
8940
8941 If you have administrative privilege (i.e. root password) on the
8942 x11vnc side where the desktop is running, it should be easy to add the
8943 printer through some configuration utility (e.g. in KDE: Utilities ->
8944 Printing -> Printing Manager, and then supply admin password, and then
8945 Add Printer/Class, and then fill in the inquisitive wizard. Most
8946 important is the "Remote IPP server" panel where you put in localhost
8947 for Host and 6631 for Port.) The main setting you want to convey is
8948 the host is localhost and the port is non-standard (e.g. 6631.) Some
8949 configuration utilities will take an Internet Printing Protocol (IPP)
8950 URI, e.g. http://localhost:6631/printers/,
8951 ipp://localhost:6631/printers/printer-name,
8952 ipp://localhost:6631/ipp/printer-name, etc. Check your CUPS
8953 documentation and admin interfaces to find what the syntax is and what
8954 the "printer name" is.
8955
8956 If you do not have root or print admin privileges, but are running a
8957 recent (version 1.2 or greater) of the Cups client software, then an
8958 easy way to temporarily switch Cups servers is to create the directory
8959 and file: $HOME/.cups/client.conf on the remote side with a line like:
8960 ServerName localhost:6631
8961
8962 When not using x11vnc for remote access you can comment the above line
8963 out with a '#' (or rename the client.conf file), to have normal cups
8964 operation.
8965
8966 Unfortunately, running applications may need to be restarted to notice
8967 the new printers (libcups does not track changes in client.conf.)
8968 Depending on circumstances, a running application may actually notice
8969 the new printers without restarting (e.g. no print dialog has taken
8970 place yet, or there are no CUPS printers configured on the remote
8971 side.)
8972
8973 Cups client software that is older (1.1) does not support appending
8974 the port number, and for newer ones there is a bug preventing it from
8975 always working (fixed in 1.2.3.) Kludges like these at the command
8976 line will work:
8977 far-away> env CUPS_SERVER=localhost IPP_PORT=6631 lpstat -p -d
8978 far-away> env CUPS_SERVER=localhost IPP_PORT=6631 lpr -P myprinter file.ps
8979 far-away> env CUPS_SERVER=localhost IPP_PORT=6631 firefox
8980
8981 but are somewhat awkward since you have to retroactively set the env.
8982 var IPP_PORT. Its value cannot be broadcast to already running apps
8983 (like the $HOME/.cups/client.conf trick sometimes does.) A common
8984 workaround for an already running app is to somehow get it to "Print
8985 To File", e.g. file.ps and then use something like the lpr example
8986 above. Also, the option "-h host:port" works with CUPS lp(1) and
8987 lpr(1).
8988
8989 You can also print to Windows shares printers in principle. You may do
8990 this with the smbspool(8) command, or configure the remote CUPS via
8991 lpadmin(8), etc, to use a printer URI something like
8992 smb://machine:port/printer (this may have some name resolution
8993 problems WRT localhost.) Also, as with SMB mounting, the port redir
8994 (-R) to the Windows machine must use the actual IP address instead of
8995 "localhost".
8996
8997 At some point we hope to fold some automation for CUPS ssh redir setup
8998 into the Enhanced TightVNC Viewer (SSVNC) package we provide (as of
8999 Sep 2006 it is there for testing.)
9000
9001
9002 Q-129: How can I hear the sound (audio) from the remote applications
9003 on the desktop I am viewing via x11vnc?
9004
9005 You will have to use an external network audio mechanism for this.
9006 Audio is not part of the VNC protocol.
9007
9008 We show a simple Unix to Unix esd example here (artsd should be
9009 possible too, we have also verified the esd Windows port works for the
9010 method described below.)
9011
9012 First you will need a tunnel to redirect the audio from the remote
9013 machine to the one you sitting at. We use an ssh tunnel:
9014 sitting-here> ssh -C -R 16001:localhost:16001 far-away.east
9015
9016 Or one could combine this with the VNC tunnel at the same time, e.g.:
9017 sitting-here> ssh -C -R 16001:localhost:16001 -t -L 5900:localhost:5900 far-a
9018 way.east 'x11vnc -localhost -display :0'
9019
9020 Port 16001 is the default ESD uses. So when an application on the
9021 remote desktop makes a sound it will connect to this tunnel and be
9022 redirected to port 16001 on the local machine (sitting-here in this
9023 example.) The -C option is an attempt to compress the audio a little
9024 bit.
9025
9026 So we next need a local (sitting-here) esd daemon running that will
9027 receive those requests and play them on the local sound device:
9028 sitting-here> esd -promiscuous -port 16001 -tcp -bind 127.0.0.1
9029
9030 See the esd(1) man page for the meaning of the options (the above are
9031 not very secure.) (This method also works with the EsounD windows port
9032 esd.exe)
9033
9034 To test this sound tunnel, we use the esdplay program to play a simple
9035 .wav file:
9036 far-away> esdplay -s localhost:16001 im_so_happy.wav
9037
9038 If you hear the sound (Captain Kirk in this example), that means you
9039 are in great shape.
9040
9041 To run individual audio applications you can use the esddsp(1)
9042 command:
9043 far-away> esddsp -s localhost:16001 xmms
9044
9045 Then you could try playing some sounds inside xmms. You could also set
9046 the environment variable ESPEAKER=localhost:16001 to not need to
9047 supply the -s option all the time. (for reasons not clear, sometimes
9048 esddsp can figure it out on its own.) All the script esddsp does is to
9049 set ESPEAKER and LD_PRELOAD for you so that when the application opens
9050 the sound device (usually /dev/dsp) its interactions with the device
9051 will be intercepted and sent to the esd daemon running on sitting-here
9052 (that in turn writes them to the real, local /dev/dsp.)
9053
9054 Redirecting All sound:
9055
9056 It does not seem to be possible to switch all of the sound of the
9057 remote machine from its sound device to the above esd+ssh tunnel
9058 without some preparation. But it can be done reasonably well if you
9059 prepare (i.e. restart) the desktop with this in mind.
9060
9061 Here is one way to redirect all sound. The idea is we run the entire
9062 desktop with sound directed to localhost:16001. When we are sitting at
9063 far-away.east we run "esd -promiscuous -port 16001 -tcp -bind
9064 127.0.0.1" on far-away.east (to be able to hear the sound.) However,
9065 when we are sitting at sitting-here.west we kill that esd process and
9066 run that same esd command on sitting-here.west and start up the above
9067 ssh tunnel. This is a little awkward, but with some scripts one would
9068 probably kill and restart the esd processes automatically when x11vnc
9069 is used.
9070
9071 So next we have to run the whole desktop pointing toward our esd. Here
9072 is a simple way to test. Log in to the machine via the "FailSafe"
9073 desktop. Then in the lone terminal type something like:
9074 esddsp -s localhost:16001 gnome-session
9075 or:
9076 esddsp -s localhost:16001 startkde
9077
9078 where the last part is whatever command starts your desktop (even
9079 fvwm2.) This causes the environment variables ESPEAKER and LD_PRELOAD
9080 to be set appropriately and every application (processes with the
9081 desktop as an ancestor) will use them. If this scheme works well you
9082 can make it less klunky by adding the command to your ~/.xsession,
9083 etc. file that starts your default desktop. Or you may be able to
9084 configure your desktop to use localhost:16001, or whatever is needed,
9085 via a gui configuration panel. Some Notes:
9086 * Not all audio applications are compatible with the esd and artsd
9087 mechanisms, but many are.
9088 * The audio is not compressed so you probably need a broadband or
9089 faster connection. Listening to music may not be very pleasant...
9090 (Although we found streaming music from across the US over cable
9091 modem worked OK, but took 200 KB/sec, to use less bandwidth
9092 consider something like "ssh far-away.east 'cat favorite.mp3' |
9093 mpg123 -b 4000 -")
9094 * Linux does not seem to have the concept of LD_PRELOAD_64 so if you
9095 run on a mixed 64- and 32-bit ABI system (e.g. AMD x86_64) some of
9096 the applications will fail to run because LD_PRELOAD will point to
9097 libraries of the wrong wordsize.
9098 * At some point we hope to fold some automation for esd or artsd ssh
9099 redir setup into the Enhanced TightVNC Viewer (SSVNC) package we
9100 provide (as of Sep/2006 it is there for testing.)
9101
9102
9103 Q-130: Why don't I hear the "Beeps" in my X session (e.g. when typing
9104 tput bel in an xterm)?
9105
9106 As of Dec/2003 "Beep" XBell events are tracked by default. The X
9107 server must support the XKEYBOARD extension (this is not on by default
9108 in Solaris, see Xserver(1) for how to turn it on via +kb), and so you
9109 won't hear them if the extension is not present.
9110
9111 If you don't want to hear the beeps use the -nobell option. If you
9112 want to hear the audio from the remote applications, consider trying a
9113 redirector such as esd.
9114
9115
9116 Q-131: Does x11vnc work with IPv6?
9117
9118 Update: as of Apr/2010 in the 0.9.10 x11vnc development tarball, there
9119 is now built-in support for IPv6 (128 bit internet addresses.) See the
9120 -6 and -connect options for details.
9121
9122 The remainder of this FAQ entry shows how to do with this with pre
9123 0.9.10 x11vnc using IPv6 helper tools.
9124 _________________________________________________________________
9125
9126 Using an external IPv6 helper:
9127 A way to do this is via a separate helper program such as inetd (or
9128 for encrypted connections: ssh or stunnel.) For example, you configure
9129 x11vnc to be run from inetd or xinetd and instruct it to listen on an
9130 IPv6 address. For xinetd the setting "flags = IPv6" will be needed.
9131 For inetd.conf, an example is:
9132 5900 stream tcp6 nowait root /usr/sbin/tcpd /usr/local/bin/x11vnc_wrapper.sh
9133
9134 We also provide a transitional tool in "x11vnc/misc/inet6to4" that
9135 acts as a relay for any IPv4 application to allow connections over
9136 IPv6. For example:
9137 inet6to4 5900 localhost:5900
9138
9139 where x11vnc is listening on IPv4 port 5900.
9140
9141 Also note that not all VNC Viewers are IPv6 enabled, so a redirector
9142 may also be needed for them. The tool "inet6to4 -r ..." can do this as
9143 well. SSVNC (see below) supports IPv6 without need for the helper.
9144
9145 # ./inet6to4 -help
9146
9147 inet6to4: Act as an ipv6-to-ipv4 relay for tcp applications that
9148 do not support ipv6.
9149
9150 Usage: inet6to4
9151 inet6to4 -r
9152
9153 Examples: inet6to4 5900 localhost:5900
9154 inet6to4 8080 web1:80
9155 inet6to4 -r 5900 fe80::217:f2ff:fee6:6f5a%eth0:5900
9156
9157 The -r option reverses the direction of translation (e.g. for ipv4
9158 clients that need to connect to ipv6 servers.) Reversing is the default
9159 if this script is named 'inet4to6' (e.g. by a symlink.)
9160
9161 Use Ctrl-C to stop this program.
9162
9163 You can also set env. vars INET6TO4_LOOP=1 or INET6TO4_LOOP=BG
9164 to have an outer loop restarting this program (BG means do that
9165 in the background), and INET6TO4_LOGFILE for a log file.
9166 Also set INET6TO4_VERBOSE to verbosity level and INET6TO4_WAITTIME
9167 and INET6TO4_PIDFILE (see below.)
9168
9169 The "INET6TO4_LOOP=BG" and "INET6TO4_LOGFILE=..." env. variables make
9170 the tool run reliably as a daemon for very long periods. Read the top
9171 part of the script for more information.
9172 _________________________________________________________________
9173
9174 Encrypted Tunnels with IPv6 Support:
9175 For SSH tunnelled encrypted VNC connections, one can of course use the
9176 IPv6 support in ssh(1).
9177
9178 For SSL encrypted VNC connections, one possibility is to use the IPv6
9179 support in stunnel(1). This includes the built-in support via the
9180 -stunnel option. For example:
9181 x11vnc -stunnel SAVE -env STUNNEL_LISTEN=:: -env STUNNEL_DEBUG=1 ...
9182 _________________________________________________________________
9183
9184 SSH IPv6 Tricks:
9185 It is interesting to note that ssh(1) can do basically the same thing
9186 as inet6to4 above by:
9187 ssh -g -L 5900:localhost:5901 localhost "printf 'Press Enter to Exit: '; read
9188 x"
9189
9190 (where we have x11vnc running via "-rfbport 5901" in this case.)
9191
9192 Note that one can also make a home-brew SOCKS5 ipv4-to-ipv6 gateway
9193 proxy using ssh like this:
9194 ssh -D '*:1080' localhost "printf 'Press Enter to Exit: '; read x"
9195
9196 then specify a proxy like socks://hostname:1080 where hostname is the
9197 machine running the above ssh command (add -v to ssh for connection
9198 logging info.)
9199 _________________________________________________________________
9200
9201 IPv6 SSVNC Viewer:
9202 Our SSVNC VNC Viewer is basically a wrapper for ssh(1) and stunnel(1),
9203 and so it already has good IPv6 support because these two commands do.
9204 On Unix, MacOSX, and Windows nearly all of the the remaining parts of
9205 SSVNC (e.g. the built-in proxying and un-encrypted connections) have
9206 been modified to support IPv6 in SSVNC 1.0.26.
9207
9208
9209
9210
9211
9212
9213 Contributions:
9214
9215 Q-132: Thanks for your program or for your help! Can I make a
9216 donation?
9217
9218 Please do (any amount is appreciated; very few have donated) and thank
9219 you for your support! Click on the PayPal button below for more info.
9220
9221 [x-click-but04.gif]-Submit
9222
9223 =======================================================================
9224 http://www.karlrunge.com/x11vnc/chainingssh.html:
9225
9226
9227 _________________________________________________________________
9228
9229 Chaining ssh's: Note that for use of a ssh gateway and -L redirection
9230 to an internal host (e.g. "-L 5900:otherhost:5900") the VNC traffic
9231 inside the firewall is not encrypted and you have to manually log into
9232 otherhost to start x11vnc. Kyle Amon shows a method where you chain
9233 two ssh's together that encrypts all network traffic and also
9234 automatically starts up x11vnc on the internal workstation:
9235 #!/bin/sh
9236 #
9237 gateway="example.com" # or "user (a] example.com"
9238 host="labyrinth" # or "user@hostname"
9239 user="kyle"
9240
9241 # Need to sleep long enough for all of the passwords and x11vnc to start up.
9242 # The </dev/null below makes the vncviewer prompt for passwd via popup window.
9243 #
9244 (sleep 10; vncviewer -encodings "copyrect tight zrle zlib hextile" \
9245 localhost:0 </dev/null >/dev/null) &
9246
9247 # Chain the vnc connection thru 2 ssh's, and connect x11vnc to user's display:
9248 #
9249 exec /usr/bin/ssh -t -L 5900:localhost:5900 $gateway \
9250 /usr/bin/ssh -t -L 5900:localhost:5900 $host \
9251 sudo /usr/bin/x11vnc -localhost -auth /home/$user/.Xauthority \
9252 -rfbauth .vnc/passwd -display :0
9253
9254 Also note the use of sudo(1) to switch to root so that the different
9255 user's .Xauthority file can be accessed. See the visudo(8) manpage for
9256 details on how to set this up (remove the sudo if you do not want to
9257 do this). One can also chain together ssh's for reverse connections
9258 with vncviewers using the -listen option. For this case -R would
9259 replace the -L (and 5500 the 5900, see the #2 example script above).
9260 If the gateway machine's sshd is configured with GatewayPorts=no (the
9261 default) then the double chaining of "ssh -R ..." will be required for
9262 reverse connections to work.
9263
9264 =======================================================================
9265 http://www.karlrunge.com/x11vnc/miscbuild.html:
9266
9267
9268 _________________________________________________________________
9269
9270 Misc. Build problems: We collect here rare build problems some users
9271 have reported and the corresponding workarounds. See also the FAQ's on
9272 building.
9273 _________________________________________________________________
9274
9275 ENV parameter: One user had a problem where the build script below was
9276 failing because his work environment had the ENV variable set to a
9277 script that was resetting his PATH so that gcc could no longer be
9278 found. Make sure you do not have any ENV or BASH_ENV in your
9279 environment doing things like that. Typing "unset ENV", etc. before
9280 configuring and building should clear it.
9281 _________________________________________________________________
9282
9283 Bash xpg: One user had his bash shell compiled with
9284 --enable-xpg-echo-default that causes some strange behavior with
9285 things like echo "\\1 ..." the configure script executes. In
9286 particular instead of getting "\1" the non-printable character "^A" is
9287 produced, and causes failures at compile time like:
9288 ../rfb/rfbconfig.h:9:22: warning: extra tokens at end of #ifndef directive
9289
9290 The workaround is to configure like this:
9291 env CONFIG_SHELL=/bin/sh /bin/sh ./configure
9292
9293 i.e. avoid using the bash with the misbehavior. A bug has been filed
9294 against autoconf to guard against this.
9295 _________________________________________________________________
9296
9297 AIX: one user had to add the "X11.adt" package to AIX to get build
9298 header files like XShm.h, etc.
9299 _________________________________________________________________
9300
9301 Ubuntu Feisty Fawn 7.04: In May/2007 one user said he needed to add
9302 these packages to compile x11vnc on that Linux distro and version:
9303 apt-get install build-essential make bin86 libjpeg62-dev libssl-dev libxtst-d
9304 ev
9305
9306 Note that Ubuntu is based on Debian, so perhaps this is the list
9307 needed on Debian (testing?) as well. To build in Avahi (mDNS service
9308 advertising) support it would appear that libavahi-client-dev is
9309 needed as well.
9310 _________________________________________________________________
9311
9312 Exceedingly slow compilation: x11vnc has a couple of files which
9313 contain very large "case statements" (over 100 cases) that on some
9314 platforms can take a very long time to compile (in extreme cases over
9315 an hour). However on 32bit Linux with intel/amd processor and gcc
9316 these files usually take less than 10 seconds to compile. For 64bit
9317 systems using gcc the problem appears to be much worse.
9318
9319 The two files with the large number of cases, remote.c and x11vnc.c,
9320 have no real need to be optimized (the code is used only very
9321 infrequently). So it is fine to supply "-O0" (disables optimization)
9322 to CFLAGS when compiling them. However, it is tricky with
9323 autoconf/automake to do this (especially since both the compiler and
9324 make versions have a big effect).
9325
9326 So if the compile times are getting too long for you for these two
9327 files you will need to manually change some things. First, run
9328 configure and when it has finished, edit the generated file
9329 x11vnc/Makefile and put these lines at the very top:
9330 x11vnc-x11vnc.o : CFLAGS += -O0
9331 x11vnc-remote.o : CFLAGS += -O0
9332
9333 Those lines assume gnu make (gmake) is being used. If you are using
9334 another make, say Solaris make, insert these instead:
9335 x11vnc-x11vnc.o := CFLAGS += -O0
9336 x11vnc-remote.o := CFLAGS += -O0
9337
9338 You could write a build shell script that modified the Makefile this
9339 way before running make.
9340
9341 The "-O0" (note it is "capital Oh" followed by "zero") assumes the gcc
9342 compiler. If you are using a different compiler you will need to find
9343 the command line option to disable optimization, or otherwise have the
9344 lines set CFLAGS to the empty string.
9345 _________________________________________________________________
9346
9347 Broken Thread Local Storage on SuSE 9.2: Starting with x11vnc 0.9.8
9348 the bundled libvncserver uses the __thread keyword to make some of the
9349 encodings (i.e. tight) thread safe (multiple VNC clients can be using
9350 tight at the same time in x11vnc -threads mode.) Evidently on the old
9351 SuSE 9.2 system the compiler does not support the thread local storage
9352 properly. Here is an example build failure:
9353 tight.c:1126: error: unrecognizable insn:
9354 (insn:HI 11 10 13 0 (nil) (set (reg/f:SI 59)
9355 (const:SI (plus:SI (symbol_ref:SI ("%lpalette"))
9356 (const_int 2048 [0x800])))) -1 (nil)
9357 (expr_list:REG_EQUAL (const:SI (plus:SI (symbol_ref:SI ("%lpalette"))
9358 (const_int 2048 [0x800])))
9359 (nil)))
9360 tight.c:1126: internal compiler error: in extract_insn, at recog.c:2175
9361 Please submit a full bug report,
9362 with preprocessed source if appropriate.
9363 See URL:http://www.suse.de/feedback for instructions.
9364
9365 The workaround is to disable thread local storage at configure time
9366 like this:
9367 env CPPFLAGS="-DTLS=''" ./configure
9368
9369 and then build it.
9370 _________________________________________________________________
9371
9372 =======================================================================
9373 http://www.karlrunge.com/x11vnc/sunray.html:
9374
9375
9376 Sun Ray Notes:
9377
9378 You can run x11vnc on your (connected or disconnected) SunRay session
9379 (Please remember to use settings like -wait 200, -sb 15, and not
9380 running a screensaver animation (blank instead) to avoid being a
9381 resource hog! x11vnc does induce a lot of memory I/O from polling the
9382 X server. It also helps to have a solid background color, e.g.
9383 -solid).
9384
9385 News: Sun Ray Remote Control Toolkit: See the nice set of tools in the
9386 Sun Ray Remote Control Toolkit that launch x11vnc automatically for
9387 you for certain usage modes.
9388
9389 You have to know the name of the machine your SunRay session X server
9390 is running on (so you can ssh into it and start x11vnc). You also need
9391 to know the X11 DISPLAY number for the session: on a SunRay it could
9392 be a large number, e.g. :137, since there are many people with X
9393 sessions (Xsun processes) on the same machine. If you don't know it,
9394 you can get it by running who(1) in a shell on the SunRay server and
9395 looking for the dtlocal entry with your username (and if you don't
9396 even know which server machine has your session, you could login to
9397 all possible ones looking at the who output for your username...).
9398
9399 I put some code in my ~/.dtprofile script that stores $DISPLAY
9400 (including the hostname) in a ~/.sunray_current file at session
9401 startup (and deletes it when the X session ends) to make it easy to
9402 get at the hostname and X11 display number info for my current X
9403 sessions when I ssh in and am about to start x11vnc.
9404
9405 SunRay Gotcha #1: Note that even though your SunRay X11 DISPLAY is
9406 something like :137, x11vnc still tries for port 5900 as its listening
9407 port if it can get it, in which case the VNC display (i.e. the
9408 information you supply to the VNC viewer) is something like
9409 sunray-server:0 (note the :0 corresponding to port 5900, it is not
9410 :137). If it cannot get 5900, it tries for 5901, and so on. You can
9411 also try to force the port (and thereby the VNC display) using the
9412 -rfbport NNNN option.
9413
9414 Especially on a busy Sun Ray server it is often difficult to find free
9415 ports for both VNC and the HTTP Java applet server to listen on. This
9416 script, vnc_findports may be of use for doing this automatically. It
9417 suggests x11vnc command line options based on netstat output that
9418 lists the occupied ports. It is even more difficult to start
9419 vncserver/Xvnc on a busy Sun Ray because then 3 ports (HTTP, VNC, and
9420 X11), all separated by 100 are needed! This script, findvncports may
9421 be helpful as well. Both scripts start at VNC display :10 and work
9422 their way up.
9423
9424 SunRay Gotcha #2: If you get an error like:
9425 shmget(tile) failed.
9426 shmget: No space left on device
9427
9428 when starting up x11vnc that most likely means all the shared memory
9429 (shm) slots are filled up on your machine. The Solaris default is only
9430 100, and that can get filled up in a week or so on a SunRay server
9431 with lots of users. If the shm slot is orphaned (e.g. creator process
9432 dies) the slot is not reclaimed. You can view the shm slots with the
9433 "ipcs -mA" command. If there are about 100 then you've probably hit
9434 this problem. They can be cleaned out (by the owner or by root) using
9435 the ipcrm command. I wrote a script shm_clear that finds the orphans
9436 and lists or removes them. Longer term, have your SunRay sysadmin add
9437 something like this to /etc/system:
9438 set shmsys:shminfo_shmmax = 0x2000000
9439 set shmsys:shminfo_shmmni = 0x1000
9440
9441 SunRay Gotcha #3: Some SunRay installations have implemented
9442 suspending certain applications when a SunRay session is in a
9443 disconnected state (e.g. Java Badge pulled out, utdetach, etc). This
9444 is a good thing because it limits hoggy or runaway apps from wasting
9445 the shared CPU resource. Think how much CPU and memory I/O is wasted
9446 by a bunch of Firefox windows running worthless Flash animations while
9447 your session is disconnected!
9448
9449 So some sites have implemented scripts to suspend (e.g. kill -STOP)
9450 certain apps when your badge is removed from the SunRay terminal. When
9451 you reattach, it kill -CONT them. This causes problems for viewing the
9452 detached SunRay session via x11vnc: those suspended apps will not
9453 respond (their windows will be blank or otherwise inactive).
9454
9455 What to do? Well, since you are going to be using the application you
9456 might as well unfreeze it rather than starting up a 2nd instance. Here
9457 is one way to do it using the kill -CONT mechanism:
9458 kill -CONT `ps -ealf | grep ' T ' | grep $LOGNAME | awk '{print $4}'`
9459
9460 If you want to be a good citizen and re-freeze them before you exit
9461 x11vnc this script could be of use:
9462 #!/bin/sh
9463 #
9464 # kill -STOP/-CONT script for x11vnc (or other) SunRay usage ("freezes"
9465 # certain apps from hogging resources when disconnected).
9466 #
9467 # Put here a pattern that matches the apps that are frozen:
9468 #
9469 appmatch="java_vm|jre|netscape-bin|firefox-bin|realplay|acroread|mozilla-bin"
9470
9471 if [ "X$1" = "Xfreeze" ]; then
9472 pkill -STOP -U $LOGNAME "$appmatch"
9473 elif [ "X$1" = "Xthaw" ]; then
9474 pkill -CONT -U $LOGNAME "$appmatch"
9475
9476 elif [ "$RFB_MODE" = "afteraccept" -a "$RFB_STATE" = "NORMAL" ]; then
9477 # a valid x11vnc login.
9478 if [ "$RFB_CLIENT_COUNT" = "1" ]; then
9479 # only one client present.
9480 pkill -CONT -U $LOGNAME "$appmatch"
9481 fi
9482 elif [ "$RFB_MODE" = "gone" -a "$RFB_STATE" = "NORMAL" ]; then
9483 # a valid x11vnc login.
9484 if [ "$RFB_CLIENT_COUNT" = "0" ]; then
9485 # last client present has just left.
9486 pkill -STOP -U $LOGNAME "$appmatch"
9487 fi
9488 fi
9489 exit 0
9490
9491 If you called the script "goodcitizen" you could type "goodcitizen
9492 thaw" to unfreeze them, and then "goodcitizen freeze" to refreeze
9493 them. One could also use these x11vnc options "-afteraccept
9494 goodcitizen -gone goodcitizen" to do it automatically.
9495
9496 SunRay Gotcha #4: Recent versions of the Sun Ray Server Software
9497 SRSS (seems to be version 3.0 or 3.1) have a "misfeature" that when
9498 the session is disconnected (i.e. badge/smartcard out) the screen
9499 locker (xscreensaver) will freeze the X server just when the "Enter
9500 Password" dialog box appears. So you cannot unlock the screen remotely
9501 via x11vnc!
9502
9503 Update: please see Bob Doolittle's detailed description of the this
9504 issue at the bottom of this section.
9505
9506 Here "freeze" means "stop other X clients from inserting keyboard and
9507 mouse input and from viewing the current contents of the screen". Or
9508 something like that; the upshot is x11vnc can't do its normal thing.
9509
9510 There are several workarounds for this.
9511
9512 1) The easiest one by far is to put these lines in your
9513 $HOME/.dtprofile file:
9514 SUN_SUNRAY_UTXLOCK_PREF="/usr/openwin/bin/xlock -mode blank"
9515 export SUN_SUNRAY_UTXLOCK_PREF
9516
9517 One might argue that xlock isn't particularly "pretty". (Just IMHO,
9518 but if something like this not being pretty actually gets in the way
9519 of your work I think some introspection may be in order. :-)
9520
9521 2) The problem has been traced to the pam_sunray.so PAM module.
9522 Evidently xscreensaver invokes this pam module and it communicates
9523 with utsessiond who in turn instructs the Xsun server to not process
9524 any synthetic mouse/keyboard input or to update the screen
9525 framebuffer. It is not clear if this is by design (security?) or
9526 something else.
9527
9528 In any event, the problem can be avoided, somewhat drastically, by
9529 commenting out the corresponding line in /etc/pam.conf:
9530 #xscreensaver auth sufficient /opt/SUNWut/lib/pam_sunray.so syncondisplay
9531
9532 Leave the other xscreensaver pam authentication lines unchanged. The
9533 dtsession-SunRay line may also need to be commented out to avoid the
9534 problem for CDE sessions. N.B. it is possible the application of a
9535 SSRS patch, etc, may re-enable that /etc/pam.conf line. It may be
9536 difficult to convince a sysadmin to make this change.
9537
9538 3) A more forceful way is to kill the xscreensaver process from a
9539 shell prompt whenever you connect via x11vnc and the screen is in a
9540 locked state:
9541 pkill -U $LOGNAME '^xscreensaver$'
9542
9543 And then after you are in be sure to restart it by typing something
9544 like:
9545 xscreensaver &
9546
9547 You may want to avoid restarting it until you are about to disconnect
9548 your VNC viewer (since if it locks the screen while you are working
9549 you'll be stuck again).
9550
9551 3') The above idea can be done a bit more cleanly by having x11vnc do
9552 it. Suppose we called the following script xss_killer:
9553 #!/bin/sh
9554 #
9555 # xss_killer: kill xscreensaver after a valid x11vnc client logs in.
9556 # Restart xscreensaver and lock it when the last client
9557 # disconnects.
9558
9559 PATH=/usr/openwin/bin:/usr/bin:$PATH
9560 export PATH
9561
9562 if [ "$RFB_MODE" = "afteraccept" -a "$RFB_STATE" = "NORMAL" ]; then
9563 # a valid x11vnc login.
9564 if [ "$RFB_CLIENT_COUNT" = "1" ]; then
9565 # only one client present.
9566 pkill -U $LOGNAME '^xscreensaver$'
9567 pkill -KILL -U $LOGNAME -f xscreensaver/hacks
9568 fi
9569 elif [ "$RFB_MODE" = "gone" -a "$RFB_STATE" = "NORMAL" ]; then
9570 # a valid x11vnc login.
9571 if [ "$RFB_CLIENT_COUNT" = "0" ]; then
9572 # last client present has just left.
9573 xscreensaver -nosplash &
9574 sleep 1
9575 xscreensaver-command -lock &
9576 fi
9577 fi
9578
9579 Then we would run x11vnc with these options: "-afteraccept xss_killer
9580 -gone xss_killer". The -afteraccept option (introduced in version 0.8)
9581 is used to run a command after a vncviewer has successfully logged in
9582 (note that this is a VNC login, not a Unix login, so you may not want
9583 to do this if you are really paranoid...)
9584
9585 Note if you use the above script and also plan to Ctrl-C (SIGINT)
9586 x11vnc you have to run the xscreensaver in a new process group to
9587 avoid killing it as well. One way to do this is via this kludge:
9588 perl -e 'setpgrp(0,0); exec "xscreensaver -nosplash &"'
9589
9590 in the above script.
9591
9592 4) There appears to be a bug in pam_sunray.so in that it doesn't seem
9593 to honor the convention that, say, DISPLAY=unix:3 means to use Unix
9594 sockets to connect to display 3 on the local machine (this is a bit
9595 faster than TCP sockets). Rather, it thinks the display is a non-local
9596 one to a machine named "unix" (that usually does not resolve to an IP
9597 address).
9598
9599 Amusingly, this can be used to bypass the pam_sunray.so blocking of
9600 Xsun that prevents one from unlocking the screen remotely via x11vnc.
9601 One could put something like this in $HOME/.dtprofile to kill any
9602 existing xscreensavers and then start up a fresh xscreensaver using
9603 DISPLAY=unix:N
9604 # stop/kill any running xscreensavers (probably not running yet, but to be sure
9605 )
9606 xscreensaver-command -exit
9607 pkill -U $LOGNAME '^xscreensaver$'
9608 env DISPLAY=`echo $DISPLAY | sed -e 's/^.*:/unix:/'` xscreensaver &
9609
9610
9611 Important: Note that all of the above workarounds side-step the
9612 pam_sunray.so PAM module in one way or another. You'll need to see if
9613 that is appropriate for your site's SunRay / smartcard usage. Also,
9614 these hacks may break other things and so you may want to test various
9615 scenarios carefully. E.g. check corner cases like XDMCP/dtremote,
9616 NSCM, etc.
9617
9618
9619 Update May 2008: Here is a useful description of this issue from Bob
9620 Doolittle who is a developer for Sun Ray at Sun. I don't have the time
9621 to digest and distill it and then adjust the above methods to provide
9622 a clearer description, so I just include below the description he sent
9623 me with the hope that it will help some users:
9624
9625 In SRSS 4.0 and earlier, the purpose of pam_sunray.so in the "auth"
9626 PAM stack of screensavers is to enable NSCM (and, although this is
9627 much less commonly used, "SC", which is configured when 3rd-party
9628 software is installed to allow smartcards to be used as part of the
9629 authentication process) to work. It should have no effect with
9630 smartcards. Currently, however, it does block the PAM stack for all
9631 sessions, which causes xscreensaver, when it locks a disconnected
9632 session, to not process any mouse or keyboard events as you
9633 describe (unless xscreensaver does an X server grab, however, other
9634 applications should still be able to draw in the session although
9635 xscreensaver may be playing tricks like putting a black window on
9636 top of everything). In both of the NSCM and SC models,
9637 authentication occurs in a separate session before SRSS will
9638 reconnect to the user session, in which case pam_sunray.so causes
9639 xscreensaver to just unlock the screen without prompting the user
9640 to enter their password again. To do this, pam_sunray.so has to
9641 block until the session becomes reconnected, so it can query SRSS
9642 at that time to determine whether the user has already
9643 authenticated or not. In SRSS 4.0 and earlier releases,
9644 pam_sunray.so could have been optimized to not block smartcard
9645 sessions, although since the session is disconnected this typically
9646 isn't important (except in the x11vnc case, as you've observed).
9647
9648 In SRSS 4.1, however, for increased security the out-of-session
9649 authentication model has been extended to *all* session types, so
9650 pam_sunray.so will be required in all cases unless users are
9651 willing to authenticate twice upon hotdesking (e.g. when their card
9652 is inserted). In future, we may do away with pam_sunray.so, and in
9653 fact with any traditional screen locker in the user session, since
9654 SRSS itself will be providing better security than a screen locker
9655 running entirely within the user's X session is capable of
9656 providing.
9657
9658 Your trick of setting DISPLAY to unix:DPY will effectively disable
9659 pam_sunray.so (I'm not sure I'd call that a bug - you're going out
9660 of your way to do something that wouldn't occur in the normal
9661 course of events, and really provides no useful value other than to
9662 tickle this behavior in pam_sunray.so). This will mean that, in
9663 SRSS 4.0 and earlier releases, users will be prompted for their
9664 passwords twice when reconnecting to their sessions for NSCM and SC
9665 session types. In 4.1, disabling pam_sunray.so in this way will
9666 cause this double-authentication to occur for *all* sessions,
9667 including simple smartcard sessions. Users may be willing to pay
9668 that price in order to be able to use x11vnc in disconnected
9669 sessions. I like this hack, personally. It's a little less
9670 convenient than some of the other approaches you describe, but it's
9671 lighter-weight and more secure than most of the other approaches,
9672 and provides the value of being able to use x11vnc in locked
9673 sessions.
9674
9675 Here are some other minor notes: - I wouldn't recommend storing
9676 your display in your .dtprofile, unless you're willing to live with
9677 a single session at a time. Personally, I often find myself using
9678 several sessions, in several FoGs, for short periods of time so
9679 this would certainly break. IMO it's pretty easy to use $DISPLAY to
9680 do what you want on the fly, as needed, so I don't think the price
9681 of breaking multiple-session functionality would be worth the
9682 convenience, to me at least. Here's some ksh/bash syntax to extract
9683 the hostname and display number on the fly which you may find
9684 useful:
9685 HOSTNAME=${DISPLAY%:*}
9686 FULLDPY=${DISPLAY#*:}
9687 DPYNUM=${FULLDPY%.*}
9688
9689 A final note may give you some insight into other clever hacks in
9690 this area: - Check out utaction. It's a very handy little utility
9691 that can be run as a daemon in the user session which will invoke a
9692 specified command upon session connects and/or disconnects.
9693 Personally, I start one up in my .dtprofile as follows:
9694 utaction -c $HOME/.srconnectrc -d $HOME/.srdisconnectrc &
9695
9696 This then allows me to construct a .srconnectrc script containing
9697 useful commands I'd like to have run every time I insert my
9698 smartcard, and a .srdisconnectrc script of commands to be run every
9699 time I remove my smartcard (or, connect/disconnect to my session
9700 via NSCM or SC). This can be used for things like notifying a chat
9701 client of away status, as well as some of the hacks you've
9702 described on your page such as freeze/unfreeze, or perhaps to
9703 terminate an xscreensaver and start up a new one with the unix:DPY
9704 $DISPLAY specification as you describe (although it probably makes
9705 most sense to do this at login time, as opposed to every connect or
9706 disconnect event).
9707
9708 =======================================================================
9709 http://www.karlrunge.com/x11vnc/ssl.html:
9710
9711
9712 _________________________________________________________________
9713
9714 Notes on x11vnc SSL Certificates and Key Management:
9715
9716 The simplest scheme ("x11vnc -ssl TMP") is where x11vnc generates a
9717 temporary, self-signed certificate each time (automatically using
9718 openssl(1)) and the VNC viewer client accepts the certificate without
9719 question (e.g. user clicks "Yes" in a dialog box. Perhaps the dialog
9720 allows them to view the certificate too). Also note stunnel's default
9721 is to quietly accept all certificates.
9722
9723 The encryption this provides protects against all passive sniffing of
9724 the VNC traffic and passwords on the network and so it is quite good,
9725 but it does not prevent a Man-In-The-Middle active attack: e.g. an
9726 attacker intercepts the VNC client stream and sends it his own Public
9727 key for SSL negotiation (pretending to be the server). Then it makes a
9728 connection to SSL x11vnc itself and forwards the data back and forth.
9729 He can see all the traffic and modify it as well.
9730
9731 Most people don't seem to worry about Man-In-The-Middle attacks these
9732 days; they are more concerned about passive sniffing of passwords,
9733 etc. Perhaps someday that will change if attack tools are used more
9734 widely to perform the attack. NOTE: There are hacker tools like
9735 dsniff/webmitm and cain that implement SSL Man-In-The-Middle attacks.
9736 They all rely on the client not bothering to check that the cert is
9737 valid.
9738
9739 If you are not worried about Man-In-The-Middle attacks you do not have
9740 to read the techniques described in the rest of this document.
9741
9742 To prevent Man-In-The-Middle attacks, certificates must somehow be
9743 verified. This requires the VNC client side have some piece of
9744 information that can be used to verify the SSL x11vnc server.
9745 Alternatively, although rarely done, x11vnc can verify VNC Clients'
9746 certificates, see the -sslverify option that is discussed below.
9747
9748 There are a number of ways to have the client authenticate the SSL
9749 x11vnc server. The quickest way perhaps would be to copy (safely) the
9750 certificate x11vnc prints out:
9751 26/03/2006 21:12:00 Creating a temporary, self-signed PEM certificate...
9752 ...
9753 -----BEGIN CERTIFICATE-----
9754 MIIC4TCCAkqgAwIBAgIJAMnwCaOjvEKaMA0GCSqGSIb3DQEBBAUAMIGmMQswCQYD
9755 VQQGEwJBVTEOMAwGA1UEBxMFTGludXgxITAfBgNVBAsTGGFuZ2VsYS0xMTQzNDI1
9756 NTIwLjQxMTE2OTEPMA0GA1UEChMGeDExdm5jMS4wLAYDVQQDEyV4MTF2bmMtU0VM
9757 (more lines) ...
9758 -----END CERTIFICATE-----
9759
9760 to the client machine(s) and have the client's SSL machinery (e.g.
9761 stunnel, Web Browser, or Java plugin) import the certificate. That way
9762 when the connection to x11vnc is made the client can verify that is it
9763 the desired server on the other side of the SSL connection.
9764
9765 So, for example suppose the user is using the SSL enabled Java VNC
9766 Viewer and has incorporated the x11vnc certificate into his Web
9767 browser on the viewing side. If he gets a dialog that the certificate
9768 is not verified he knows something is wrong. It may be a
9769 Man-In-The-Middle attack, but more likely x11vnc certificate has
9770 changed or expired or his browser was reinstalled and/or lost the
9771 certificate, etc, etc.
9772
9773 As another example, if the user was using stunnel with his VNC viewer
9774 (this is mentioned in this FAQ), e.g. STUNNEL.EXE on Windows, then he
9775 would have to set the "CAfile = path-to-the-cert" and "verify = 2"
9776 options in the stunnel.conf file before starting up the tunnel. If a
9777 x11vnc certificate cannot be verified, stunnel will drop the
9778 connection (and print a failure message in its log file).
9779
9780 A third example, using the VNC viewer on Unix with stunnel the wrapper
9781 script can be used this way: "ss_vncviewer -verify ./x11vnc.crt
9782 far-away.east:0" where ./x11vnc.crt is the copied certificate x11vnc
9783 printed out.
9784
9785 As fourth example, our SSVNC enhanced tightvnc viewer can also use
9786 these certificate files for server authentication. You can load them
9787 via the SSVNC 'Certs...' dialog and set 'ServerCert' to the
9788 certificate file you safely copied there.
9789
9790 Note that in principle the copying of the certificate to the client
9791 machine(s) itself could be altered by a Man-In-The-Middle attack! You
9792 can't win; it is very difficult to be completely secure. It is
9793 unlikely the attacker could predict how you were going to send it
9794 unless you had, say, done it many times before the same way. SSH is a
9795 very good way to send it (but of course it too depends on public keys
9796 being sent unaltered between the two machines!).
9797
9798 If you are really paranoid, I'm sure you'll figure out a really good
9799 way to transport the certificates. See the Certificate Authority
9800 scheme below for a way to make this easier (you just have to do it
9801 once).
9802
9803 _________________________________________________________________
9804
9805 Saving SSL certificates and keys:
9806
9807 Now, it would be very inconvenient to copy the new temporary
9808 certificate every time x11vnc is run in SSL mode. So for convenience
9809 there is the "SAVE" keyword to instruct x11vnc to save the certificate
9810 it creates:
9811 x11vnc -ssl SAVE -display :0 ...
9812
9813 This behavior is now the default, you must use "TMP" for a temporary
9814 one. It will save the certificate and private key in these files:
9815 ~/.vnc/certs/server.crt
9816 ~/.vnc/certs/server.pem
9817
9818 The ".crt" file contains only the certificate and should be safely
9819 copied to the VNC Viewer machine(s) that will be authenticating the
9820 x11vnc server. The ".pem" file contains both the certificate and the
9821 private key and should be kept secret. (If you don't like the default
9822 location ~/.vnc/certs, e.g. it is on an NFS share and you are worried
9823 about local network sniffing, use the -ssldir dir option to point to a
9824 different directory.)
9825
9826 So the next time you run "x11vnc -ssl SAVE ..." it will read the
9827 server.pem file directly instead of creating a new one.
9828
9829 You can manage multiple SSL x11vnc server keys in this simple way by
9830 using:
9831 x11vnc -ssl SAVE-key2 -display :0 ...
9832
9833 etc, where you put whatever name you choose for the key after "SAVE-".
9834 E.g. "-ssl SAVE-fred".
9835
9836 Also, if you want to be prompted to possibly change the made up names,
9837 etc. that x11vnc creates (e.g. "x11vnc-SELF-SIGNED-CERT-7762" for the
9838 CommonName) for the certificates distinguished name (DN), then use
9839 "x11vnc -ssl SAVE_PROMPT ...", "x11vnc -ssl SAVE_PROMPT-fred ..." etc.
9840 when you create the key the first time.
9841
9842 Tip: when prompting, if you choose the CommonName entry to be the full
9843 internet hostname of the machine the clients will be connecting to
9844 then that will avoid an annoying dialog box in their Web browsers that
9845 warn that the CommonName doesn't match the hostname.
9846
9847 _________________________________________________________________
9848
9849 Passphrases for server keys:
9850
9851 Well, since now with the "SAVE" keyword the certificate and key will
9852 be longer lived, one can next worry about somebody stealing the
9853 private key and pretending to be the x11vnc server! How to guard
9854 against this?
9855
9856 The first is that the file is created with perms 600 (i.e. -rw-------)
9857 to make it harder for an untrusted user to copy the file. A better way
9858 is to also encrypt the private key with a passphrase. You are prompted
9859 whether you want to do this or not when the key is first created under
9860 "-ssl SAVE" mode ("Protect key with a passphrase? y/n"). It is
9861 suggested that you use a passphrase. The inconvenience is every time
9862 you run "x11vnc -ssl SAVE ..." you will need to supply the passphrase
9863 to access the private key:
9864 06/04/2006 11:39:11 using PEM /home/runge/.vnc/certs/server.pem 0.000s
9865
9866 A passphrase is needed to unlock an OpenSSL private key (PEM file).
9867 Enter passphrase>
9868
9869 before x11vnc can continue.
9870
9871 _________________________________________________________________
9872
9873 Being your own Certificate Authority:
9874
9875 A very sophisticated way that scales well if the number of users is
9876 large is to use a Certificate Authority (CA) whose public certificate
9877 is available to all of the VNC clients and whose private key has been
9878 used to digitally sign the x11vnc server certificate(s).
9879
9880 The idea is as follows:
9881 * A special CA cert and key is generated.
9882 * Its private key is always protected by a good passphrase since it
9883 is only used for signing.
9884 * The CA cert is (safely) distributed to all machines where VNC
9885 clients will run.
9886 * One or more x11vnc server certs and keys are generated.
9887 * The x11vnc server cert is signed with the CA private key.
9888 * x11vnc is run using the server key. (e.g. "-ssl SAVE")
9889 * VNC clients (viewers) can now authenticate the x11vnc server
9890 because they have the CA certificate.
9891
9892 The advantage is the CA cert only needs to be distributed once to the
9893 various machines, that can be done even before x11vnc server certs are
9894 generated.
9895
9896 As above, it is important the CA private key and the x11vnc server key
9897 are kept secret, otherwise someone could steal them and pretend to be
9898 the CA or the x11vnc server if they copied the key. It is recommended
9899 that the x11vnc server keys are also protected via a passphrase (see
9900 the previous section).
9901
9902 Optionally, VNC viewer certs and keys could also be generated to
9903 enable the x11vnc server to authenticate each client. This is not
9904 normally done (usually a simple viewer password scheme is used), but
9905 this can be useful in some situations. These optional steps go like
9906 this:
9907 * One or more VNC client certs and keys are generated.
9908 * These VNC client certs are signed with the CA private key.
9909 * The VNC client certs+keys are safely distributed to the
9910 corresponding client machines.
9911 * x11vnc is told to verify clients by using the CA cert. (e.g.
9912 "-sslverify CA")
9913 * When VNC clients (viewers) connect, they must authenticate
9914 themselves to x11vnc by using their client key.
9915
9916 Again, it is a good idea if the client private keys are protected with
9917 a passphrase, otherwise if stolen they could be used to gain access to
9918 the x11vnc server. Once distributed to the client machines, there is
9919 no need to keep the client key on the CA machine that generated and
9920 signed it. You can keep the client certs if you like because they are
9921 public.
9922
9923 _________________________________________________________________
9924
9925 How to do the above CA steps with x11vnc:
9926
9927 Some utility commands are provided to ease the cert+key creation,
9928 signing, and management: -sslGenCA, -sslGenCert, -sslDelCert,
9929 -sslEncKey, -sslCertInfo. They basically run the openssl(1) command
9930 for you to manage the certs/keys. It is required that openssl(1) is
9931 installed on the machine and available in PATH. All commands can be
9932 pointed to an alternate toplevel certificate directory via the -ssldir
9933 option if you don't want to use the default ~/.vnc/certs.
9934
9935 1) To generate your Certificate Authority (CA) cert and key run this:
9936 x11vnc -sslGenCA
9937
9938 Follow the prompts, you can modify any informational strings you care
9939 to. You will also be required to encrypt the CA private key with a
9940 passphrase. This generates these files:
9941 ~/.vnc/certs/CA/cacert.pem (the CA public certificate)
9942 ~/.vnc/certs/CA/private/cakey.pem (the encrypted CA private key)
9943
9944 If you want to use a different directory use -ssldir It must supplied
9945 with all subsequent SSL utility options to point them to the correct
9946 directory.
9947
9948 2) To generate a signed x11vnc server cert and key run this:
9949 x11vnc -sslGenCert server
9950
9951 As with the CA generation, follow the prompts and you can modify any
9952 informational strings that you care to. This will create the files:
9953 ~/.vnc/certs/server.crt (the server public certificate)
9954 ~/.vnc/certs/server.pem (the server private key + public cert)
9955
9956 It is recommended to protect the server private key with a passphrase
9957 (you will be prompted whether you want to). You will need to provide
9958 it whenever you start x11vnc using this key.
9959
9960 3) Start up x11vnc using this server key:
9961 x11vnc -ssl SAVE -display :0 ...
9962
9963 (SAVE corresponds to server.pem, see -sslGenCert server somename info
9964 on creating additional server keys, server-somename.crt ...)
9965
9966 4) Next, safely copy the CA certificate to the VNC viewer (client)
9967 machine(s). Perhaps:
9968 scp ~/.vnc/CA/cacert.pem clientmachine:.
9969
9970 5) Then the tricky part, make it so the SSL VNC Viewer uses this
9971 certificate! There are a number of ways this might be done, it depends
9972 on what your client and/or SSL tunnel is. Some examples:
9973
9974 For the SSL Java VNC viewer supplied with x11vnc in
9975 classes/ssl/VncViewer.jar or classes/ssl/SignedVncViewer.jar:
9976 * Import the cacert.pem cert into your Web Browser (e.g. Edit ->
9977 Preferences -> Privacy & Security -> Manage Certificates ->
9978 WebSites -> Import)
9979 * Or Import the cacert.pem cert into your Java Plugin (e.g. run
9980 ControlPanel, then Security -> Certificates -> Secure Site ->
9981 Import)
9982
9983 When importing, one would give the browser/java-plugin the path to the
9984 copied cacert.pem file in some dialog. Note that the Web browser or
9985 Java plugin is used for the server authentication. If the user gets a
9986 "Site not verified" message while connecting he should investigate
9987 further.
9988
9989 For the use of stunnel (e.g. on Windows) one would add this to the
9990 stunnel.conf:
9991 # stunnel.conf:
9992 client = yes
9993 options = ALL
9994 CAfile = /path/to/cacert.pem # or maybe C:\path\to\cacert.pem
9995 [myvncssl]
9996 accept = 5901
9997 connect = far-away.east:5900
9998
9999 (then point the VNC viewer to localhost:1).
10000
10001 Here is an example for the Unix stunnel wrapper script ss_vncviewer in
10002 our SSVNC package:
10003 ss_vncviewer -verify ./cacert.pem far-away.east:0
10004
10005 Our SSVNC enhanced tightvnc viewer GUI can also use the certificate
10006 file for server authentication. You can load it via the SSVNC
10007 'Certs...' dialog and set 'ServerCert' to the cacert.pem file you
10008 safely copied there.
10009
10010 _________________________________________________________________
10011
10012 Tricks for server keys:
10013
10014 To create additional x11vnc server keys do something like this:
10015 x11vnc -sslGenCert server myotherkey
10016
10017 and use it this way:
10018 x11vnc -ssl SAVE-myotherkey ...
10019
10020 The files will be ~/.vnc/certs/server-myotherkey.{crt,pem}
10021
10022 You can also create a self-signed server key:
10023 x11vnc -sslGenCert server self:third_key
10024
10025 and use it this way:
10026 x11vnc -ssl SAVE-self:third_key ...
10027
10028 This key is not signed by your CA. This can be handy to have a key set
10029 separate from your CA when you do not want to create a 2nd CA
10030 cert+key.
10031
10032 _________________________________________________________________
10033
10034 Using external CA's:
10035
10036 You don't have to use your own CA cert+key, you can use a third
10037 party's instead. Perhaps you have a company-wide CA or you can even
10038 have your x11vnc certificate signed by a professional CA (e.g.
10039 www.thawte.com or www.verisign.com or perhaps the free certificate
10040 service www.startcom.org or www.cacert.org).
10041
10042 The advantage to doing this is that the VNC client machines will
10043 already have the CA certificates installed and you don't have to
10044 install it on each machine.
10045
10046 To generate an x11vnc server cert+key this way you should generate a
10047 "request" for a certicate signing something like this (we use the name
10048 "external" in this example, it could be anything you want):
10049 x11vnc -sslGenCert server req:external
10050
10051 This will create the request file:
10052 ~/.vnc/certs/server-req:external.req
10053
10054 Which you should send to the external CA. When you get the signed
10055 certificate back from them, save it in the file:
10056 ~/.vnc/certs/server-req:external.crt
10057
10058 and create the .pem this way:
10059 mv ~/.vnc/certs/server-req:external.key ~/.vnc/certs/server-req:external.
10060 pem
10061 chmod 600 ~/.vnc/certs/server-req:external.pem
10062 cat ~/.vnc/certs/server-req:external.crt >> ~/.vnc/certs/server-req:external.
10063 pem
10064
10065 You also rename the two files (.crt and .pem) to have a shorter
10066 basename if you like. E.g.:
10067 mv ~/.vnc/certs/server-req:external.pem ~/.vnc/certs/server-ext.pem
10068 mv ~/.vnc/certs/server-req:external.crt ~/.vnc/certs/server-ext.crt
10069
10070 and the use via "x11vnc -ssl SAVE-ext ...", etc.
10071
10072 On the viewer side make sure the external CA's certificate is
10073 installed an available for the VNC viewer software you plan to use.
10074
10075 _________________________________________________________________
10076
10077 Using Client Keys for Authentication:
10078
10079 You can optionally create certs+keys for your VNC client machines as
10080 well. After distributing them to the client machines you can have
10081 x11vnc verify the clients using SSL. Here is how to do this:
10082
10083 x11vnc -sslGenCert client dilbert
10084 x11vnc -sslGenCert client wally
10085 x11vnc -sslGenCert client alice
10086 ...
10087
10088 As usual, follow the prompts if you want to change any of the info
10089 field values. As always, it is a good idea (although inconvenient) to
10090 protect the private keys with a passphrase. These files are created:
10091 ~/.vnc/certs/clients/dilbert.crt
10092 ~/.vnc/certs/clients/dilbert.pem
10093 ...
10094
10095 Note that these are kept in a clients subdirectory.
10096
10097 Next, safely copy the .pem files to each corresponding client machine
10098 and incorporate them into the VNC viewer / SSL software (see the ideas
10099 mentioned above for the CA and server keys). The only difference is
10100 these certificates might be referred to as "My Certificates" or
10101 "Client Certificates". They are used for client authentication (which
10102 is relatively rare for SSL).
10103
10104 After copying them you can delete the clients/*.pem files for extra
10105 safety because the private keys are not needed by the x11vnc server.
10106 You don't really need the clients/*.crt files either (because they
10107 have been signed by the CA). But they could come in handy for tracking
10108 or troubleshooting, etc.
10109
10110 Now start up x11vnc and instruct it to verify connecting clients via
10111 SSL and the CA cert:
10112 x11vnc -ssl SAVE -sslverify CA
10113
10114 The "CA" special token instructs x11vnc to use its CA signed certs for
10115 verification.
10116
10117 For arbitrary self-signed client certificates (no CA) it might be
10118 something like this:
10119 x11vnc -ssl SAVE -sslverify path/to/client.crt
10120 x11vnc -ssl SAVE -sslverify path/to/client-hash-dir
10121 x11vnc -ssl SAVE -sslverify path/to/certs.txt
10122
10123 Where client.crt would be an individual client certificate;
10124 client-hash-dir a directory of file names based on md5 hashes of the
10125 certs (see -sslverify); and certs.txt signifies a single file full of
10126 client certificates.
10127
10128 Finally, connect with your VNC viewer using the key. Here is an
10129 example for the Unix stunnel wrapper script ss_vncviewer: using client
10130 authentication (and the standard server authentication with the CA
10131 cert):
10132 ss_vncviewer -mycert ./dilbert.pem -verify ./cacert.pem far-away.east:0
10133
10134 Our SSVNC enhanced tightvnc viewer can also use these openssl .pem
10135 files (you can load them via Certs... -> MyCert dialog).
10136
10137 It is also possible to use -sslverify on a per-client key basis, and
10138 also using self-signed client keys (x11vnc -sslGenCert client
10139 self:dilbert)
10140
10141 Now a tricky part is to get Web browsers or Java Runtime to import and
10142 use the openssl .pem cert+key files. See the next paragraph on how to
10143 convert them to pkcs12 format. If you find a robust way to import them
10144 and and get them to use the cert please let us know!
10145
10146 Here is how to convert our openssl crt/pem files to pkcs12 format
10147 (contains both the client certificate and key) that can be read by Web
10148 browsers and Java for use in client authentication:
10149 openssl pkcs12 -export -in mycert.crt -inkey mycert.pem -out mycert.p12
10150
10151 it will ask for a passphrase to protect mycert.p12. Some software
10152 (e.g. Java ControlPanel) may require a non-empty passphrase. Actually,
10153 since our .pem contains both the certificate and private key, you
10154 could just supply it for the -in and remove the -inkey option. It
10155 appears that for certificates only importing, our .crt file is
10156 sufficient and can be read by Mozilla/Firefox and Java...
10157
10158 If you have trouble getting your Java Runtime to import and use the
10159 cert+key, there is a workaround for the SSL-enabled Java applet. On
10160 the Web browser URL that retrieves the VNC applet, simply add a
10161 "/?oneTimeKey=..." applet parameter (see ssl-portal for more details
10162 on applet parameters; you don't need to do the full portal setup
10163 though). The value of the oneTimeKey will be the very long string that
10164 is output of the onetimekey program found in the classes/ssl x11vnc
10165 directory. Or you can set oneTimeKey=PROMPT in which case the applet
10166 will ask you to paste in the long string. These scheme is pretty ugly,
10167 but it works. A nice application of it is to make one time keys for
10168 users that have already logged into a secure HTTPS site via password.
10169 A cgi program then makes a one time key for the logged in user to use:
10170 it is passed back over HTTPS as the applet parameter in the URL and so
10171 cannot be sniffed. x11vnc is run to use that key via -sslverify.
10172
10173 Update: as of Apr 2007 in the 0.9.1 x11vnc tarball there is a new
10174 option setting "-users sslpeer=" that will do a switch user much like
10175 -unixpw does, but this time using the emailAddress field of the
10176 Certificate subject of the verified Client. This mode requires
10177 -sslverify turned on to verify the clients via SSL. This mode can be
10178 useful in situations using -create or -svc where a new X server needs
10179 to be started up as the authenticated user (but unlike in -unixpw
10180 mode, the unix username is not obviously known).
10181
10182 _________________________________________________________________
10183
10184 Revoking Certificates:
10185
10186 A large, scaled-up installation may benefit from being able to revoke
10187 certificates (e.g. suppose a user's laptop with a vnc client or server
10188 key is compromised.) You can use this option with x11vnc: -sslCRL. See
10189 the info at that link for a guide on what openssl(1) commands you will
10190 need to run to revoke a certificate.
10191
10192 _________________________________________________________________
10193
10194 Additional utlities:
10195
10196 You can get information about your keys via -sslCertInfo. These lists
10197 all your keys:
10198 x11vnc -sslCertInfo list
10199 x11vnc -sslCertInfo ll
10200
10201 (the latter is long format).
10202
10203 These print long output, including the public certificate, for
10204 individual keys:
10205 x11vnc -sslCertInfo server
10206 x11vnc -sslCertInfo dilbert
10207 x11vnc -sslCertInfo all (every key, very long)
10208
10209 If you want to add a protecting passphrase to a key originally created
10210 without one:
10211 x11vnc -sslEncKey SAVE
10212 x11vnc -sslEncKey SAVE-fred
10213
10214 To delete a cert+key:
10215 x11vnc -sslDelCert SAVE
10216 x11vnc -sslDelCert SAVE-fred
10217 x11vnc -sslDelCert wally
10218
10219 (but rm(1) will be just as effective).
10220
10221 _________________________________________________________________
10222
10223 Chained Certificates:
10224
10225 There is increasing interest in using chained CA's instead of a single
10226 CA. The merits of using chained CA's are not described here besides to
10227 say its use may make some things easier when a certificate needs to be
10228 revoked.
10229
10230 x11vnc supports chained CA certificates. We describe a basic use case
10231 here.
10232
10233 Background: Of course the most straight forward way to use SSL with
10234 x11vnc is to use no CA at all (see above): a self-signed certificate
10235 and key is used and its certificate needs to be safely copied to the
10236 client side. This is basically the same as the SSH style of managing
10237 keys. Next level up, one can use a single CA to sign server keys: then
10238 only the CA's certificate needs to be safely copied to the client
10239 side, this can happen even before any server certs are created (again,
10240 see all of the discussion above.)
10241
10242 With a certificate chain there are two or more CA's involved. Perhaps
10243 it looks like this:
10244 root_CA ---> intermediate_CA ---> server_cert
10245
10246 Where the arrow basically means "signs".
10247
10248 In this usage mode the client (viewer-side) will have root_CA's
10249 certificate available for verifying (and nothing else.) If the viewer
10250 only received server_cert's certificate, it would not have enough info
10251 to verify the server. The client needs to have intermediate_CA's cert
10252 as well. The way to do this with x11vnc (i.e. an OpenSSL using app) is
10253 to concatenate the server_cert's pem and the intermediate_CA's
10254 certificate together.
10255
10256 For example, suppose the file intermediate_CA.crt had
10257 intermediate_CA's certificate. And suppose the file server_cert.pem
10258 had the server's certificate and private key pair as described above
10259 on this page. We need to do this:
10260 cat intermediate_CA.crt >> server_cert.pem
10261
10262 (Note: the order of the items inside the file matters; intermediate_CA
10263 must be after the server key and cert) and then we run x11vnc like
10264 this:
10265 x11vnc -ssl ./server_cert.pem ...
10266
10267 Then, on the VNC viewer client side, the viewer authenticates the
10268 x11vnc server by using root_CA's certificate. Suppose that is in a
10269 file named root_CA.crt, then using the SSVNC wrapper script
10270 ss_vncviewer (which is also included in the SSVNC package) as our
10271 example, we have:
10272 ss_vncviewer -verify ./root_CA.crt hostname:0
10273
10274 (where "hostname" is the machine where x11vnc is running.) One could
10275 also use the SSVNC GUI setting Certs -> ServerCert to the root_CA.crt
10276 file. Any other SSL enabled VNC viewer would use root_CA.crt in a
10277 similar way.
10278 _________________________________________________________________
10279
10280 Creating Chained Certificates:
10281
10282 Here is a fun example using VeriSign's "Trial Certificate" program.
10283 Note that VeriSign has a Root CA and also an Intermediate CA and uses
10284 the latter to sign customers certificates. So this provides an easy
10285 way to test out the chained certificates mechanism with x11vnc.
10286
10287 First we created a test x11vnc server key:
10288 openssl genrsa -out V1.key 1024
10289
10290 then we created a certificate signing request (CSR) for it:
10291 openssl req -new -key V1.key -out V1.csr
10292
10293 (we followed the prompts and supplied information for the various
10294 fields.)
10295
10296 Then we went to VeriSign's page http://www.verisign.com/ssl/index.html
10297 and clicked on "FREE TRIAL" (the certificate is good for 14 days.) We
10298 filled in the forms and got to the point where it asked for the CSR
10299 and so we pasted in the contents of the above V1.csr file. Then, after
10300 a few more steps, VeriSign signed and emailed us our certificate.
10301
10302 The VeriSign Trial certificates were found here:
10303 http://www.verisign.com/support/verisign-intermediate-ca/Trial_Secure_Server_
10304 Root/index.html
10305 http://www.verisign.com/support/verisign-intermediate-ca/trial-secure-server-
10306 intermediate/index.html
10307
10308 The former was pasted into a file V-Root.crt and the latter was pasted
10309 into V-Intermediate.crt
10310
10311 We pasted our Trial certificate that VeriSign signed and emailed to us
10312 into a file named V1.crt and then we typed:
10313 cat V1.key V1.crt > V1.pem
10314 cat V1.pem V-Intermediate.crt > V1-combined.pem
10315 chmod 600 V1.pem V1-combined.pem
10316
10317 So now the file V1-combined.pem has our private key and (VeriSign
10318 signed) certificate and VeriSign's Trial Intermediate certificate.
10319
10320 Next, we start x11vnc:
10321 x11vnc -ssl ./V1-combined.pem ...
10322
10323 and finally, on the viewer side (SSVNC wrapper script example):
10324 ss_vncviewer -verify ./V-Root.crt hostname:0
10325
10326 One will find that only that combination of certs and keys will work,
10327 i.e. allow the SSL connection to be established. Every other
10328 combination we tried failed (note that ss_vncviewer uses the external
10329 stunnel command to handle the SSL so we are really testing stunnel's
10330 SSL implementation on the viewer side); and so the system works as
10331 expected.
10332 _________________________________________________________________
10333
10334 VNC Client Authentication using Certificate Chains:
10335
10336 Now, going the other way around with the client authenticating himself
10337 via this chain of SSL certificates, x11vnc is run this way:
10338 x11vnc -ssl SAVE -sslverify ./V-Root.crt ...
10339
10340 (note since the server must always supply a cert, we use its normal
10341 self-signed, etc., one via "-ssl SAVE" and use the VeriSign root cert
10342 for client authentication via -sslverify. The viewer must now supply
10343 the combined certificates, e.g.:
10344 ss_vncviewer -mycert ./V1-combined.pem hostname:0
10345 _________________________________________________________________
10346
10347 Using OpenSSL and x11vnc to create Certificate Chains:
10348
10349 Although the x11vnc CA mechanism (-sslGenCA and -sslGenCert; see
10350 above) was designed to only handle a single root CA (to sign server
10351 and/or client certs) it can be coerced into creating a certificate
10352 chain by way of an extra openssl(1) command.
10353
10354 We will first create two CA's via -sslGenCA; then use one of these CA
10355 to sign the other; create a new (non-CA) server cert; and append the
10356 intermediate CA's cert to the server cert to have everything needed in
10357 the one file.
10358
10359 Here are the commands we ran to do what the previous paragraph
10360 outlines.
10361
10362 First we create the two CA's, called CA_root and CA_Intermediate here,
10363 in separate directories via x11vnc:
10364 x11vnc -ssldir ~/CA_Root -sslGenCA
10365 (follow the prompts, we included "CA_Root", e.g. Common Name, to aid ident
10366 ifying it)
10367
10368 x11vnc -ssldir ~/CA_Intermediate -sslGenCA
10369 (follow the prompts, we included "CA_Intermediate", e.g. Common Name, to a
10370 id identifying it)
10371
10372 Next backup CA_Intermediate's cert and then sign it with CA_Root:
10373 mv ~/CA_Intermediate/CA/cacert.pem ~/CA_Intermediate/CA/cacert.pem.ORIG
10374 cd ~/CA_Root
10375 openssl ca -config ./CA/ssl.cnf -policy policy_anything -extensions v3_ca -no
10376 text -ss_cert ~/CA_Intermediate/CA/cacert.pem.ORIG -out ~/CA_Intermediate/CA/ca
10377 cert.pem
10378
10379 Note that it is required to cd to the ~/CA_Root directory and run the
10380 openssl command from there.
10381
10382 You can print out info about the cert you just modified by:
10383 openssl x509 -noout -text -in ~/CA_Intermediate/CA/cacert.pem
10384
10385 Now we create an x11vnc server cert named "test_chain" that is signed
10386 by CA_Intermediate:
10387 x11vnc -ssldir ~/CA_Intermediate -sslGenCert server test_chain
10388 (follow the prompts)
10389
10390 You can print out information about this server cert just created via
10391 this command:
10392 x11vnc -ssldir ~/CA_Intermediate -sslCertInfo SAVE-test_chain
10393
10394 This will tell you the full path to the server certificate, which is
10395 needed because we need to manually append the CA_Intermediate cert for
10396 the chain to work:
10397 cat ~/CA_Intermediate/CA/cacert.pem >> ~/CA_Intermediate/server-test_chain.pe
10398 m
10399
10400 Now we are finally ready to use it. We can run x11vnc using this
10401 server cert+key by either this command:
10402 x11vnc -ssldir ~/CA_Intermediate -ssl SAVE-test_chain ...
10403
10404 or this command:
10405 x11vnc -ssl ~/CA_Intermediate/server-test_chain.pem ...
10406
10407 since they are equivalent (both load the same pem file.)
10408
10409 Finally we connect via VNC viewer that uses CA_Root to verify the
10410 server. As before we use ss_vncviewer:
10411 ss_vncviewer -verify ~/CA_Root/CA/cacert.pem hostname:0
10412
10413 Client Certificates (see above) work in a similar manner.
10414
10415 So although it is a little awkward with the extra steps (e.g.
10416 appending the CA_Intermediate cert) it is possible. If you want to do
10417 this entirely with openssl(1) you will have to learn the openssl
10418 commands corresponding to -genCA and -genCert. You may be able to find
10419 guides on the Internet to do this. Starting with x11vnc 0.9.10, you
10420 can have it print out the wrapper scripts it uses via: -sslScripts
10421 (you will still need to fill in a few pieces of information; ask if it
10422 is not clear from the source code.)
10423
10424 _________________________________________________________________
10425
10426 More info:
10427
10428 See also this article for some some general info and examples using
10429 stunnel and openssl on Windows with VNC. Also
10430 http://www.stunnel.org/faq/certs.html is a very good source of
10431 information on SSL certificate creation and management.
10432
10433 =======================================================================
10434 http://www.karlrunge.com/x11vnc/ssl-portal.html:
10435
10436
10437 _________________________________________________________________
10438
10439 Using Apache as an SSL Gateway to multiple x11vnc servers inside a
10440 firewall:
10441
10442 Background:
10443
10444 The typical way to allow access to x11vnc (or any other VNC server)
10445 running on multiple workstations inside a firewall is via SSH. The
10446 user somewhere out on the Internet logs in to the SSH gateway machine
10447 and uses port forwarding (e.g. ssh -t -L 5900:myworkstation:5900
10448 user@gateway) to set up the encrypted channel that VNC is then
10449 tunneled through. Next he starts up the VNC viewer on the machine
10450 where he is sitting directed to the local tunnel port (e.g.
10451 localhost:0).
10452
10453 The SSH scheme is nice because it is a widely used and well tested
10454 login technique for users connecting to machines inside their company
10455 or home firewall. For VNC access it is a bit awkward, however, because
10456 SSH needs to be installed on the Viewer machine and the user usually
10457 has to rig up his own port redirection plumbing (however, see our
10458 other tool).
10459
10460 Also, some users have restrictive work environments where SSH and
10461 similar applications are prohibited (i.e. only outgoing connections to
10462 standard WWW ports from a browser are allowed, perhaps mediated by a
10463 proxy server). These users have successfully used the method described
10464 here for remote access.
10465
10466 With the SSL support in x11vnc and the SSL enabled Java VNC viewer
10467 applet, a convenient and secure alternative exists that uses the
10468 Apache webserver as a gateway. The idea is that the company or home
10469 internet connection is already running apache as a web server (either
10470 SSL or non-SSL) and we add to it the ability to act as a gateway for
10471 SSL VNC connections. The only thing needed on the Viewer side is a
10472 Java enabled Web Browser: the user simply enters a URL that starts the
10473 entire VNC connection process. No VNC or SSH specific software needs
10474 to be installed on the viewer side machine.
10475
10476 The stunnel VNC viewer stunnel wrapper script provided (ss_vncviewer)
10477 can also take advantage of the method described here with its -proxy
10478 option.
10479
10480 _________________________________________________________________
10481
10482 Simpler Solutions: This apache SSL VNC portal solution may be too much
10483 for you. It is mainly intended for automatically redirecting to
10484 MULTIPLE workstations inside the firewall. If you only have one or two
10485 inside machines that you want to access, the method described here is
10486 overly complicated! See below for some simpler (and still non-SSH)
10487 encrypted setups.
10488
10489 Also see the recent (Mar/2010) desktop.cgi x11vnc desktop web login
10490 CGI script that achieves much of what the method describes here
10491 (especially if its 'port redirection' feature is enabled.)
10492 _________________________________________________________________
10493
10494
10495
10496 There are numerous ways to achieve this with Apache. We present one of
10497 the simplest ones here.
10498
10499 Important: these sorts of schemes allow incoming connections from
10500 anywhere on the Internet to fixed ports on machines inside the
10501 firewall. Care must be taken to implement and test thoroughly. If one
10502 is paranoid one can (and should) add extra layers of protection. (e.g.
10503 extra passwords, packet filtering, SSL certificate verification, etc).
10504
10505 Also, it is easy to miss the point that unless precautions are taken
10506 to verify SSL Certificates, then the VNC Viewer is vulnerable to
10507 man-in-the-middle attacks (but not to the more common passive sniffing
10508 attacks). Note that there are hacker tools like dsniff/webmitm and
10509 cain that implement SSL Man-In-The-Middle attacks. They rely on the
10510 client not bothering to check the cert.
10511 _________________________________________________________________
10512
10513 The Holy Grail: a single https port (443)
10514
10515 Before we discuss the self-contained apache examples here, we want to
10516 mention that many x11vnc users who read this page and implement the
10517 apache SSL VNC portal ask for something that (so far) seems difficult
10518 or impossible to do entirely inside apache:
10519 * A single port, 443 (the default https:// port), is open to the
10520 Internet
10521 * It is HTTPS/SSL encrypted
10522 * It handles both VNC traffic and Java VNC Applet downloads.
10523 * And the server can also serve normal HTTPS webpages, CGI, etc.
10524
10525 It is the last item that makes it tricky (otherwise the method
10526 described on this page will work). If you are interested in such a
10527 solution and are willing to run a separate helper program
10528 (connect_switch) look here. Also, see this apache patch.
10529 _________________________________________________________________
10530
10531 Example:
10532
10533 The scheme described here sets up apache on the firewall/gateway as a
10534 regular Web proxy into the intranet and allows connections to a single
10535 fixed port on a limited set of machines.
10536
10537 The configuration described in this section does not use the mod_ssl
10538 apache module (the optional configuration described in the section
10539 "Downloading the Java applet to the browser via HTTPS" does take
10540 advantage of mod_ssl)
10541
10542 In this example suppose the gateway machine running apache is named
10543 "www.gateway.east" (e.g. it may also provide normal web service). We
10544 also choose the Internet-facing port for this VNC service to be port
10545 563. One could choose any port, including the default HTTP port 80.
10546
10547 Detail: We choose 563 because it is the rarely used SNEWS port that is
10548 often allowed by Web proxies for the CONNECT method. The idea is the
10549 user may be coming out of another firewall using a proxy (not the one
10550 we describe here, that is, the case when two proxies are involved,
10551 e.g. one at work and another Apache (described here) at home
10552 redirecting into our firewall; the "double proxy" or "double firewall"
10553 problem). Using port 563 simplifies things because CONNECT's to it are
10554 usually allowed by default.
10555
10556 We also assume all of the x11vnc servers on the internal machines are
10557 all listening on port 5915 ("-rfbport 5915") instead of the default
10558 5900. This is to limit any unintended proxy redirections to a lesser
10559 used port, and also to stay out of the way of normal VNC servers on
10560 the same machines. One could obviously implement a scheme that handles
10561 different ports, but we just discuss this simple setup here.
10562
10563 So we basically assume x11vnc has been started this way on all of the
10564 workstations to be granted VNC access:
10565 x11vnc -ssl SAVE -http -display :0 -forever -rfbauth ~/.vnc/passwd -rfbport 5
10566 915
10567
10568 i.e. we force SSL VNC connections, port 5915, serve the Java VNC
10569 viewer applet, and require a VNC password (another option would be
10570 -unixpw). The above command could also be run out of inetd(8). It can
10571 also be used to autodetect the user's display and Xauthority data.
10572
10573
10574 These sections are added to the httpd.conf apache configuration file
10575 on www.gateway.east:
10576
10577 # In the global section you need to enable these modules.
10578 # Note that the ORDER MATTERS! mod_rewrite must be before mod_proxy
10579 # (so that we can check the allowed host list via rewrite)
10580 #
10581 LoadModule rewrite_module modules/mod_rewrite.so
10582 LoadModule proxy_module modules/mod_proxy.so
10583 LoadModule proxy_connect_module modules/mod_proxy_connect.so
10584 LoadModule proxy_ftp_module modules/mod_proxy_ftp.so
10585 LoadModule proxy_http_module modules/mod_proxy_http.so
10586 <IfDefine SSL>
10587 LoadModule ssl_module modules/mod_ssl.so
10588 </IfDefine>
10589
10590
10591 # Near the bottom of httpd.conf you put the port 563 virtual host:
10592
10593 Listen 563
10594
10595 <VirtualHost *:563>
10596
10597 # Allow proxy CONNECT requests *only* to port 5915.
10598 # If the machines use different ports, e.g. 5916 list them here as well:
10599 #
10600 ProxyRequests On
10601 AllowCONNECT 5915
10602
10603 RewriteEngine On
10604
10605 # Convenience rules to expand applet parameters. These do not have a traili
10606 ng "/"
10607 #
10608 # /vnc for http jar file downloading:
10609 #
10610 RewriteRule /vnc/([^/]+)$ /vnc/$1/index.vnc?CONNECT=$1+5915&PO
10611 RT=563&urlPrefix=_2F_vnc_2F_$1 [R,NE,L]
10612 RewriteRule /vnc/trust/([^/]+)$ /vnc/$1/index.vnc?CONNECT=$1+5915&PO
10613 RT=563&urlPrefix=_2F_vnc_2F_$1&trustAllVncCerts=yes [R,NE,L]
10614 RewriteRule /vnc/proxy/([^/]+)$ /vnc/$1/proxy.vnc?CONNECT=$1+5915&PO
10615 RT=563&urlPrefix=_2F_vnc_2F_$1&forceProxy=yes [R,NE,L]
10616 RewriteRule /vnc/trust/proxy/([^/]+)$ /vnc/$1/proxy.vnc?CONNECT=$1+5915&PO
10617 RT=563&urlPrefix=_2F_vnc_2F_$1&forceProxy=yes&trustAllVncCerts=yes [R,NE,L]
10618
10619 # Read in the allowed host to vnc display mapping file. It looks like:
10620 #
10621 # host1 15
10622 # host2 15
10623 # ...
10624 #
10625 # the display "15" means 5815 for http applet download, 5915 for SSL vnc.
10626 #
10627 RewriteMap vnchosts txt:/dist/apache/conf/vnc.hosts
10628
10629 # Proxy: check for the CONNECT hostname and port being in the vnc.hosts list
10630 .
10631 #
10632 RewriteCond %{THE_REQUEST} ^CONNECT [NC]
10633 RewriteCond %{REQUEST_URI} ^(.*):(.*)$
10634 RewriteCond ${vnchosts:%1|NOTFOUND} NOTFOUND
10635 RewriteRule ^.*$ /VNCFAIL [F,L]
10636
10637 RewriteCond %{THE_REQUEST} ^CONNECT [NC]
10638 RewriteCond %{REQUEST_URI} ^(.*):(.*)$
10639 RewriteCond 59${vnchosts:%1}=%2 !^(.*)=(\1)$
10640 RewriteRule ^.*$ /VNCFAIL [F,L]
10641
10642
10643 # Remap /vnc to the proxy http download (e.g. http://host:5815)
10644 #
10645 # First, fail if it starts with the string /vnc0:
10646 #
10647 RewriteRule ^/vnc0.* /VNCFAIL [F,L]
10648 #
10649 # Next, map the prefix to /vnc0/host:protocol:port
10650 #
10651 RewriteRule ^/vnc/([^/]+)/(.*) /vnc0/$1:http:58${vnchosts:$1|NOTFOUND}/$2
10652 [NE]
10653 #
10654 # Drop any not found:
10655 #
10656 RewriteRule ^/vnc0.*NOTFOUND.* /VNCFAIL [F,L]
10657
10658 # Construct the proxy URL and retrieve it:
10659 #
10660 RewriteRule ^/vnc0/([^/]+):([^/]+):([^/]+)/(.*) $2://$1:$3/$4 [P,NE,L]
10661
10662 </VirtualHost>
10663
10664 Then restart apache (perhaps: "apachectl stop; apachectl start").
10665
10666 Note that the listing of allowed internal workstations is done in an
10667 external file (/dist/apache/conf/vnc.hosts in the example above), the
10668 format is like this:
10669 # allowed vnc hosts file:
10670 hostname1 15
10671 hostname2 15
10672 ...
10673
10674 You list the hostname and the VNC display (always 15 in our example).
10675 Only to these hosts will the external VNC viewers be able to connect
10676 to (via the HTTP CONNECT method).
10677
10678 The above setup requires mod_rewrite and mod_proxy be enabled in the
10679 apache web server. In this example they are loaded as modules (and
10680 note that mod_rewrite must be listed before mod_proxy);
10681
10682 The user at the Java enabled Web browser would simply enter this URL
10683 into the browser:
10684 http://www.gateway.east:563/vnc/host2
10685
10686 to connect to internal workstation host2, etc.
10687
10688 Important: do not put a trailing "/" on the URL, since that will
10689 defeat the RewriteRules that look for the hostname at the very end.
10690
10691 There will be a number of SSL certificate, etc, dialogs he will have
10692 to respond to in addition to any passwords he is required to provide
10693 (this depends on how you set up user authentication for x11vnc).
10694
10695 If a second Web proxy is involved (i.e. the user's browser is inside
10696 another firewall and policy requires using a Web proxy server) then
10697 use this URL:
10698 http://www.gateway.east:563/vnc/proxy/host2
10699
10700 This will involve downloading a signed java viewer applet jar file
10701 that is able to interact with the internal proxy for the VNC
10702 connection. See this FAQ for more info on how this works. Note:
10703 sometimes with the Proxy case if you see 'Bad Gateway' error you will
10704 have to wait 10 or so seconds and then hit reload. This seems to be
10705 due to having to wait for a Connection Keepalive to terminate...
10706
10707 For completeness, the "trust" cases that skip a VNC certificate dialog
10708 (discussed below) would be entered as:
10709 http://www.gateway.east:563/vnc/trust/host2
10710 http://www.gateway.east:563/vnc/trust/proxy/host2
10711
10712 You can of course choose shorter or more easy to remember URL formats.
10713 Just change the Convenience RewriteRules in httpd.conf.
10714
10715 _________________________________________________________________
10716
10717 Port Variations:
10718
10719 Note that you can run this on the default HTTP port 80 instead of port
10720 563. If you do not expect to have a browser connecting from inside a
10721 proxying firewall (where sometimes only connections to ports 443 and
10722 563 are allowed) this should be fine. Use "80" instead of "563" in the
10723 httpd.conf config file (you may need to merge it with other default
10724 port 80 things you have there).
10725
10726 Then the URL's will be a bit simpler:
10727 http://www.gateway.east/vnc/host2
10728 http://www.gateway.east/vnc/trust/host2
10729
10730 etc.
10731
10732 Besides 80 one could use any other random port number (since there are
10733 so many port scans on 80, a little obscurity might be useful).
10734
10735 One option is to use port "443" (the default https:// port) instead of
10736 "563". In this case Apache is not configured for mod_ssl; we just
10737 happen to use port "443" in the way any random port would be used.
10738 This could be handy if the Viewer side environment is restrictive in
10739 that it only allows outgoing connections to ports 80 and 443 (and,
10740 say, you didn't want to use port 80, or you wanted to use 80 for
10741 something else). Another reason for using 443 would be some web proxy
10742 environments only allow the CONNECT method to go to port 443 (and not
10743 even the case 563 we use above).
10744
10745 _________________________________________________________________
10746
10747 Details:
10748
10749 Let's go through the httpd.conf additions in detail from the top.
10750
10751 The LoadModules directives load the necessary apache modules. Note
10752 that mod_rewrite must be listed first. If you are compiling from
10753 scratch something like this worked for us:
10754 ./configure --enable-proxy=shared --enable-proxy-connect=shared --enable-ssl=
10755 shared --enable-rewrite=shared --prefix=/dist/apache
10756
10757 Then the VirtualHost *:563 virtual host section starts.
10758
10759 The "ProxyRequests On" and "AllowCONNECT 5915" enable the web server
10760 to forward proxy requests to port 5915 (and only this port) INSIDE the
10761 firewall. Think about the implications of this thoroughly and test it
10762 carefully.
10763
10764 The RewriteRule's are for convenience only so that the URL entered
10765 into the Web browser does not need the various extra parameters, e.g.:
10766 http://www.gateway.east:563/vnc/host2/index.vnc?CONNECT=host2+5915&PORT=563,
10767 blah,blah...
10768
10769 (or otherwise make direct edits to index.vnc to set these parameters).
10770 The forceProxy=yes parameter is passed to the applet to force the use
10771 of a outgoing proxy socket connection. Use it only if the Web browser
10772 is inside a separate Web proxying environment (i.e. large corporation)
10773
10774 The rewrites with parameter urlPrefix are described under Tricks for
10775 Better Response. The "trust" ones (also described under Tricks) with
10776 trustAllVncCerts tell the Java VNC applet to skip a dialog asking
10777 about the VNC Certificate. They are a bit faster and more reliable
10778 than the original method. In the best situation they lead to being
10779 logged in 20 seconds or less (without them the time to login can be
10780 much longer since a number of connections must timeout).
10781
10782 All of the x11vnc Java Viewer applet parameters are described in the
10783 file classes/ssl/README
10784
10785 The external file /dist/apache/conf/vnc.hosts containing the allowed
10786 VNC server hostnames is read in. Its 2nd column contains the VNC
10787 display of the host (always 15 in our example; if you make it vary you
10788 will need to adjust some lines in the httpd.conf accordingly, e.g.
10789 AllowCONNECT). This list is used to constrain both the Jar file
10790 download URL and the proxy CONNECT the VNC viewer makes to only the
10791 intended VNC servers.
10792
10793 Limiting the proxy CONNECT is done with the two sets of RewriteCond
10794 conditions.
10795
10796 Limiting the Jar file download URL is done in the remaining 4
10797 RewriteRule's.
10798
10799 Note that these index.vnc and VncViewer.jar downloads to the browser
10800 are not encrypted via SSL, and so in principle could be tampered with
10801 by a really bad guy. The subsequent VNC connection, however, is
10802 encrypted through a single SSL connection (it makes a CONNECT straight
10803 to x11vnc). See below for how to have these initial downloads
10804 encrypted as well (if the apache web server has SSL/mod_ssl, i.e.
10805 https, enabled and configured).
10806
10807 Unfortunately the Java VNC viewer applet currently is not able to save
10808 its own list of Certificates (e.g. the user says trust this VNC
10809 certificate 'always'). This is because an applet it cannot open local
10810 files, etc. Sadly, the applet cannot even remember certificates in the
10811 same browser session because it is completely reinitialized for each
10812 connection (see below).
10813
10814 _________________________________________________________________
10815
10816 Too Much?
10817
10818 If these apache rules are a little too much for you, there is a little
10819 bit simpler scheme where you have to list each of the individual
10820 machines in the httpd.conf and ssl.conf files. It may be a little more
10821 typing to maintain, but perhaps being more straight forward (less
10822 RewriteRule's) is desirable.
10823
10824 _________________________________________________________________
10825
10826 Problems?
10827
10828 To see example x11vnc output for a successful https://host:5900/
10829 connection with the Java Applet see This Page.
10830
10831 _________________________________________________________________
10832
10833 Some Ideas for adding extra authentication, etc. for the paranoid:
10834 * VNC passwords: -rfbauth, -passwdfile, or -usepw. Even adding a
10835 simple company-wide VNC password helps block unwanted access.
10836 * Unix passwords: -unixpw
10837 * SSL Client certificates: -sslverify
10838 * Apache AuthUserFile directive: .htaccess, etc.
10839 * Filter connections based on IP address or hostname.
10840 * Use Port-knocking on your firewall as described in: Enhanced
10841 TightVNC Viewer (ssvnc).
10842 * Add proxy password authentication (requires Viewer changes?)
10843 * Run a separate instance of Apache that provides this VNC service
10844 so it can be brought up and down independently of the normal web
10845 server.
10846 * How secure is the Client side? Public machines in internet cafes,
10847 etc, are often hacked, with backdoors and VNC servers of their
10848 own. Prefer using your own firewalled laptop to a public machine.
10849
10850
10851 _________________________________________________________________
10852
10853 Using non-Java viewers with this scheme:
10854
10855 The ss_vncviewer stunnel wrapper script for VNC viewers has the -proxy
10856 option that can take advantage of this method.
10857 ss_vncviewer -proxy www.gateway.east:563 host1:15
10858
10859 For the case of the "double proxy" situation (see below) supply both
10860 separated by a comma.
10861 ss_vncviewer -proxy proxy1.foobar.com:8080,www.gateway.east:563 host1:15
10862
10863 For the Enhanced TightVNC Viewer (ssvnc) GUI (it uses ss_vncviewer on
10864 Unix) put 'host1:15' into the 'VNC Server' entry box, and here are
10865 possible Proxy/Gateway entries
10866 Proxy/Gateway: www.gateway.east:563
10867 Proxy/Gateway: proxy1.foobar.com:8080,www.gateway.east:563
10868
10869 then click on the 'Connect' button.
10870
10871 _________________________________________________________________
10872
10873 Downloading the Java applet to the browser via HTTPS:
10874
10875 To have the Java applet downloaded to the user's Web Browser via an
10876 encrypted (and evidently safer) SSL connection the Apache webserver
10877 should be configured for SSL via mod_ssl.
10878
10879 It is actually possible to use the x11vnc Key Management utility
10880 "-sslGenCert" to generate your Apache/SSL .crt and .key files. (In
10881 brief, run something like "x11vnc -sslGenCert server self:apache" then
10882 copy the resulting self:apache.crt file to conf/ssl.crt/server.crt and
10883 extract the private key part from self:apache.pem and paste it into
10884 conf/ssl.key/server.key). Setting the env var REQ_ARGS='-days 1095'
10885 before running x11vnc will bump up the expiration date (3 years in
10886 this case).
10887
10888 Or you can use the standard methods described in the Apache mod_ssl
10889 documentation to create your keys. Then restart Apache, usually
10890 something like "apachectl stop" followed by "apachectl startssl"
10891
10892 In addition to the above sections in httpd.conf one should add the
10893 following to ssl.conf:
10894 SSLProxyEngine On
10895
10896 RewriteEngine On
10897
10898 # Convenience rules to expand applet parameters. These do not have a traili
10899 ng "/"
10900 #
10901 # /vnc http jar file downloading:
10902 #
10903 RewriteRule /vnc/([^/]+)$ /vnc/$1/index.vnc?CONNECT=$
10904 1+5915&PORT=563&httpsPort=443&GET=1&urlPrefix=_2F_vnc_2F_$1 [R,NE,L]
10905 RewriteRule /vnc/proxy/([^/]+)$ /vnc/$1/proxy.vnc?CONNECT=$
10906 1+5915&PORT=563&httpsPort=443&GET=1&urlPrefix=_2F_vnc_2F_$1&forceProxy=yes [R,N
10907 E,L]
10908 #
10909 # (we skipped the "trust" ones above, put them in if you like)
10910 #
10911 # /vncs https jar file downloading:
10912 #
10913 RewriteRule /vncs/([^/]+)$ /vncs/$1/index.vnc?CONNECT=$
10914 1+5915&PORT=563&httpsPort=443&GET=1&urlPrefix=_2F_vncs_2F_$1 [R,NE,L]
10915 RewriteRule /vncs/proxy/([^/]+)$ /vncs/$1/proxy.vnc?CONNECT=$
10916 1+5915&PORT=563&httpsPort=443&GET=1&urlPrefix=_2F_vncs_2F_$1&forceProxy=yes [R,
10917 NE,l]
10918 RewriteRule /vncs/trust/([^/]+)$ /vncs/$1/index.vnc?CONNECT=$
10919 1+5915&PORT=563&httpsPort=443&GET=1&urlPrefix=_2F_vncs_2F_$1&trustAllVncCerts=y
10920 es [R,NE,L]
10921 RewriteRule /vncs/trust/proxy/([^/]+)$ /vncs/$1/proxy.vnc?CONNECT=$
10922 1+5915&PORT=563&httpsPort=443&GET=1&urlPrefix=_2F_vncs_2F_$1&forceProxy=yes&tru
10923 stAllVncCerts=yes [R,NE,L]
10924
10925 # Convenience rules used for the connect_switch helper (requires Listen 127.
10926 0.0.1:443 above):
10927 #
10928 RewriteRule /vnc443/([^/]+)$ /vncs/$1/index.vnc?CONNECT=$
10929 1+5915&PORT=443&httpsPort=443&GET=1&urlPrefix=_2F_vncs_2F_$1 [R,NE,L]
10930 RewriteRule /vnc443/proxy/([^/]+)$ /vncs/$1/proxy.vnc?CONNECT=$
10931 1+5915&PORT=443&httpsPort=443&GET=1&urlPrefix=_2F_vncs_2F_$1&forceProxy=yes [R,
10932 NE,L]
10933 RewriteRule /vnc443/trust/([^/]+)$ /vncs/$1/index.vnc?CONNECT=$
10934 1+5915&PORT=443&httpsPort=443&GET=1&urlPrefix=_2F_vncs_2F_$1&trustAllVncCerts=y
10935 es [R,NE,L]
10936 RewriteRule /vnc443/trust/proxy/([^/]+)$ /vncs/$1/proxy.vnc?CONNECT=$
10937 1+5915&PORT=443&httpsPort=443&GET=1&urlPrefix=_2F_vncs_2F_$1&forceProxy=yes&tru
10938 stAllVncCerts=yes [R,NE,L]
10939
10940 # Read in the allowed host to vnc display mapping file. It looks like:
10941 #
10942 # host1 15
10943 # host2 15
10944 # ...
10945 #
10946 # the display "15" means 5915 for SSL VNC and 5815 for http applet download.
10947 #
10948 RewriteMap vnchosts txt:/dist/apache/conf/vnc.hosts
10949
10950
10951 # Remap /vnc and /vncs to the proxy http download (e.g. https://host:5915)
10952 #
10953 # First, fail if it starts with the string /vnc0:
10954 #
10955 RewriteRule ^/vnc0.* /VNCFAIL [F,L]
10956 #
10957 # Next, map the prefix to /vnc0:host:protocol:port
10958 #
10959 RewriteRule ^/vnc/([^/]+)/(.*) /vnc0/$1:http:58${vnchosts:$1|NOTFOUND}/$2
10960 [NE]
10961 RewriteRule ^/vncs/([^/]+)/(.*) /vnc0/$1:https:59${vnchosts:$1|NOTFOUND}/$2
10962 [NE]
10963 #
10964 # Drop any not found:
10965 #
10966 RewriteRule ^/vnc0.*NOTFOUND.* /VNCFAIL [F,L]
10967
10968 # Construct the proxy URL and retrieve it:
10969 #
10970 RewriteRule ^/vnc0/([^/]+):([^/]+):([^/]+)/(.*) $2://$1:$3/$4 [P,NE,L]
10971
10972 This is all in the "<VirtualHost _default_:443>" section of ssl.conf.
10973
10974 The user could then point the Web Browser to:
10975 https://www.gateway.east/vnc/host2
10976
10977 or
10978 https://www.gateway.east/vnc/proxy/host2
10979
10980 for the "double proxy" case. (Important: do not put a trailing "/" on
10981 the URL, since that will defeat the RewriteRules.)
10982
10983 As with the httpd.conf case, the external file
10984 (/dist/apache/conf/vnc.hosts in the above example) contains the
10985 hostnames of the allowed VNC servers.
10986
10987 Note that inside the firewall the Java applet download traffic is not
10988 encrypted (only over the Internet is SSL used) for these cases:
10989 https://www.gateway.east/vnc/host2
10990 https://www.gateway.east/vnc/proxy/host2
10991
10992 However for the special "vncs" rules above:
10993 https://www.gateway.east/vncs/host2
10994
10995 the Java applet download is encrypted via SSL for both legs. Note that
10996 the two legs are two separate SSL sessions. So the data is decrypted
10997 inside an apache process and reencrypted by the apache process for the
10998 2nd SSL session inside the same apache process (a very small gap one
10999 might overlook).
11000
11001 The "vncs/trust" ones are like the "trust" ones described earlier
11002 https://www.gateway.east/vncs/trust/mach2
11003
11004 and similarly for the httpsPort ones. See Tricks for Better Response.
11005
11006 In all of the above cases the VNC traffic from Viewer to x11vnc is
11007 encrypted end-to-end in a single SSL session, even for the "double
11008 proxy" case because the CONNECT method is used (there are actually two
11009 CONNECT's for the "double proxy" case). This part (the VNC traffic) is
11010 the most important part to have encrypted.
11011
11012 Note that the Certificate dialogs the user has in his web browser will
11013 be for the Apache Certificate, while for the Java applet it will be
11014 the x11vnc certificate.
11015
11016 Note also that you can have Apache serve up the Jar file VncViewer.jar
11017 and/or index.vnc/proxy.vnc instead of each x11vnc if you want to.
11018
11019 The rules in ssl.conf are similar to the ones in httpd.conf and so are
11020 not discussed in detail. The only really new thing is the /vncs
11021 handling to download the applet jar via HTTPS on port 5915.
11022
11023 The special entries "/vnc443" are only used for the special helper
11024 program (connect_switch) for the https port 443 only mode discussed
11025 here.
11026
11027 _________________________________________________________________
11028
11029 INETD automation:
11030
11031 The "single-port" (i.e. 5915) HTTPS applet download and VNC connection
11032 aspect shown here is convenient and also enables having x11vnc run out
11033 of inetd. That way x11vnc is run on demand instead of being run all
11034 the time (the user does not have to remember to start it). The first
11035 connections to inetd download index.vnc and the Jar file (via https)
11036 and the the last connection to inetd establishes the SSL VNC
11037 connection. Since x11vnc is restarted for each connection, this will
11038 be a bit slower than the normal process.
11039
11040 For example, the /etc/inetd.conf line could be:
11041 5915 stream tcp nowait root /usr/sbin/tcpd /usr/local/bin/x11vnc_ssl.sh
11042
11043 where the script x11vnc_ssl.sh looks something like this:
11044 #!/bin/sh
11045
11046 /usr/local/bin/x11vnc -inetd -oa /var/log/x11vnc-15.log \
11047 -ssl SAVE -http -unixpw -localhost \
11048 -display :0 -auth /home/THE_USER/.Xauthority
11049
11050 where, as usual, the inetd launching needs to know which user is
11051 typically using the display on that machine. One could imagine giving
11052 different users different ports, 5915, 5916, etc. to distinguish (then
11053 the script would need to be passed the username). mod_rewrite could be
11054 used to automatically map username in the URL to his port number.
11055
11056 A better way is to use the "-display WAIT:cmd=FINDDISPLAY" feature to
11057 autodetect the user and Xauthority data:
11058 #!/bin/sh
11059
11060 /usr/local/bin/x11vnc -inetd -oa /var/log/x11vnc-15.log \
11061 -ssl SAVE -http -unixpw -localhost -users unixpw= \
11062 -find
11063
11064 (we have used the alias -find for "-display WAIT:cmd=FINDDISPLAY".)
11065 This way the user must supply his Unix username and password and then
11066 his display and Xauthority data on that machine will be located and
11067 returned to x11vnc to allow it to attach. If he doesn't have a display
11068 running on that machine or he fails to log in correctly, the
11069 connection will be dropped.
11070
11071 The variant "-display WAIT:cmd=FINDCREATEDISPLAY" (aliased by
11072 "-create") will actually create a (virtual or real) X server session
11073 for the user if one doesn't already exist. See here for details.
11074
11075 To enable inetd operation for the non-HTTPS Java viewer download (port
11076 5815 in the above httpd.conf example) you will need to run x11vnc in
11077 HTTPONCE mode on port 5815: For example, the /etc/inetd.conf line
11078 could be:
11079 5815 stream tcp nowait root /usr/sbin/tcpd /usr/local/bin/x11vnc \
11080 -inetd -prog /usr/local/bin/x11vnc -oa /var/log/x11vnc-15.log \
11081 -http_ssl -display WAIT:cmd=HTTPONCE
11082
11083 where the long inetd.conf line has been split. Note how the -http_ssl
11084 tries to automatically find the .../classes/ssl subdirectory. This
11085 requires the -prog option available in x11vnc 0.8.4 (a shell script
11086 wrapper, e.g. /usr/local/bin/x11vnc_http.sh can be used to work around
11087 this).
11088
11089 Also note the use of "-ssl SAVE" above. This way a saved server.pem is
11090 used for each inetd invocation (rather generating a new one each time
11091 as happens for "-ssl TMP"). Note that it cannot have a protecting
11092 passphrase because inetd will not be able to supply it.
11093
11094 Another option is:
11095 5815 stream tcp nowait root /usr/sbin/tcpd /usr/local/bin/x11vnc \
11096 -inetd -httpdir /usr/local/share/x11vnc/classes/ssl \
11097 -oa /var/log/x11vnc-15.log -display WAIT:cmd=HTTPONCE
11098
11099 (this also requires a feature found in x11vnc 0.8.4).
11100 _________________________________________________________________
11101
11102 Other Ideas:
11103
11104 - The above schemes work, but they are a bit complicated with all of
11105 the rigging. There should be more elegant ways to configure Apache to
11106 do these, but we have not found them (please let us know if you
11107 discover something nice). However, once this scheme has been set up
11108 and is working it is easy to maintain and add/delete workstations,
11109 etc.
11110
11111 - In general Apache is not required, but it makes things convenient.
11112 The firewall itself could do the port redirection via its firewall
11113 rules. Evidently different Internet-facing ports would be required for
11114 each workstation. This could be set up using iptables rules for
11115 example. If there were just one or two machines this would be the
11116 easiest method. For example:
11117 iptables -t nat -A PREROUTING -p tcp -d 24.35.46.57 --dport 5901 -j DNAT --to
11118 -destination 192.168.1.2:5915
11119 iptables -t nat -A PREROUTING -p tcp -d 24.35.46.57 --dport 5902 -j DNAT --to
11120 -destination 192.168.1.3:5915
11121
11122 Where 24.35.46.57 is the internet IP address of the gateway. In this
11123 example 24.35.46.57:5901 is redirected to the internal machine
11124 192.168.1.2:5915 and 24.35.46.57:5902 is redirected to another
11125 internal machine 192.168.1.3:5915, both running x11vnc -ssl ... in SSL
11126 mode. For this example, the user would point the web browser to, e.g.:
11127 https://24.35.46.57:5901/?PORT=5901
11128
11129 or using the stunnel wrapper script:
11130 ss_vncviewer 24.35.46.57:1
11131
11132 One can achieve similar things with dedicated firewall/routers (e.g.
11133 Linksys) using the device's web or other interface to configure the
11134 firewall.
11135
11136 If the user may be coming out of a firewall using a proxy it may be
11137 better to redirect ports 443 and 563 (instead of 5901 and 5902) to the
11138 internal machines so that the user's proxy will allow CONNECTing to
11139 them.
11140
11141 - The redirection could also be done at the application level using a
11142 TCP redirect program (e.g. ip_relay or fancier ones). Evidently more
11143 careful internal hostname checking, etc., could be performed by the
11144 special purpose application to add security. See connect_switch which
11145 is somewhat related.
11146
11147 - One might imagine the ProxyPass could be done for the VNC traffic as
11148 well (for the ssl.conf case) to avoid the CONNECT proxying completely
11149 (which would be nice to avoid). Unfortunately we were not able to get
11150 this to work. Since HTTP is a request-response protocol (as opposed to
11151 a full bidirectional link required by VNC that CONNECT provides) this
11152 makes it difficult to do. It may be possible, but we haven't found out
11153 how yet.
11154
11155 All of the x11vnc Java Viewer applet parameters are described in the
11156 file classes/ssl/README
11157
11158 _________________________________________________________________
11159
11160 Tricks for Better Response and reliability:
11161
11162 The "original scheme" using httpd.conf and ssl.conf rewrites without
11163 urlPrefix and trustAllVncCerts above should work OK, but may lead to
11164 slow and/or unreliable loading of the applet and final connection to
11165 x11vnc. The following are what I do now to get better response and
11166 reliability. YMMV.
11167
11168 The problem with the "original scheme" is that there is a point where
11169 the VNC Viewer applet can try up to 3 times to retrieve the x11vnc
11170 certificate, since it needs to get it to show it to you and ask you if
11171 you accept it. This can add about 45 seconds to the whole process
11172 (which takes 1 to 1.5 minutes with all the dialogs) since a couple of
11173 those connections must time out. The "trust" items in the config add a
11174 parameter trustAllVncCerts=yes similar to the forceProxy=yes
11175 parameter. This can cut the total time to the VNC password prompt down
11176 to 15 seconds which is pretty good. (Note by ignoring the certificate
11177 this does not protect against man-in-the-middle attacks which are
11178 rare, but maybe the won't be so rare in the future... see
11179 dsniff/webmitm and cain)
11180
11181 First make sure the x11vnc SSL certificate+key is the same as
11182 Apache's. (otherwise you may get one extra dialog and/or one extra
11183 connection that has to time out).
11184
11185 The following RewriteRule's are the same now advocated in the
11186 instructions above.
11187
11188 The httpsPort and urlPrefix= parameters give hints to the applet to
11189 improve connecting: This is what goes in httpd.conf:
11190 RewriteEngine On
11191 RewriteRule /vnc/([^/]+)$ /vnc/$1/index.vnc?CONNECT=$1+5915&PO
11192 RT=563&urlPrefix=_2F_vnc_2F_$1 [R,NE]
11193 RewriteRule /vnc/trust/([^/]+)$ /vnc/$1/index.vnc?CONNECT=$1+5915&PO
11194 RT=563&urlPrefix=_2F_vnc_2F_$1&trustAllVncCerts=yes [R,NE]
11195 RewriteRule /vnc/proxy/([^/]+)$ /vnc/$1/proxy.vnc?CONNECT=$1+5915&PO
11196 RT=563&urlPrefix=_2F_vnc_2F_$1&forceProxy=yes [R,NE]
11197 RewriteRule /vnc/trust/proxy/([^/]+)$ /vnc/$1/proxy.vnc?CONNECT=$1+5915&PO
11198 RT=563&urlPrefix=_2F_vnc_2F_$1&forceProxy=yes&trustAllVncCerts=yes [R,NE]
11199
11200 The httpsPort and urlPrefix provide useful hints to the VNC Viewer
11201 applet when it connects to x11vnc to glean information about Proxies,
11202 certificates, etc.
11203
11204 This is what goes into ssl.conf:
11205 RewriteEngine On
11206 RewriteRule /vnc/([^/]+)$ /vnc/$1/index.vnc?CONNECT=$1+5915&P
11207 ORT=563&httpsPort=443&GET=1&urlPrefix=_2F_vnc_2F_$1 [R,NE]
11208 RewriteRule /vnc/proxy/([^/]+)$ /vnc/$1/proxy.vnc?CONNECT=$1+5915&P
11209 ORT=563&httpsPort=443&GET=1&urlPrefix=_2F_vnc_2F_$1&forceProxy=yes [R,NE]
11210 RewriteRule /vncs/([^/]+)$ /vncs/$1/index.vnc?CONNECT=$1+5915&P
11211 ORT=563&httpsPort=443&GET=1&urlPrefix=_2F_vncs_2F_$1 [R,NE]
11212 RewriteRule /vncs/proxy/([^/]+)$ /vncs/$1/proxy.vnc?CONNECT=$1+5915&P
11213 ORT=563&httpsPort=443&GET=1&urlPrefix=_2F_vncs_2F_$1&forceProxy=yes [R,NE]
11214 RewriteRule /vncs/trust/([^/]+)$ /vncs/$1/index.vnc?CONNECT=$1+5915&P
11215 ORT=563&httpsPort=443&GET=1&urlPrefix=_2F_vncs_2F_$1&trustAllVncCerts=yes [R,NE
11216 ]
11217 RewriteRule /vncs/trust/proxy/([^/]+)$ /vncs/$1/proxy.vnc?CONNECT=$1+5915&P
11218 ORT=563&httpsPort=443&GET=1&urlPrefix=_2F_vncs_2F_$1&forceProxy=yes&trustAllVnc
11219 Certs=yes [R,NE]
11220
11221 The rest is the same.
11222
11223 The httpsPort and urlPrefix and GET provide useful hints to the VNC
11224 Viewer applet when it connects to x11vnc to glean information about
11225 Proxies, certificates, etc, and also for the ultimate VNC connection
11226 (GET speeds this up by sending a special HTTP GET to cause x11vnc to
11227 immediately switch to the VNC protocol).
11228
11229 To turn these into URLs, as was done above, take the string in the
11230 RewriteRule, e.g. /vncs and turn it into
11231 https://gateway/vncs/machinename Similarly for non-https:
11232 http://gateway:563/vnc/machinename
11233
11234 If you use the 'trust' ones, you are performing NO checks, visual or
11235 otherwise, on the VNC SSL certificate. It is trusted without question.
11236 This speeds things up because it avoids a dialog about certificates,
11237 but of course has some risk WRT Man in the Middle attacks. I don't
11238 recommend them. It is better to use /vnc or /vncs and the first time
11239 you connect carefully check the Certificate and then tell your Browser
11240 and Java Virtual Machine to trust the certificate 'Always'. Then if
11241 you later get an unexpected dialog, you know something is wrong.
11242 Nearly always it is just a changed or expired certificate, but better
11243 safe than sorry...
11244
11245 =======================================================================
11246 http://www.karlrunge.com/x11vnc/enhanced_tightvnc_viewer.html:
11247
11248
11249 _________________________________________________________________
11250
11251 Enhanced TightVNC Viewer (SSVNC: SSL/SSH VNC viewer)
11252
11253 (To Downloads) (To Quick Start)
11254
11255 [ssvnc.gif] [ssvnc_windows.gif] [ssvnc_macosx.gif] . .
11256
11257
11258 The Enhanced TightVNC Viewer, SSVNC, adds encryption security to VNC
11259 connections.
11260
11261 The package provides a GUI for Windows, Mac OS X, and Unix that
11262 automatically starts up an STUNNEL SSL tunnel for SSL or ssh/plink for
11263 SSH connections to any VNC server, such as x11vnc, and then launches
11264 the VNC Viewer to use the encrypted tunnel.
11265
11266 The x11vnc server has built-in SSL support, however SSVNC can make SSL
11267 encrypted VNC connections to any VNC Server if they are running an SSL
11268 tunnel, such as STUNNEL or socat, at their end. SSVNC's SSH tunnel
11269 will work to any VNC Server host running sshd that you can log into.
11270
11271 The Enhanced TightVNC Viewer package started as a project to add some
11272 patches to the long neglected Unix TightVNC Viewer. However, now the
11273 front-end GUI, encryption, and wrapper scripts features possibly
11274 outweigh the Unix TightVNC Viewer improvements (see the lists below to
11275 compare).
11276
11277 The SSVNC Unix vncviewer can also be run without the SSVNC encryption
11278 GUI as an enhanced replacement for the xvncviewer, xtightvncviewer,
11279 etc., viewers.
11280
11281 In addition to normal SSL, SSVNC also supports the VeNCrypt SSL/TLS
11282 and Vino/ANONTLS encryption extensions to VNC on Unix, Mac OS X, and
11283 Windows. Via the provided SSVNC VeNCrypt bridge, VeNCrypt and ANONTLS
11284 encryption also works with any third party VNC Viewer (e.g. RealVNC,
11285 TightVNC, UltraVNC, etc...) you select via 'Change VNC Viewer'.
11286
11287 The short name for this project is "ssvnc" for SSL/SSH VNC Viewer.
11288 This is the name of the command to start it.
11289
11290 There is a simplified SSH-Only mode (sshvnc). And an even more
11291 simplified Terminal-Services mode (tsvnc) for use with x11vnc on the
11292 remote side.
11293
11294 The tool has many additional features; see the descriptions below.
11295
11296 It is a self-contained bundle, you could carry it around on, say, a
11297 USB memory stick / flash drive for secure VNC viewing from almost any
11298 machine, Unix, Mac OS X, and Windows (and if you create a directory
11299 named "Home" in the toplevel ssvnc directory on the drive your VNC
11300 profiles and certs will be kept there as well). For Unix, there is
11301 also a conventional source tarball to build and install in the normal
11302 way and not use a pre-built bundle.
11303
11304 _________________________________________________________________
11305
11306 Announcements:
11307
11308 Important: If you created any SSL certificates with SSVNC (or anything
11309 else) on a Debian or Ubuntu system from Sept. 2006 through May 2008,
11310 then those keys are likely extremely weak and can be easily cracked.
11311 The certificate files should be deleted and recreated on a non-Debian
11312 system or an updated one. See
11313 http://www.debian.org/security/2008/dsa-1571 for details. The same
11314 applies to SSH keys.
11315
11316 Please read this information on using SSVNC on workstations with
11317 Untrusted Local Users.
11318
11319 _________________________________________________________________
11320
11321 Feature List:
11322
11323 Wrapper scripts and a tcl/tk GUI were written to create these features
11324 for Unix, Mac OS X, and Windows:
11325 * SSL support for connections using the bundled stunnel program.
11326 * Automatic SSH connections from the GUI (system ssh is used on Unix
11327 and MacOS X; bundled plink is used on Windows)
11328 * Ability to Save and Load VNC profiles for different hosts.
11329 * You can also use your own VNC Viewer, e.g. UltraVNC or RealVNC,
11330 with the SSVNC encryption GUI front-end if you prefer.
11331 * Create or Import SSL Certificates and Private Keys.
11332 * Reverse (viewer listening) VNC connections via SSL and SSH.
11333 * VeNCrypt SSL/TLS VNC encryption support (used by VeNCrypt, QEMU,
11334 ggi, libvirt/virt-manager/xen, vinagre/gvncviewer/gtk-vnc)
11335 * ANONTLS SSL/TLS VNC encryption support (used by Vino)
11336 * VeNCrypt and ANONTLS are also enabled for any 3rd party VNC Viewer
11337 (e.g. RealVNC, TightVNC, UltraVNC ...) on Unix, MacOSX, and
11338 Windows via the provided SSVNC VeNCrypt Viewer Bridge tool (use
11339 'Change VNC Viewer' to select the one you want.)
11340 * Support for Web Proxies, SOCKS Proxies, and the UltraVNC repeater
11341 proxy (e.g. repeater://host:port+ID:1234). Multiple proxies may be
11342 chained together (3 max).
11343 * Support for SSH Gateway connections and non-standard SSH ports.
11344 * Automatic Service tunnelling via SSH for CUPS and SMB Printing,
11345 ESD/ARTSD Audio, and SMB (Windows/Samba) filesystem mounting.
11346 * Sets up any additional SSH port redirections that you want.
11347 * Zeroconf (aka Bonjour) is used on Unix and Mac OS X to find VNC
11348 servers on your local network if the avahi-browse or dns-sd
11349 program is available and in your PATH.
11350 * Port Knocking for "closed port" SSH/SSL connections. In addition
11351 to a simple fixed port sequence and one-time-pad implementation, a
11352 hook is also provided to run any port knocking client before
11353 connecting.
11354 * Support for native MacOS X usage with bundled Chicken of the VNC
11355 viewer (the Unix X11 viewer is also provided for MacOS X, and is
11356 better IMHO. It is now the default on MacOS X.)
11357 * Dynamic VNC Server Port determination and redirection (using ssh's
11358 builtin SOCKS proxy, ssh -D) for servers like x11vnc that print
11359 out PORT= at startup.
11360 * Unix Username and Password entry for use with "x11vnc -unixpw"
11361 type login dialogs.
11362 * Simplified mode launched by command "sshvnc" that is SSH Only.
11363 * Simplified mode launched by command "tsvnc" that provides a VNC
11364 "Terminal Services" mode (uses x11vnc on the remote side).
11365 * IPv6 support for all connection modes on Unix, MacOSX, and
11366 Windows.
11367
11368 Patches to TightVNC 1.3.9 vnc_unixsrc tree were created for Unix
11369 TightVNC Viewer improvements (these only apply to the Unix VNC viewer,
11370 including MacOSX XQuartz):
11371 * rfbNewFBSize VNC support (dynamic screen resizing)
11372 * Client-side Scaling of the Desktop in the viewer.
11373 * ZRLE VNC encoding support (RealVNC's encoding)
11374 * Support for the ZYWRLE encoding, a wavelet based extension to ZRLE
11375 to improve compression of motion video and photo regions.
11376 * TurboVNC support (VirtualGL's modified TightVNC encoding; requires
11377 TurboJPEG library)
11378 * Pipelined Updates of the framebuffer as in TurboVNC (asks for the
11379 next update before the current one has finished downloading; this
11380 gives some speedup on high latency connections.)
11381 * Cursor alphablending with x11vnc at 32bpp (-alpha option)
11382 * Option "-unixpw ..." for use with "x11vnc -unixpw" type login
11383 dialogs.
11384 * Support for UltraVNC extensions: 1/n Server side scaling, Text
11385 Chat, Single Window, Disable Server-side Input. Both UltraVNC and
11386 x11vnc servers support these extensions.
11387 * UltraVNC File Transfer via an auxiliary Java helper program (java
11388 must be in $PATH). Note that the x11vnc server also supports
11389 UltraVNC file transfer.
11390 * Connection support for the UltraVNC repeater proxy (-repeater
11391 option).
11392 * Support for UltraVNC Single Click operation. (both unencrypted: SC
11393 I, and SSL encrypted: SC III)
11394 * Support for UltraVNC DSM Encryption Plugin symmetric encryption
11395 mode. (ARC4, AESV2, MSRC4, and SecureVNC)
11396 * Support for UltraVNC MS-Logon authentication (NOTE: the UltraVNC
11397 MS-Logon key exchange implementation is very weak; an eavesdropper
11398 on the network can recover your Windows password easily in a few
11399 seconds; you need to use an additional encrypted tunnel with
11400 MS-Logon.)
11401 * Support for symmetric encryption (including blowfish and 3des
11402 ciphers) to Non-UltraVNC Servers. Any server using the same
11403 encryption method will work, e.g.: x11vnc -enc blowfish:./my.key
11404 * Instead of hostname:display one can also supply "exec=command
11405 args..." to connect the viewer to the stdio of an external command
11406 (e.g. stunnel or socat) rather than using a TCP/IP socket. Unix
11407 domain sockets, e.g. /path/to/unix/socket, and a previously opened
11408 file descriptor fd=0, work too.
11409 * Local Port Protections for STUNNEL and SSH: avoid having for long
11410 periods of time a listening port on the the local (VNC viewer)
11411 side that redirects to the remote side.
11412 * Reverse (viewer listening) VNC connections can show a Popup dialog
11413 asking whether to accept the connection or not (-acceptpopup.) The
11414 extra info provided by UltraVNC Single Click reverse connections
11415 is also supported (-acceptpopupsc)
11416 * Extremely low color modes: 64 and 8 colors in 8bpp
11417 (-use64/-bgr222, -use8/-bgr111)
11418 * Medium color mode: 16bpp mode on a 32bpp Viewer display
11419 (-16bpp/-bgr565)
11420 * For use with x11vnc's client-side caching -ncache method use the
11421 cropping option -ycrop n. This will "hide" the large pixel buffer
11422 cache below the actual display. Set to the actual height or use -1
11423 for autodetection (also, tall screens, H > 2*W, are autodetected
11424 by default).
11425 * Escape Keys: specify a set of modifier keys so that when they are
11426 all pressed down you can invoke Popup menu actions via keystrokes.
11427 I.e., a set of 'Hot Keys'. One can also pan (move) the desktop
11428 inside the viewport via Arrow keys or a mouse drag.
11429 * Scrollbar width setting: -sbwidth n, the default is very thin, 2
11430 pixels, for less distracting -ycrop usage.
11431 * Selection text sending and receiving can be fine-tuned with the
11432 -sendclipboard, -sendalways, and -recvtext options.
11433 * TightVNC compression and quality levels are automatically set
11434 based on observed network latency (n.b. not bandwidth.)
11435 * Improvements to the Popup menu, all of these can now be changed
11436 dynamically via the menu: ViewOnly, Toggle Bell, CursorShape
11437 updates, X11 Cursor, Cursor Alphablending, Toggle Tight/ZRLE,
11438 Toggle JPEG, FullColor/16bpp/8bpp (256/64/8 colors), Greyscale for
11439 low color modes, Scaling the Viewer resolution, Escape Keys,
11440 Pipeline Updates, and others, including UltraVNC extensions.
11441 * Maintains its own BackingStore if the X server does not.
11442 * The default for localhost:0 connections is not raw encoding since
11443 same-machine connections are pretty rare. Default assumes you are
11444 using a SSL or SSH tunnel. Use -rawlocal to revert.
11445 * XGrabServer support for fullscreen mode, for old window managers
11446 (-grab/-graball option).
11447 * Fix for Popup menu positioning for old window managers (-popupfix
11448 option).
11449 * The VNC Viewer ssvncviewer supports IPv6 natively (no helpers
11450 needed.)
11451
11452 The list of 3rd party software bundled in the archive files:
11453 * TightVNC Viewer (windows, unix, macosx)
11454 * Chicken of the VNC Viewer (macosx)
11455 * Stunnel (windows, unix, macosx)
11456 * Putty/Plink/Pageant (windows)
11457 * OpenSSL (windows)
11458 * esound (windows)
11459
11460 These are all self-contained in the bundle directory: they will not be
11461 installed on your system. Just un-zip or un-tar the file you
11462 downloaded and run the frontend ssvnc straight from its directory.
11463 Alternatively, on Unix you can use the conventional source tarball.
11464
11465 _________________________________________________________________
11466
11467 Here is the Quick Start info from the README for how to setup and use
11468 SSVNC:
11469 Quick Start:
11470 -----------
11471
11472 Unix and Mac OS X:
11473
11474 Inside a Terminal do something like the following.
11475
11476 Unpack the archive:
11477
11478 % gzip -dc ssvnc-1.0.29.tar.gz | tar xvf -
11479
11480 Run the GUI:
11481
11482 % ./ssvnc/Unix/ssvnc (for Unix)
11483
11484 % ./ssvnc/MacOSX/ssvnc (for Mac OS X)
11485
11486 The smaller file "ssvnc_no_windows-1.0.29.tar.gz"
11487 could have been used as well.
11488
11489 On MacOSX you could also click on the SSVNC app icon in the Finder.
11490
11491 On MacOSX if you don't like the Chicken of the VNC (e.g. no local
11492 cursors, no screen size rescaling, and no password prompting), and you
11493 have the XDarwin X server installed, you can set DISPLAY before starting
11494 ssvnc (or type DISPLAY=... in Host:Disp and hit Return). Then our
11495 enhanced TightVNC viewer will be used instead of COTVNC.
11496 Update: there is now a 'Use X11 vncviewer on MacOSX' under Options ...
11497
11498
11499 If you want a SSH-only tool (without the distractions of SSL) run
11500 the command:
11501
11502 sshvnc
11503
11504 instead of "ssvnc". Or click "SSH-Only Mode" under Options.
11505 Control-h will toggle between the two modes.
11506
11507
11508 If you want a simple VNC Terminal Services only mode (requires x11vnc
11509 on the remote server) run the command:
11510
11511 tsvnc
11512
11513 instead of "ssvnc". Or click "Terminal Services" under Options.
11514 Control-t will toggle between the two modes.
11515
11516 "tsvnc profile-name" and "tsvnc user@hostname" work too.
11517
11518
11519 Unix/MacOSX Install:
11520
11521 There is no standard install for the bundles, but you can make
11522 symlinks like so:
11523
11524 cd /a/directory/in/PATH
11525 ln -s /path/to/ssvnc/bin/{s,t}* .
11526
11527 Or put /path/to/ssvnc/bin, /path/to/ssvnc/Unix, or /path/to/ssvnc/MacOSX
11528 in your PATH.
11529
11530 For the conventional source tarball it will compile and install, e.g.:
11531
11532 gzip -dc ssvnc-1.0.29.src.tar.gz | tar xvf -
11533 cd ssvnc-1.0.29
11534 make config
11535 make all
11536 make PREFIX=/my/install/dir install
11537
11538 then have /my/install/dir/bin in your PATH.
11539
11540
11541
11542 Windows:
11543
11544 Unzip, using WinZip or a similar utility, the zip file:
11545
11546 ssvnc-1.0.29.zip
11547
11548 Run the GUI, e.g.:
11549
11550 Start -> Run -> Browse
11551
11552 and then navigate to
11553
11554 .../ssvnc/Windows/ssvnc.exe
11555
11556 select Open, and then OK to launch it.
11557
11558 The smaller file "ssvnc_windows_only-1.0.29.zip"
11559 could have been used as well.
11560
11561 You can make a Windows shortcut to this program if you want to.
11562
11563 See the Windows/README.txt for more info.
11564
11565
11566 If you want a SSH-only tool (without the distractions of SSL) run
11567 the command:
11568
11569 sshvnc.bat
11570
11571 Or click "SSH-Only Mode" under Options.
11572
11573
11574 If you want a simple VNC Terminal Services only mode (requires x11vnc
11575 on the remote server) run the command:
11576
11577 tsvnc.bat
11578
11579 Or click "Terminal Services" under Options. Control-t will toggle
11580 between the two modes. "tsvnc profile-name" and "tsvnc user@hostname"
11581 work too.
11582
11583 _________________________________________________________________
11584
11585 You can read all of the SSVNC GUI's Online Help Text here.
11586 _________________________________________________________________
11587
11588 The bundle unpacks a directory/folder named: ssvnc. It contains these
11589 programs to launch the GUI:
11590 Windows/ssvnc.exe for Windows
11591 MacOSX/ssvnc for Mac OS X
11592 Unix/ssvnc for Unix
11593
11594 (the Mac OS X and Unix launchers are simply links to the bin
11595 directory). See the README for more information.
11596
11597 The SSH-Only mode launcher program has name sshvnc. The Terminal
11598 Services mode launcher program (assumes x11vnc 0.8.4 or later and Xvfb
11599 installed on the server machine) has name tsvnc.
11600
11601 The Viewer SSL support is done via a wrapper script (bin/ssvnc_cmd
11602 that calls bin/util/ss_vncviewer) that starts up the STUNNEL tunnel
11603 first and then starts the TightVNC viewer pointed at that tunnel. The
11604 bin/ssvnc program is a GUI front-end to that script. See this FAQ for
11605 more details on SSL tunnelling. In SSH connection mode, the wrappers
11606 start up SSH appropriately.
11607
11608
11609 Memory Stick Usage: If you create a directory named "Home" in that
11610 toplevel ssvnc directory then that will be used as the base for
11611 storing VNC profiles and certificates. Also, for convenience, if you
11612 first run the command with "." as an argument (e.g. "ssvnc .") it will
11613 automatically create the "Home" directory for you. This is handy if
11614 you want to place SSVNC on a USB flash drive that you carry around for
11615 mobile use and you want the profiles you create to stay with the drive
11616 (otherwise you'd have to browse to the drive directory each time you
11617 load or save).
11618
11619 One user on Windows created a BAT file to launch SSVNC and needed to
11620 do this to get the Home directory correct:
11621 cd \ssvnc\Windows
11622 start \ssvnc\Windows\ssvnc.exe
11623
11624 (an optional profile name can be supplied to the ssvnc.exe line)
11625
11626 WARNING: if you use ssvnc from an "Internet Cafe", i.e. some untrusted
11627 computer, please be aware that someone may have set up that machine to
11628 be capturing your keystrokes, etc.
11629
11630
11631 SSH-Only version: The command "sshvnc" can be run instead of "ssvnc"
11632 to get an SSH-only version of the tool:
11633
11634 [sshvnc.gif]
11635
11636 These also work: "sshvnc myprofile" and "sshvnc user@hostname". To
11637 switch from the regular SSVNC mode, click "SSH-Only Mode" under
11638 Options. This mode is less distracting if you never plan to use SSL,
11639 manage certificates, etc.
11640
11641
11642 Terminal Services Only: The command "tsvnc" can be run instead of
11643 "ssvnc" to get a "Terminal Services" only version of the tool:
11644
11645 [tsvnc.gif]
11646
11647 These also work: "tsvnc myprofile" and "tsvnc user@hostname". To
11648 switch from the regular SSVNC mode, click "Terminal Services" under
11649 Options.
11650
11651 This mode requires x11vnc (0.9.3 or later) installed on the remote
11652 machine to find, create, and manage the user sessions. SSH is used to
11653 create the encrypted and authenticated tunnel. The Xvfb (virtual
11654 framebuffer X server) program must also be installed on the remote
11655 system. However tsvnc will also connect to a real X session (i.e. on
11656 the physical hardware) if you are already logged into the X session;
11657 this is a useful access mode and does not require Xvfb on the remote
11658 system.
11659
11660 This mode should be very easy for beginner users to understand and
11661 use. On the remote end you only need to have x11vnc and Xvfb available
11662 in $PATH, and on the local end you just run something like:
11663 tsvnc myname (a] myhost.com
11664
11665 (or start up the tsvnc GUI first and then enter myname (a] myhost.com and
11666 press "Connect").
11667
11668 Normally the Terminal Services sessions created are virtual (RAM-only)
11669 ones (e.g. Xvfb, Xdummy, or Xvnc), however a nice feature is if you
11670 have a regular X session (i.e displaying on the physical hardware) on
11671 the remote machine that you are ALREADY logged into, then the x11vnc
11672 run from tsvnc will find it for you as well.
11673
11674 Also, there is setting "X Login" under Advanced Options that allows
11675 you to attach to a real X server with no one logged in yet (i.e.
11676 XDM/GDM/KDM Login Greeter screen) as long as you have sudo(1)
11677 permission on the remote machine.
11678
11679 Nice features to soon to be added to the tsvnc mode are easy CUPS
11680 printing (working fairly well) and Sound redirection (needs much work)
11681 of the Terminal Services Desktop session. It is easier in tsvnc mode
11682 because the entire desktop session can be started with the correct
11683 environment. ssvnc tries to handle the general case of an already
11684 started desktop and that is more difficult.
11685
11686
11687 Proxies: Web proxies, SOCKS proxies, and the UltraVNC repeater proxy
11688 are supported to allow the SSVNC connection to go through the proxy to
11689 the otherwise unreachable VNC Server. SSH gateway machines can be used
11690 in the same way. Read more about SSVNC proxy support here.
11691
11692
11693 Dynamic VNC Server Port determination: If you are running SSVNC on
11694 Unix and are using SSH to start the remote VNC server and the VNC
11695 server prints out the line "PORT=NNNN" to indicate which dynamic port
11696 it is using (x11vnc does this), then if you prefix the SSH command
11697 with "PORT=" SSVNC will watch for the PORT=NNNN line and uses ssh's
11698 built in SOCKS proxy (ssh -D ...) to connect to the dynamic VNC server
11699 port through the SSH tunnel. For example:
11700 VNC Host:Display user (a] somehost.com
11701 Remote SSH Command: PORT= x11vnc -find
11702
11703 or "PORT= x11vnc -display :0 -localhost", etc. Or use "P= x11vnc ..."
11704
11705 There is also code to detect the display of the regular Unix
11706 vncserver(1). It extracts the display (and hence port) from the lines
11707 "New 'X' desktop is hostname:4" and also "VNC server is already
11708 running as :4". So you can use something like:
11709 PORT= vncserver; sleep 15
11710 or: PORT= vncserver :4; sleep 15
11711
11712 the latter is preferred because when you reconnect with it will find
11713 the already running one. The former one will keep creating new X
11714 sessions if called repeatedly.
11715
11716 If you use PORT= on Windows, a large random port is selected instead
11717 and the -rfbport option is passed to x11vnc (it does not work with
11718 vncserver).
11719
11720
11721
11722 Patches for Unix Tightvnc viewer:
11723
11724 The rfbNewFBSize support allows the enhanced TightVNC Unix viewer to
11725 resize when the server does (e.g. "x11vnc -R scale=3/4" remote control
11726 command).
11727
11728 The cursor alphablending is described here.
11729
11730 The RealVNC ZRLE encoding is supported, in addition to some low colors
11731 modes (16bpp and 8bpp at 256, 64, and even 8 colors, for use on very
11732 slow connections). Greyscales are also enabled for the low color
11733 modes.
11734
11735 The Popup menu (F8) is enhanced with the ability to change many things
11736 on the fly. F9 is added as a shortcut to toggle FullScreen mode.
11737
11738 Client Side Caching: The x11vnc client-side caching is handled nicely
11739 by this viewer. The very large pixel cache below the actual display in
11740 this caching method is distracting. Our Unix VNC viewer will
11741 automatically try to autodetect the actual display height if the
11742 framebuffer is very tall (more than twice as high as it is wide). One
11743 can also set the height to the known value via -ycrop n, or use -ycrop
11744 -1 to force autodection. In fullscreen mode one is not possible to
11745 scroll down to the pixel cache region. In non-fullscreen mode the
11746 window manager frame is "shrink-wrapped" around the actual screen
11747 display. You can still scroll down to the pixel cache region. The
11748 scrollbars are set to be very thin (2 pixels) to be less distracting.
11749 Use the -sbwidth n to make them wider.
11750
11751 Probably nobody is interested in the grabserver patch for old window
11752 managers when the viewer is in fullscreen mode... This and some other
11753 unfixed bugs have been fixed in our patches (fullscreen toggle works
11754 with KDE, -x11cursor has been fixed, and the dot cursor has been made
11755 smaller).
11756
11757 From the -help output:
11758 SSVNC Viewer (based on TightVNC viewer version 1.3.9)
11759
11760 Usage: vncviewer [<OPTIONS>] [<HOST>][:<DISPLAY#>]
11761 vncviewer [<OPTIONS>] [<HOST>][::<PORT#>]
11762 vncviewer [<OPTIONS>] exec=[CMD ARGS...]
11763 vncviewer [<OPTIONS>] fd=n
11764 vncviewer [<OPTIONS>] /path/to/unix/socket
11765 vncviewer [<OPTIONS>] -listen [<DISPLAY#>]
11766 vncviewer -help
11767
11768 <OPTIONS> are standard Xt options, or:
11769 -via <GATEWAY>
11770 -shared (set by default)
11771 -noshared
11772 -viewonly
11773 -fullscreen
11774 -noraiseonbeep
11775 -passwd <PASSWD-FILENAME> (standard VNC authentication)
11776 -user <USERNAME> (Unix login authentication)
11777 -encodings <ENCODING-LIST> (e.g. "tight,copyrect")
11778 -bgr233
11779 -owncmap
11780 -truecolour
11781 -depth <DEPTH>
11782 -compresslevel <COMPRESS-VALUE> (0..9: 0-fast, 9-best)
11783 -quality <JPEG-QUALITY-VALUE> (0..9: 0-low, 9-high)
11784 -nojpeg
11785 -nocursorshape
11786 -x11cursor
11787 -autopass
11788
11789 Option names may be abbreviated, e.g. -bgr instead of -bgr233.
11790 See the manual page for more information.
11791
11792
11793 Enhanced TightVNC viewer (SSVNC) options:
11794
11795 URL http://www.karlrunge.com/x11vnc/ssvnc.html
11796
11797 Note: ZRLE and ZYWRLE encodings are now supported.
11798
11799 Note: F9 is shortcut to Toggle FullScreen mode.
11800
11801 Note: In -listen mode set the env var. SSVNC_MULTIPLE_LISTEN=1
11802 to allow more than one incoming VNC server at a time.
11803 This is the same as -multilisten described below. Set
11804 SSVNC_MULTIPLE_LISTEN=MAX:n to allow no more than "n"
11805 simultaneous reverse connections.
11806
11807 Note: If the host:port is specified as "exec=command args..."
11808 then instead of making a TCP/IP socket connection to the
11809 remote VNC server, "command args..." is executed and the
11810 viewer is attached to its stdio. This enables tunnelling
11811 established via an external command, e.g. an stunnel(8)
11812 that does not involve a listening socket. This mode does
11813 not work for -listen reverse connections.
11814
11815 If the host:port is specified as "fd=n" then it is assumed
11816 n is an already opened file descriptor to the socket. (i.e
11817 the parent did fork+exec)
11818
11819 If the host:port contains a '/' it is interpreted as a
11820 unix-domain socket (AF_LOCAL insead of AF_INET)
11821
11822 -multilisten As in -listen (reverse connection listening) except
11823 allow more than one incoming VNC server to be connected
11824 at a time. The default for -listen of only one at a
11825 time tries to play it safe by not allowing anyone on
11826 the network to put (many) desktops on your screen over
11827 a long window of time. Use -multilisten for no limit.
11828
11829 -acceptpopup In -listen (reverse connection listening) mode when
11830 a reverse VNC connection comes in show a popup asking
11831 whether to Accept or Reject the connection. The IP
11832 address of the connecting host is shown. Same as
11833 setting the env. var. SSVNC_ACCEPT_POPUP=1.
11834
11835 -acceptpopupsc As in -acceptpopup except assume UltraVNC Single
11836 Click (SC) server. Retrieve User and ComputerName
11837 info from UltraVNC Server and display in the Popup.
11838
11839 -use64 In -bgr233 mode, use 64 colors instead of 256.
11840 -bgr222 Same as -use64.
11841
11842 -use8 In -bgr233 mode, use 8 colors instead of 256.
11843 -bgr111 Same as -use8.
11844
11845 -16bpp If the vnc viewer X display is depth 24 at 32bpp
11846 request a 16bpp format from the VNC server to cut
11847 network traffic by up to 2X, then tranlate the
11848 pixels to 32bpp locally.
11849 -bgr565 Same as -16bpp.
11850
11851 -grey Use a grey scale for the 16- and 8-bpp modes.
11852
11853 -alpha Use alphablending transparency for local cursors
11854 requires: x11vnc server, both client and server
11855 must be 32bpp and same endianness.
11856
11857 -scale str Scale the desktop locally. The string "str" can
11858 a floating point ratio, e.g. "0.9", or a fraction,
11859 e.g. "3/4", or WxH, e.g. 1280x1024. Use "fit"
11860 to fit in the current screen size. Use "auto" to
11861 fit in the window size. "str" can also be set by
11862 the env. var. SSVNC_SCALE.
11863
11864 If you observe mouse trail painting errors, enable
11865 X11 Cursor mode (either via Popup or -x11cursor.)
11866
11867 Note that scaling is done in software and so can be
11868 slow and requires more memory. Some speedup Tips:
11869
11870 ZRLE is faster than Tight in this mode. When
11871 scaling is first detected, the encoding will
11872 be automatically switched to ZRLE. Use the
11873 Popup menu if you want to go back to Tight.
11874 Set SSVNC_PRESERVE_ENCODING=1 to disable this.
11875
11876 Use a solid background on the remote side.
11877 (e.g. manually or via x11vnc -solid ...)
11878
11879 If the remote server is x11vnc, try client
11880 side caching: x11vnc -ncache 10 ...
11881
11882 -ycrop n Only show the top n rows of the framebuffer. For
11883 use with x11vnc -ncache client caching option
11884 to help "hide" the pixel cache region.
11885 Use a negative value (e.g. -1) for autodetection.
11886 Autodetection will always take place if the remote
11887 fb height is more than 2 times the width.
11888
11889 -sbwidth n Scrollbar width for x11vnc -ncache mode (-ycrop),
11890 default is very narrow: 2 pixels, it is narrow to
11891 avoid distraction in -ycrop mode.
11892
11893 -nobell Disable bell.
11894
11895 -rawlocal Prefer raw encoding for localhost, default is
11896 no, i.e. assumes you have a SSH tunnel instead.
11897
11898 -notty Try to avoid using the terminal for interactive
11899 responses: use windows for messages and prompting
11900 instead. Messages will also be printed to terminal.
11901
11902 -sendclipboard Send the X CLIPBOARD selection (i.e. Ctrl+C,
11903 Ctrl+V) instead of the X PRIMARY selection (mouse
11904 select and middle button paste.)
11905
11906 -sendalways Whenever the mouse enters the VNC viewer main
11907 window, send the selection to the VNC server even if
11908 it has not changed. This is like the Xt resource
11909 translation SelectionToVNC(always)
11910
11911 -recvtext str When cut text is received from the VNC server,
11912 ssvncviewer will set both the X PRIMARY and the
11913 X CLIPBOARD local selections. To control which
11914 is set, specify 'str' as 'primary', 'clipboard',
11915 or 'both' (the default.)
11916
11917 -graball Grab the entire X server when in fullscreen mode,
11918 needed by some old window managers like fvwm2.
11919
11920 -popupfix Warp the popup back to the pointer position,
11921 needed by some old window managers like fvwm2.
11922 -sendclipboard Send the X CLIPBOARD selection (i.e. Ctrl+C,
11923 Ctrl+V) instead of the X PRIMARY selection (mouse
11924 select and middle button paste.)
11925
11926 -sendalways Whenever the mouse enters the VNC viewer main
11927 window, send the selection to the VNC server even if
11928 it has not changed. This is like the Xt resource
11929 translation SelectionToVNC(always)
11930
11931 -recvtext str When cut text is received from the VNC server,
11932 ssvncviewer will set both the X PRIMARY and the
11933 X CLIPBOARD local selections. To control which
11934 is set, specify 'str' as 'primary', 'clipboard',
11935 or 'both' (the default.)
11936
11937 -graball Grab the entire X server when in fullscreen mode,
11938 needed by some old window managers like fvwm2.
11939
11940 -popupfix Warp the popup back to the pointer position,
11941 needed by some old window managers like fvwm2.
11942
11943 -grabkbd Grab the X keyboard when in fullscreen mode,
11944 needed by some window managers. Same as -grabkeyboard.
11945 -grabkbd is the default, use -nograbkbd to disable.
11946
11947 -bs, -nobs Whether or not to use X server Backingstore for the
11948 main viewer window. The default is to not, mainly
11949 because most Linux, etc, systems X servers disable
11950 *all* Backingstore by default. To re-enable it put
11951
11952 Option "Backingstore"
11953
11954 in the Device section of /etc/X11/xorg.conf.
11955 In -bs mode with no X server backingstore, whenever an
11956 area of the screen is re-exposed it must go out to the
11957 VNC server to retrieve the pixels. This is too slow.
11958
11959 In -nobs mode, memory is allocated by the viewer to
11960 provide its own backing of the main viewer window. This
11961 actually makes some activities faster (changes in large
11962 regions) but can appear to "flash" too much.
11963
11964 -noshm Disable use of MIT shared memory extension (not recommended
11965 )
11966
11967 -termchat Do the UltraVNC chat in the terminal vncviewer is in
11968 instead of in an independent window.
11969
11970 -unixpw str Useful for logging into x11vnc in -unixpw mode. "str" is a
11971 string that allows many ways to enter the Unix Username
11972 and Unix Password. These characters: username, newline,
11973 password, newline are sent to the VNC server after any VNC
11974 authentication has taken place. Under x11vnc they are
11975 used for the -unixpw login. Other VNC servers could do
11976 something similar.
11977
11978 You can also indicate "str" via the environment
11979 variable SSVNC_UNIXPW.
11980
11981 Note that the Escape key is actually sent first to tell
11982 x11vnc to not echo the Unix Username back to the VNC
11983 viewer. Set SSVNC_UNIXPW_NOESC=1 to override this.
11984
11985 If str is ".", then you are prompted at the command line
11986 for the username and password in the normal way. If str is
11987 "-" the stdin is read via getpass(3) for username@password.
11988 Otherwise if str is a file, it is opened and the first line
11989 read is taken as the Unix username and the 2nd as the
11990 password. If str prefixed by "rm:" the file is removed
11991 after reading. Otherwise, if str has a "@" character,
11992 it is taken as username@password. Otherwise, the program
11993 exits with an error. Got all that?
11994
11995 -repeater str This is for use with UltraVNC repeater proxy described
11996 here: http://www.uvnc.com/addons/repeater.html. The "str"
11997 is the ID string to be sent to the repeater. E.g. ID:1234
11998 It can also be the hostname and port or display of the VNC
11999 server, e.g. 12.34.56.78:0 or snoopy.com:1. Note that when
12000 using -repeater, the host:dpy on the cmdline is the repeate
12001 r
12002 server, NOT the VNC server. The repeater will connect you.
12003
12004 Example: vncviewer ... -repeater ID:3333 repeat.host:5900
12005 Example: vncviewer ... -repeater vhost:0 repeat.host:5900
12006
12007 Use, e.g., '-repeater SCIII=ID:3210' if the repeater is a
12008 Single Click III (SSL) repeater (repeater_SSL.exe) and you
12009 are passing the SSL part of the connection through stunnel,
12010 socat, etc. This way the magic UltraVNC string 'testB'
12011 needed to work with the repeater is sent to it.
12012
12013 -rfbversion str Set the advertised RFB version. E.g.: -rfbversion 3.6
12014 For some servers, e.g. UltraVNC this needs to be done.
12015
12016 -ultradsm UltraVNC has symmetric private key encryption DSM plugins:
12017 http://www.uvnc.com/features/encryption.html. It is assumed
12018 you are using a unix program (e.g. our ultravnc_dsm_helper)
12019 to encrypt and decrypt the UltraVNC DSM stream. IN ADDITION
12020 TO THAT supply -ultradsm to tell THIS viewer to modify the
12021 RFB data sent so as to work with the UltraVNC Server. For
12022 some reason, each RFB msg type must be sent twice under DSM
12023 .
12024
12025 -mslogon user Use Windows MS Logon to an UltraVNC server. Supply the
12026 username or "1" to be prompted. The default is to
12027 autodetect the UltraVNC MS Logon server and prompt for
12028 the username and password.
12029
12030 IMPORTANT NOTE: The UltraVNC MS-Logon Diffie-Hellman
12031 exchange is very weak and can be brute forced to recover
12032 your username and password in a few seconds of CPU time.
12033 To be safe, be sure to use an additional encrypted tunnel
12034 (e.g. SSL or SSH) for the entire VNC session.
12035
12036 -chatonly Try to be a client that only does UltraVNC text chat. This
12037 mode is used by x11vnc to present a chat window on the
12038 physical X11 console (i.e. chat with the person at the
12039 display).
12040
12041 -env VAR=VALUE To save writing a shell script to set environment variables
12042 ,
12043 specify as many as you need on the command line. For
12044 example, -env SSVNC_MULTIPLE_LISTEN=MAX:5 -env EDITOR=vi
12045
12046 -noipv6 Disable all IPv6 sockets. Same as VNCVIEWER_NO_IPV6=1.
12047
12048 -noipv4 Disable all IPv4 sockets. Same as VNCVIEWER_NO_IPV4=1.
12049
12050 -printres Print out the Ssvnc X resources (appdefaults) and then exit
12051 You can save them to a file and customize them (e.g. the
12052 keybindings and Popup menu) Then point to the file via
12053 XENVIRONMENT or XAPPLRESDIR.
12054
12055 -pipeline Like TurboVNC, request the next framebuffer update as soon
12056 as possible instead of waiting until the end of the current
12057 framebuffer update coming in. Helps 'pipeline' the updates
12058 .
12059 This is currently the default, use -nopipeline to disable.
12060
12061 -appshare Enable features for use with x11vnc's -appshare mode where
12062 instead of sharing the full desktop only the application's
12063 windows are shared. Viewer multilisten mode is used to
12064 create the multiple windows: -multilisten is implied.
12065 See 'x11vnc -appshare -help' more information on the mode.
12066
12067 Features enabled in the viewer under -appshare are:
12068 Minimum extra text in the title, auto -ycrop is disabled,
12069 x11vnc -remote_prefix X11VNC_APPSHARE_CMD: message channel,
12070 x11vnc initial window position hints. See also Escape Keys
12071 below for additional key and mouse bindings.
12072
12073 -escape str This sets the 'Escape Keys' modifier sequence and enables
12074 escape keys mode. When the modifier keys escape sequence
12075 is held down, the next keystroke is interpreted locally
12076 to perform a special action instead of being sent to the
12077 remote VNC server.
12078
12079 Use '-escape default' for the default modifier sequence.
12080 (Unix: Alt_L,Super_L and MacOSX: Control_L,Meta_L)
12081
12082 Here are the 'Escape Keys: Help+Set' instructions from the Popup Menu:
12083
12084 Escape Keys: Enter a comma separated list of modifier keys to be the
12085 'escape sequence'. When these keys are held down, the next keystroke is
12086 interpreted locally to invoke a special action instead of being sent to
12087 the remote VNC server. In other words, a set of 'Hot Keys'.
12088
12089 To enable or disable this, click on 'Escape Keys: Toggle' in the Popup.
12090
12091 Here is the list of hot-key mappings to special actions:
12092
12093 r: refresh desktop b: toggle bell c: toggle full-color
12094 f: file transfer x: x11cursor z: toggle Tight/ZRLE
12095 l: full screen g: graball e: escape keys dialog
12096 s: scale dialog +: scale up (=) -: scale down (_)
12097 t: text chat a: alphablend cursor
12098 V: toggle viewonly Q: quit viewer 1 2 3 4 5 6: UltraVNC scale 1/n
12099
12100 Arrow keys: pan the viewport about 10% for each keypress.
12101 PageUp / PageDown: pan the viewport by a screenful vertically.
12102 Home / End: pan the viewport by a screenful horizontally.
12103 KeyPad Arrow keys: pan the viewport by 1 pixel for each keypress.
12104 Dragging the Mouse with Button1 pressed also pans the viewport.
12105 Clicking Mouse Button3 brings up the Popup Menu.
12106
12107 The above mappings are *always* active in ViewOnly mode, unless you set the
12108 Escape Keys value to 'never'.
12109
12110 If the Escape Keys value below is set to 'default' then a default list of
12111 of modifier keys is used. For Unix it is: Alt_L,Super_L and for MacOSX it
12112 is Control_L,Meta_L. Note: the Super_L key usually has a Windows(TM) Flag
12113 on it. Also note the _L and _R mean the key is on the LEFT or RIGHT side
12114 of the keyboard.
12115
12116 On Unix the default is Alt and Windows keys on Left side of keyboard.
12117 On MacOSX the default is Control and Command keys on Left side of keyboard.
12118
12119 Example: Press and hold the Alt and Windows keys on the LEFT side of the
12120 keyboard and then press 'c' to toggle the full-color state. Or press 't'
12121 to toggle the ultravnc Text Chat window, etc.
12122
12123 To use something besides the default, supply a comma separated list (or a
12124 single one) from: Shift_L Shift_R Control_L Control_R Alt_L Alt_R Meta_L
12125 Meta_R Super_L Super_R Hyper_L Hyper_R or Mode_switch.
12126
12127
12128 New Popup actions:
12129
12130 ViewOnly: ~ -viewonly
12131 Disable Bell: ~ -nobell
12132 Cursor Shape: ~ -nocursorshape
12133 X11 Cursor: ~ -x11cursor
12134 Cursor Alphablend: ~ -alpha
12135 Toggle Tight/Hextile: ~ -encodings hextile...
12136 Toggle Tight/ZRLE: ~ -encodings zrle...
12137 Toggle ZRLE/ZYWRLE: ~ -encodings zywrle...
12138 Quality Level ~ -quality (both Tight and ZYWRLE)
12139 Compress Level ~ -compresslevel
12140 Disable JPEG: ~ -nojpeg (Tight)
12141 Pipeline Updates ~ -pipeline
12142
12143 Full Color as many colors as local screen allows.
12144 Grey scale (16 & 8-bpp) ~ -grey, for low colors 16/8bpp modes only.
12145 16 bit color (BGR565) ~ -16bpp / -bgr565
12146 8 bit color (BGR233) ~ -bgr233
12147 256 colors ~ -bgr233 default # of colors.
12148 64 colors ~ -bgr222 / -use64
12149 8 colors ~ -bgr111 / -use8
12150 Scale Viewer ~ -scale
12151 Escape Keys: Toggle ~ -escape
12152 Escape Keys: Help+Set ~ -escape
12153 Set Y Crop (y-max) ~ -ycrop
12154 Set Scrollbar Width ~ -sbwidth
12155 XGrabServer ~ -graball
12156
12157 UltraVNC Extensions:
12158
12159 Set 1/n Server Scale Ultravnc ext. Scale desktop by 1/n.
12160 Text Chat Ultravnc ext. Do Text Chat.
12161 File Transfer Ultravnc ext. File xfer via Java helper.
12162 Single Window Ultravnc ext. Grab and view a single window.
12163 (select then click on the window you want).
12164 Disable Remote Input Ultravnc ext. Try to prevent input and
12165 viewing of monitor at physical display.
12166
12167 Note: the Ultravnc extensions only apply to servers that support
12168 them. x11vnc/libvncserver supports some of them.
12169
12170 Send Clipboard not Primary ~ -sendclipboard
12171 Send Selection Every time ~ -sendalways
12172
12173 Nearly all of these can be changed dynamically in the Popup menu
12174 (press F8 for it):
12175
12176 [viewer_menu.gif] [unixviewer.jpg]
12177
12178 _________________________________________________________________
12179
12180 Windows:
12181
12182 For Windows, SSL Viewer support is provided by a GUI Windows/ssvnc.exe
12183 that prompts for the VNC display and then starts up STUNNEL followed
12184 by the Stock TightVNC Windows Viewer. Both are bundled in the package
12185 for your convenience. The GUI has other useful features. When the
12186 connection is finished, you will be asked if you want to terminate the
12187 STUNNEL program. For SSH connections from Windows the GUI will use
12188 PLINK instead of STUNNEL.
12189
12190 Unix and Mac OS X:
12191
12192 Run the GUI (ssvnc, see above) and let me know how it goes.
12193 _________________________________________________________________
12194
12195 Hopefully this tool will make it convenient for people to help test
12196 and use the built-in SSL support in x11vnc. Extra testing of this
12197 feature is much appreciated!! Thanks.
12198
12199 Please Help Test the newly added features:
12200 * Automatic Service tunnelling via SSH for CUPS and SMB Printing
12201 * ESD/ARTSD Audio
12202 * SMB (Windows/Samba) filesystem mounting
12203
12204 These allow you to print from the remote (VNC Server) machine to local
12205 printers, listen to sounds (with some limitations) from the remote VNC
12206 Server machine, and to mount your local Windows or Samba shares on the
12207 remote VNC Server machine. Basically these new features try to
12208 automate the tricks described here:
12209 http://www.karlrunge.com/x11vnc/faq.html#faq-smb-shares
12210 http://www.karlrunge.com/x11vnc/faq.html#faq-cups
12211 http://www.karlrunge.com/x11vnc/faq.html#faq-sound
12212 _________________________________________________________________
12213
12214 Downloading: Downloads for this project are hosted at Sourceforge.net.
12215
12216 Choose the archive file bundle that best suits you (e.g. no source
12217 code, windows only, unix only, zip, tar etc).
12218
12219 A quick guide:
12220
12221 On some flavor of Unix, e.g. Linux or Solaris? Use
12222 "ssvnc_unix_only" (or "ssvnc_no_windows" to recompile).
12223 On Mac OS X? Use "ssvnc_no_windows".
12224 On Windows? Use "ssvnc_windows_only".
12225 ssvnc_windows_only-1.0.28.zip Windows Binaries Only. No source included
12226 (6.2MB)
12227 ssvnc_no_windows-1.0.28.tar.gz Unix and Mac OS X Only. No Windows binarie
12228 s. Source included. (10.1MB)
12229 ssvnc_unix_only-1.0.28.tar.gz Unix Binaries Only. No source included
12230 . (7.2MB)
12231 ssvnc_unix_minimal-1.0.28.tar.gz Unix Minimal. You must supply your own vn
12232 cviewer and stunnel. (0.2MB)
12233
12234 ssvnc-1.0.28.tar.gz All Unix, Mac OS X, and Windows binaries a
12235 nd source TGZ. (16.1MB)
12236 ssvnc-1.0.28.zip All Unix, Mac OS X, and Windows binaries a
12237 nd source ZIP. (16.4MB)
12238 ssvnc_all-1.0.28.zip All Unix, Mac OS X, and Windows binaries a
12239 nd source AND full archives in the zip dir. (19.2MB)
12240
12241
12242 Here is a conventional source tarball:
12243 ssvnc-1.0.28.src.tar.gz Conventional Source for SSVNC GUI and Unix
12244 VNCviewer (0.5MB)
12245
12246 it will be of use to those who do not want the SSVNC
12247 "one-size-fits-all" bundles. For example, package/distro maintainers
12248 will find this more familiar and useful to them (i.e. they run: "make
12249 config; make all; make install"). Note that it does not include the
12250 stunnel source, and so has a dependency that the system stunnel is
12251 installed.
12252
12253 Read the README.src file for more information on using the
12254 conventional source tarball.
12255
12256
12257 Note: even with the Unix bundles, e.g. "ssvnc_no_windows" or
12258 "ssvnc_all", you may need to run the "./build.unix" script in the top
12259 directory to recompile for your operating system.
12260
12261 Here are the corresponding 1.0.29 development bundles (Please help
12262 test them):
12263
12264 ssvnc_windows_only-1.0.29.zip
12265 ssvnc_no_windows-1.0.29.tar.gz
12266 ssvnc_unix_only-1.0.29.tar.gz
12267 ssvnc_unix_minimal-1.0.29.tar.gz
12268
12269 ssvnc-1.0.29.tar.gz
12270 ssvnc-1.0.29.zip
12271 ssvnc_all-1.0.29.zip
12272
12273 ssvnc-1.0.29.src.tar.gz Conventional Source for SSVNC GUI and Unix
12274 VNCviewer (0.5MB)
12275
12276
12277 For any Unix system, a self-extracting and running file for the
12278 "ssvnc_unix_minimal" package is here: ssvnc. Save it as filename
12279 "ssvnc", type "chmod 755 ./ssvnc", and then launch the GUI via typing
12280 "./ssvnc". Note that this "ssvnc_unix_minimal" mode requires you
12281 install the "stunnel" and "vncviewer" programs externally (for
12282 example, install your distros' versions, e.g. on debian: "apt-get
12283 install stunnel4 xtightvncviewer".) It will work, but many of the
12284 SSVNC features will be missing.
12285
12286 Previous releases:
12287 Release 1.0.18 at Sourceforge.net
12288 Release 1.0.19 at Sourceforge.net
12289 Release 1.0.20 at Sourceforge.net
12290 Release 1.0.21 at Sourceforge.net
12291 Release 1.0.22 at Sourceforge.net
12292 Release 1.0.23 at Sourceforge.net
12293 Release 1.0.24 at Sourceforge.net
12294 Release 1.0.25 at Sourceforge.net
12295 Release 1.0.26 at Sourceforge.net
12296 Release 1.0.27 at Sourceforge.net
12297 Release 1.0.28 at Sourceforge.net
12298
12299
12300 Please help test the UltraVNC File Transfer support in the native Unix
12301 VNC viewer! Let us know how it went.
12302
12303 Current Unix binaries in the archives:
12304 Linux.i686
12305 Linux.x86_64
12306 Linux.ppc64 X (removed)
12307 Linux.alpha X (removed)
12308 SunOS.sun4u
12309 SunOS.sun4m
12310 SunOS.i86pc
12311 Darwin.Power.Macintosh
12312 Darwin.i386
12313 HP-UX.9000 X (removed)
12314 FreeBSD.i386 X (removed)
12315 NetBSD.i386 X (removed)
12316 OpenBSD.i386 X (removed)
12317
12318 (some of these are out of date, marked with 'X' above, because I no
12319 longer have access to machines running those OS's. Use the
12320 "build.unix" script to recompile on your system).
12321
12322 Note: some of the above binaries depend on libssl.so.0.9.7, whereas
12323 some recent distros only provide libssl.so.0.9.8 by default (for
12324 compatibility reasons they should install both by default but not all
12325 do). So you may need to instruct your distro to install the 0.9.7
12326 library (it is fine to have both runtimes installed simultaneously
12327 since the libraries have different names). Update: I now try to
12328 statically link libssl.a for all of the binaries in the archive.
12329
12330 You can also run the included build.unix script to try to
12331 automatically build the binaries if your OS is not in the above list
12332 or the included binary does not run properly on your system. Let me
12333 know how that goes.
12334 _________________________________________________________________
12335
12336 IMPORTANT: there may be restrictions for you to download, use, or
12337 redistribute the above because of cryptographic software they contain
12338 or for other reasons. Please check out your situation and information
12339 at the following and related sites:
12340 http://stunnel.mirt.net
12341 http://www.stunnel.org
12342 http://www.openssl.org
12343 http://www.chiark.greenend.org.uk/~sgtatham/putty/
12344 http://www.tightvnc.com
12345 http://www.realvnc.com
12346 http://sourceforge.net/projects/cotvnc/
12347 _________________________________________________________________
12348
12349 README: Here is the toplevel README from the bundle.
12350
12351 =======================================================================
12352 http://www.karlrunge.com/x11vnc/x11vnc_opts.html:
12353
12354
12355 _________________________________________________________________
12356
12357 x11vnc: a VNC server for real X displays
12358
12359 Here are all of x11vnc command line options:
12360 % x11vnc -opts (see below for -help long descriptions)
12361
12362 x11vnc: allow VNC connections to real X11 displays. 0.9.13 lastmod: 2010-12-27
12363
12364 x11vnc options:
12365 -display disp -auth file -N
12366 -autoport n -rfbport str -6
12367 -no6 -noipv6 -noipv4
12368 -reopen -reflect host:N -id windowid
12369 -sid windowid -appshare -clip WxH+X+Y
12370 -flashcmap -shiftcmap n -notruecolor
12371 -advertise_truecolor -visual n -overlay
12372 -overlay_nocursor -8to24 [opts] -24to32
12373 -scale fraction -geometry WxH -scale_cursor frac
12374 -viewonly -shared -once
12375 -forever -loop -timeout n
12376 -sleepin n -inetd -tightfilexfer
12377 -ultrafilexfer -http -http_ssl
12378 -avahi -mdns -zeroconf
12379 -connect string -connect_or_exit str -proxy string
12380 -vncconnect -novncconnect -allow host1[,host2..]
12381 -localhost -unixsock str -listen6 str
12382 -nolookup -input string -grabkbd
12383 -grabptr -ungrabboth -grabalways
12384 -viewpasswd string -passwdfile filename -showrfbauth filename
12385 -unixpw [list] -unixpw_nis [list] -unixpw_cmd cmd
12386 -find -finddpy -listdpy
12387 -findauth [disp] -create -xdummy
12388 -xvnc -xvnc_redirect -xdummy_xvfb
12389 -create_xsrv str -svc -svc_xdummy
12390 -svc_xvnc -svc_xdummy_xvfb -xdmsvc
12391 -sshxdmsvc -unixpw_system_greeter -redirect port
12392 -display WAIT:... -vencrypt mode -anontls mode
12393 -sslonly -dhparams file -nossl
12394 -ssl [pem] -ssltimeout n -sslnofail
12395 -ssldir dir -sslverify path -sslCRL path
12396 -sslGenCA [dir] -sslGenCert type name -sslEncKey pem
12397 -sslCertInfo pem -sslDelCert pem -sslScripts
12398 -stunnel [pem] -stunnel3 [pem] -enc cipher:keyfile
12399 -https [port] -httpsredir [port] -http_oneport
12400 -ssh user@host:disp -usepw -storepasswd pass file
12401 -nopw -accept string -afteraccept string
12402 -gone string -users list -noshm
12403 -flipbyteorder -onetile -solid [color]
12404 -blackout string -xinerama -noxinerama
12405 -xtrap -xrandr [mode] -rotate string
12406 -padgeom WxH -o logfile -flag file
12407 -rmflag file -rc filename -norc
12408 -env VAR=VALUE -prog /path/to/x11vnc -h, -help
12409 -?, -opts -V, -version -license
12410 -dbg -q, -quiet -v, -verbose
12411 -bg -modtweak -nomodtweak
12412 -xkb -noxkb -capslock
12413 -skip_lockkeys -noskip_lockkeys -skip_keycodes string
12414 -sloppy_keys -skip_dups -noskip_dups
12415 -add_keysyms -noadd_keysyms -clear_mods
12416 -clear_keys -clear_all -remap string
12417 -norepeat -repeat -nofb
12418 -nobell -nosel -noprimary
12419 -nosetprimary -noclipboard -nosetclipboard
12420 -seldir string -cursor [mode] -nocursor
12421 -cursor_drag -arrow n -noxfixes
12422 -alphacut n -alphafrac fraction -alpharemove
12423 -noalphablend -nocursorshape -cursorpos
12424 -nocursorpos -xwarppointer -noxwarppointer
12425 -always_inject -buttonmap string -nodragging
12426 -ncache n -ncache_cr -ncache_no_moveraise
12427 -ncache_no_dtchange -ncache_no_rootpixmap -ncache_keep_anims
12428 -ncache_old_wm -ncache_pad n -debug_ncache
12429 -wireframe [str] -nowireframe -nowireframelocal
12430 -wirecopyrect mode -nowirecopyrect -debug_wireframe
12431 -scrollcopyrect mode -noscrollcopyrect -scr_area n
12432 -scr_skip list -scr_inc list -scr_keys list
12433 -scr_term list -scr_keyrepeat lo-hi -scr_parms string
12434 -fixscreen string -debug_scroll -noxrecord
12435 -grab_buster -nograb_buster -debug_grabs
12436 -debug_sel -pointer_mode n -input_skip n
12437 -allinput -input_eagerly -speeds rd,bw,lat
12438 -wmdt string -debug_pointer -debug_keyboard
12439 -defer time -wait time -extra_fbur n
12440 -wait_ui factor -setdefer n -nowait_bog
12441 -slow_fb time -xrefresh time -nap
12442 -nonap -sb time -readtimeout n
12443 -ping n -nofbpm -fbpm
12444 -nodpms -dpms -forcedpms
12445 -clientdpms -noserverdpms -noultraext
12446 -chatwindow -noxdamage -xd_area A
12447 -xd_mem f -sigpipe string -threads
12448 -nothreads -fs f -gaps n
12449 -grow n -fuzz n -debug_tiles
12450 -snapfb -rawfb string -freqtab file
12451 -pipeinput cmd -macnodim -macnosleep
12452 -macnosaver -macnowait -macwheel n
12453 -macnoswap -macnoresize -maciconanim n
12454 -macmenu -macuskbd -macnoopengl
12455 -macnorawfb -gui [gui-opts] -remote command
12456 -query variable -QD variable -sync
12457 -query_retries str -remote_prefix str -noremote
12458 -yesremote -unsafe -safer
12459 -privremote -nocmds -allowedcmds list
12460 -deny_all
12461
12462 LibVNCServer options:
12463 -rfbport port TCP port for RFB protocol
12464 -rfbwait time max time in ms to wait for RFB client
12465 -rfbauth passwd-file use authentication on RFB protocol
12466 (use 'storepasswd' to create a password file)
12467 -rfbversion 3.x Set the version of the RFB we choose to advertise
12468 -permitfiletransfer permit file transfer support
12469 -passwd plain-password use authentication
12470 (use plain-password as password, USE AT YOUR RISK)
12471 -deferupdate time time in ms to defer updates (default 40)
12472 -deferptrupdate time time in ms to defer pointer updates (default none)
12473 -desktop name VNC desktop name (default "LibVNCServer")
12474 -alwaysshared always treat new clients as shared
12475 -nevershared never treat new clients as shared
12476 -dontdisconnect don't disconnect existing clients when a new non-shared
12477 connection comes in (refuse new connection instead)
12478 -httpdir dir-path enable http server using dir-path home
12479 -httpport portnum use portnum for http connection
12480 -enablehttpproxy enable http proxy support
12481 -progressive height enable progressive updating for slow links
12482 -listen ipaddr listen for connections only on network interface with
12483 addr ipaddr. '-listen localhost' and hostname work too.
12484
12485 libvncserver-tight-extension options:
12486 -disablefiletransfer disable file transfer
12487 -ftproot string set ftp root
12488
12489
12490
12491
12492 % x11vnc -help
12493
12494 x11vnc: allow VNC connections to real X11 displays. 0.9.13 lastmod: 2010-12-27
12495
12496 (type "x11vnc -opts" to just list the options.)
12497
12498 Typical usage is:
12499
12500 Run this command in a shell on the remote machine "far-host"
12501 with X session you wish to view:
12502
12503 x11vnc -display :0
12504
12505 Then run this in another window on the machine you are sitting at:
12506
12507 vncviewer far-host:0
12508
12509 Once x11vnc establishes connections with the X11 server and starts listening
12510 as a VNC server it will print out a string: PORT=XXXX where XXXX is typically
12511 5900 (the default VNC server port). One would next run something like
12512 this on the local machine: "vncviewer hostname:N" where "hostname" is
12513 the name of the machine running x11vnc and N is XXXX - 5900, i.e. usually
12514 "vncviewer hostname:0".
12515
12516 By default x11vnc will not allow the screen to be shared and it will exit
12517 as soon as the client disconnects. See -shared and -forever below to override
12518 these protections. See the FAQ for details how to tunnel the VNC connection
12519 through an encrypted channel such as ssh(1). In brief:
12520
12521 ssh -t -L 5900:localhost:5900 far-host 'x11vnc -localhost -display :0'
12522
12523 vncviewer -encodings 'copyrect tight zrle hextile' localhost:0
12524
12525 Also, use of a VNC password (-rfbauth or -passwdfile) is strongly recommended.
12526
12527 For additional info see: http://www.karlrunge.com/x11vnc/
12528 and http://www.karlrunge.com/x11vnc/faq.html
12529
12530
12531 Config file support: if the file $HOME/.x11vncrc exists then each line in
12532 it is treated as a single command line option. Disable with -norc. For
12533 each option name, the leading character "-" is not required. E.g. a line
12534 that is either "forever" or "-forever" may be used and are equivalent.
12535 Likewise "wait 100" or "-wait 100" are acceptable and equivalent lines.
12536 The "#" character comments out to the end of the line in the usual way
12537 (backslash it for a literal). Leading and trailing whitespace is trimmed off.
12538 Lines may be continued with a "\" as the last character of a line (it
12539 becomes a space character).
12540
12541 Options:
12542
12543 -display disp X11 server display to connect to, usually :0. The X
12544 server process must be running on same machine and
12545 support MIT-SHM. Equivalent to setting the DISPLAY
12546 environment variable to "disp".
12547
12548 See the description below of the "-display WAIT:..."
12549 extensions, where alias "-find" will find the user's
12550 display automatically, and "-create" will create a
12551 Xvfb session if no session is found.
12552
12553 -auth file Set the X authority file to be "file", equivalent to
12554 setting the XAUTHORITY environment variable to "file"
12555 before startup. Same as -xauth file. See Xsecurity(7),
12556 xauth(1) man pages for more info.
12557
12558 Use '-auth guess' to have x11vnc use its -findauth
12559 mechanism (described below) to try to guess the
12560 XAUTHORITY filename and use it.
12561
12562 XDM/GDM/KDM: if you are running x11vnc as root and want
12563 to find the XAUTHORITY before anyone has logged into an
12564 X session yet, use: x11vnc -env FD_XDM=1 -auth guess ...
12565 (This will also find the XAUTHORITY if a user is already
12566 logged into the X session.) When running as root,
12567 FD_XDM=1 will be tried if the initial -auth guess fails.
12568
12569 -N If the X display is :N, try to set the VNC display to
12570 also be :N This just sets the -rfbport option to 5900+N
12571 The program will exit immediately if that port is not
12572 available. The -N option only works with normal -display
12573 usage, e.g. :0 or :8, -N is ignored in the -display
12574 WAIT:..., -create, -find, -svc, -redirect, etc modes.
12575
12576 -autoport n Automatically probe for a free VNC port starting at n.
12577 The default is to start probing at 5900. Use this to
12578 stay away from other VNC servers near 5900.
12579
12580 -rfbport str The VNC port to listen on (a LibVNCServer option), e.g.
12581 5900, 5901, etc. If specified as "-rfbport PROMPT"
12582 then the x11vnc -gui is used to prompt the user to
12583 enter the port number.
12584
12585 -6 IPv6 listening support. In addition to IPv4, the
12586 IPv6 address is listened on for incoming connections.
12587 The same port number as IPv4 is used.
12588
12589 NOTE: This x11vnc binary was compiled to have the
12590 "-6" IPv6 listening mode ENABLED by default (CPPFLAGS
12591 -DX11VNC_LISTEN6=1). So to disable IPv6 listening mode
12592 you MUST supply the "-no6" option (see below.)
12593
12594 The "-6" mode works for both normal connections and
12595 -ssl encrypted ones. Nearly everything is supported
12596 for the IPv6 case, but there are a few exceptions.
12597 See -stunnel for its IPv6 support.
12598
12599 Currently, for absolutely everything to work correctly
12600 the machine may need to have some IPv4 support, at the
12601 least for the loopback interface. However, for nearly
12602 all usage modes no IPv4 support is required. See -nopiv4
12603 .
12604
12605 If you have trouble compiling or running in IPv6 mode,
12606 set -DX11VNC_IPV6=0 in CPPFLAGS when configuring to
12607 disable IPv6 support.
12608
12609 -no6 Disable IPv6 listening support (only useful if the
12610 "-6" mode is compiled in to be the default; see the
12611 X11VNC_LISTEN6 description above under "-6".)
12612
12613 -noipv6 Do not try to use IPv6 for any listening or connecting
12614 sockets. This includes both the listening service
12615 port(s) and outgoing connections from -connect,
12616 -connect_or_exit, or -proxy. Use this if you are having
12617 problems due to IPv6.
12618
12619 -noipv4 Do not try to use IPv4 for any listening or connecting
12620 sockets. This is mainly for exploring the behavior of
12621 x11vnc on an IPv6-only system, but may have other uses.
12622
12623 -reopen If the X server connection is disconnected, try to
12624 reopen the X display (up to one time.) This is of use
12625 for display managers like GDM (KillInitClients option)
12626 that kill x11vnc just after the user logs into the
12627 X session. Note: the reopened state may be unstable.
12628 Set X11VNC_REOPEN_DISPLAY=n to reopen n times and
12629 set X11VNC_REOPEN_SLEEP_MAX to the number of seconds,
12630 default 10, to keep trying to reopen the display (once
12631 per second.)
12632
12633 Update: as of 0.9.9, x11vnc tries to automatically avoid
12634 being killed by the display manager by delaying creating
12635 windows or using XFIXES. So you shouldn't need to use
12636 KillInitClients=false as long as you log in quickly
12637 enough (within 45 seconds of connecting.) You can
12638 disable this by setting X11VNC_AVOID_WINDOWS=never.
12639 You can also set it to the number of seconds to delay.
12640
12641 -reflect host:N Instead of connecting to and polling an X display,
12642 connect to the remote VNC server host:N and be a
12643 reflector/repeater for it. This is useful for trying
12644 to manage the case of many simultaneous VNC viewers
12645 (e.g. classroom broadcasting) where, e.g. you put
12646 a repeater on each network switch, etc, to improve
12647 performance by distributing the load and network
12648 traffic. Implies -shared (use -noshared as a later
12649 option to disable). See the discussion below under
12650 -rawfb vnc:host:N for more details.
12651
12652 -id windowid Show the X window corresponding to "windowid" not
12653 the entire display. New windows like popup menus,
12654 transient toplevels, etc, may not be seen or may be
12655 clipped. Disabling SaveUnders or BackingStore in the
12656 X server may help show them. x11vnc may crash if the
12657 window is initially partially obscured, changes size,
12658 is iconified, etc. Some steps are taken to avoid this
12659 and the -xrandr mechanism is used to track resizes. Use
12660 xwininfo(1) to get the window id, or use "-id pick"
12661 to have x11vnc run xwininfo(1) for you and extract
12662 the id. The -id option is useful for exporting very
12663 simple applications (e.g. the current view on a webcam).
12664 -sid windowid As -id, but instead of using the window directly it
12665 shifts a root view to it: this shows SaveUnders menus,
12666 etc, although they will be clipped if they extend beyond
12667 the window.
12668
12669 -appshare Simple application sharing based on the -id/-sid
12670 mechanism. Every new toplevel window that the
12671 application creates induces a new viewer window via
12672 a reverse connection. The -id/-sid and -connect
12673 options are required. Run 'x11vnc -appshare -help'
12674 for more info.
12675
12676 -clip WxH+X+Y Only show the sub-region of the full display that
12677 corresponds to the rectangle geometry with size WxH and
12678 offset +X+Y. The VNC display has size WxH (i.e. smaller
12679 than the full display). This also works for -id/-sid
12680 mode where the offset is relative to the upper left
12681 corner of the selected window. An example use of this
12682 option would be to split a large (e.g. Xinerama) display
12683 into two parts to be accessed via separate viewers by
12684 running a separate x11vnc on each part.
12685
12686 Use '-clip xinerama0' to clip to the first xinerama
12687 sub-screen (if xinerama is active). xinerama1 for the
12688 2nd sub-screen, etc. This way you don't need to figure
12689 out the WxH+X+Y of the desired xinerama sub-screen.
12690 screens are sorted in increasing distance from the
12691 (0,0) origin (I.e. not the Xserver's order).
12692
12693 -flashcmap In 8bpp indexed color, let the installed colormap flash
12694 as the pointer moves from window to window (slow).
12695 Also try the -8to24 option to avoid flash altogether.
12696 -shiftcmap n Rare problem, but some 8bpp displays use less than 256
12697 colorcells (e.g. 16-color grayscale, perhaps the other
12698 bits are used for double buffering) *and* also need to
12699 shift the pixels values away from 0, .., ncells. "n"
12700 indicates the shift to be applied to the pixel values.
12701 To see the pixel values set DEBUG_CMAP=1 to print out
12702 a colormap histogram. Example: -shiftcmap 240
12703 -notruecolor For 8bpp displays, force indexed color (i.e. a colormap)
12704 even if it looks like 8bpp TrueColor (rare problem).
12705 -advertise_truecolor If the X11 display is indexed color, lie to clients
12706 when they first connect by telling them it is truecolor.
12707 To workaround RealVNC: inPF has colourMap but not 8bpp
12708 Use '-advertise_truecolor reset' to reset client fb too.
12709
12710 -visual n This option probably does not do what you think.
12711 It simply *forces* the visual used for the framebuffer;
12712 this may be a bad thing... (e.g. messes up colors or
12713 cause a crash). It is useful for testing and for some
12714 workarounds. n may be a decimal number, or 0x hex.
12715 Run xdpyinfo(1) for the values. One may also use
12716 "TrueColor", etc. see <X11/X.h> for a list. If the
12717 string ends in ":m" then for better or for worse
12718 the visual depth is forced to be m. You may want to
12719 use -noshm when using this option (so XGetImage may
12720 automatically translate the pixel data).
12721
12722 -overlay Handle multiple depth visuals on one screen, e.g. 8+24
12723 and 24+8 overlay visuals (the 32 bits per pixel are
12724 packed with 8 for PseudoColor and 24 for TrueColor).
12725
12726 Currently -overlay only works on Solaris via
12727 XReadScreen(3X11) and IRIX using XReadDisplay(3).
12728 On Solaris there is a problem with image "bleeding"
12729 around transient popup menus (but not for the menu
12730 itself): a workaround is to disable SaveUnders
12731 by passing the "-su" argument to Xsun (in
12732 /etc/dt/config/Xservers).
12733
12734 Use -overlay as a workaround for situations like these:
12735 Some legacy applications require the default visual to
12736 be 8bpp (8+24), or they will use 8bpp PseudoColor even
12737 when the default visual is depth 24 TrueColor (24+8).
12738 In these cases colors in some windows will be incorrect
12739 in x11vnc unless -overlay is used. Another use of
12740 -overlay is to enable showing the exact mouse cursor
12741 shape (details below).
12742
12743 Under -overlay, performance will be somewhat slower
12744 due to the extra image transformations required.
12745 For optimal performance do not use -overlay, but rather
12746 configure the X server so that the default visual is
12747 depth 24 TrueColor and try to have all apps use that
12748 visual (e.g. some apps have -use24 or -visual options).
12749 -overlay_nocursor Sets -overlay, but does not try to draw the exact mouse
12750 cursor shape using the overlay mechanism.
12751
12752 -8to24 [opts] Try this option if -overlay is not supported on your
12753 OS, and you have a legacy 8bpp app that you want to
12754 view on a multi-depth display with default depth 24
12755 (and is 32 bpp) OR have a default depth 8 display with
12756 depth 24 overlay windows for some apps. This option
12757 may not work on all X servers and hardware (tested
12758 on XFree86/Xorg mga driver and Xsun). The "opts"
12759 string is not required and is described below.
12760
12761 This mode enables a hack where x11vnc monitors windows
12762 within 3 levels from the root window. If it finds
12763 any that are 8bpp it extracts the indexed color
12764 pixel values using XGetImage() and then applies a
12765 transformation using the colormap(s) to create TrueColor
12766 RGB values that it in turn inserts into bits 1-24 of
12767 the framebuffer. This creates a depth 24 "view"
12768 of the display that is then exported via VNC.
12769
12770 Conversely, for default depth 8 displays, the depth
12771 24 regions are read by XGetImage() and everything is
12772 transformed and inserted into a depth 24 TrueColor
12773 framebuffer.
12774
12775 Note that even if there are *no* depth 24 visuals or
12776 windows (i.e. pure 8bpp), this mode is potentially
12777 an improvement over -flashcmap because it avoids the
12778 flashing and shows each window in the correct color.
12779
12780 This method works OK, but may still have bugs and it
12781 does hog resources. If there are multiple 8bpp windows
12782 using different colormaps, one may have to iconify all
12783 but one for the colors to be correct.
12784
12785 There may be painting errors for clipping and switching
12786 between windows of depths 8 and 24. Heuristics are
12787 applied to try to minimize the painting errors. One can
12788 also press 3 Alt_L's in a row to refresh the screen
12789 if the error does not repair itself. Also the option
12790 -fixscreen 8=3.0 or -fixscreen V=3.0 may be used to
12791 periodically refresh the screen at the cost of bandwidth
12792 (every 3 sec for this example).
12793
12794 The [opts] string can contain the following settings.
12795 Multiple settings are separated by commas.
12796
12797 For for some X servers with default depth 24 a
12798 speedup may be achieved via the option "nogetimage".
12799 This enables a scheme were XGetImage() is not used
12800 to retrieve the 8bpp data. Instead, it assumes that
12801 the 8bpp data is in bits 25-32 of the 32bit X pixels.
12802 There is no requirement that the X server should put
12803 the data there for our poll requests, but some do and
12804 so the extra steps to retrieve it can be skipped.
12805 Tested with mga driver with XFree86/Xorg. For the
12806 default depth 8 case this option is ignored.
12807
12808 To adjust how often XGetImage() is used to poll the
12809 non-default visual regions for changes, use the option
12810 "poll=t" where "t" is a floating point time.
12811 (default: 0.05)
12812
12813 Setting the option "level2" will limit the search
12814 for non-default visual windows to two levels from the
12815 root window. Do this on slow machines where you know
12816 the window manager only imposes one extra window between
12817 the app window and the root window.
12818
12819 Also for very slow machines use "cachewin=t"
12820 where t is a floating point amount of time to cache
12821 XGetWindowAttributes results. E.g. cachewin=5.0.
12822 This may lead to the windows being unnoticed for this
12823 amount of time when deiconifying, painting errors, etc.
12824
12825 While testing on a very old SS20 these options gave
12826 tolerable response: -8to24 poll=0.2,cachewin=5.0. For
12827 this machine -overlay is supported and gives better
12828 response.
12829
12830 Debugging for this mode can be enabled by setting
12831 "dbg=1", "dbg=2", or "dbg=3".
12832
12833 -24to32 Very rare problem: if the framebuffer (X display
12834 or -rawfb) is 24bpp instead of the usual 32bpp, then
12835 dynamically transform the pixels to 32bpp. This will be
12836 slower, but can be used to work around problems where
12837 VNC viewers cannot handle 24bpp (e.g. "main: setPF:
12838 not 8, 16 or 32 bpp?"). See the FAQ for more info.
12839
12840 In the case of -rawfb mode, the pixels are directly
12841 modified by inserting a 0 byte to pad them out to 32bpp.
12842 For X displays, a kludge is done that is equivalent to
12843 "-noshm -visual TrueColor:32". (If better performance
12844 is needed for the latter, feel free to ask).
12845
12846 -scale fraction Scale the framebuffer by factor "fraction". Values
12847 less than 1 shrink the fb, larger ones expand it. Note:
12848 the image may not be sharp and response may be slower.
12849 If "fraction" contains a decimal point "." it
12850 is taken as a floating point number, alternatively
12851 the notation "m/n" may be used to denote fractions
12852 exactly, e.g. -scale 2/3
12853
12854 To scale asymmetrically in the horizontal and vertical
12855 directions, specify a WxH geometry to stretch to:
12856 e.g. '-scale 1024x768', or also '-scale 0.9x0.75'
12857
12858 Scaling Options: can be added after "fraction" via
12859 ":", to supply multiple ":" options use commas.
12860 If you just want a quick, rough scaling without
12861 blending, append ":nb" to "fraction" (e.g. -scale
12862 1/3:nb). No blending is the default for 8bpp indexed
12863 color, to force blending for this case use ":fb".
12864
12865 To disable -scrollcopyrect and -wirecopyrect under
12866 -scale use ":nocr". If you need to to enable them use
12867 ":cr" or specify them explicitly on the command line.
12868 If a slow link is detected, ":nocr" may be applied
12869 automatically. Default: :cr
12870
12871 More esoteric options: for compatibility with vncviewers
12872 the scaled width is adjusted to be a multiple of 4:
12873 to disable this use ":n4". ":in" use interpolation
12874 scheme even when shrinking, ":pad" pad scaled width
12875 and height to be multiples of scaling denominator
12876 (e.g. 3 for 2/3).
12877
12878 -geometry WxH Same as -scale WxH
12879
12880 -scale_cursor frac By default if -scale is supplied the cursor shape is
12881 scaled by the same factor. Depending on your usage,
12882 you may want to scale the cursor independently of the
12883 screen or not at all. If you specify -scale_cursor
12884 the cursor will be scaled by that factor. When using
12885 -scale mode to keep the cursor at its "natural" size
12886 use "-scale_cursor 1". Most of the ":" scaling
12887 options apply here as well.
12888
12889 -viewonly All VNC clients can only watch (default off).
12890 -shared VNC display is shared, i.e. more than one viewer can
12891 connect at the same time (default off).
12892 -once Exit after the first successfully connected viewer
12893 disconnects, opposite of -forever. This is the Default.
12894 -forever Keep listening for more connections rather than exiting
12895 as soon as the first client(s) disconnect. Same as -many
12896
12897 To get the standard non-shared VNC behavior where when
12898 a new VNC client connects the existing VNC client is
12899 dropped use: -nevershared -forever This method can
12900 also be used to guard against hung TCP connections that
12901 do not go away.
12902
12903 -loop Create an outer loop restarting the x11vnc process
12904 whenever it terminates. -bg and -inetd are ignored
12905 in this mode (however see -loopbg below).
12906
12907 Useful for continuing even if the X server terminates
12908 and restarts (at that moment the process will need
12909 permission to reconnect to the new X server of course).
12910
12911 Use, e.g., -loop100 to sleep 100 millisecs between
12912 restarts, etc. Default is 2000ms (i.e. 2 secs) Use,
12913 e.g. -loop300,5 to sleep 300 ms and only loop 5 times.
12914
12915 If -loopbg (plus any numbers) is specified instead,
12916 the "-bg" option is implied and the mode approximates
12917 inetd(8) usage to some degree. In this case when
12918 it goes into the background any listening sockets
12919 (i.e. ports 5900, 5800) are closed, so the next one
12920 in the loop can use them. This mode will only be of
12921 use if a VNC client (the only client for that process)
12922 is already connected before the process goes into the
12923 background, for example, usage of -display WAIT:..,
12924 -svc, and -connect can make use of this "poor man's"
12925 inetd mode. The default wait time is 500ms in this
12926 mode. This usage could use useful: -svc -bg -loopbg
12927
12928 -timeout n Exit unless a client connects within the first n seconds
12929 after startup.
12930
12931 If there have been no connection attempts after n
12932 seconds x11vnc exits immediately. If a client is
12933 trying to connect but has not progressed to the normal
12934 operating state, x11vnc gives it a few more seconds
12935 to finish and exits if it does not make it to the
12936 normal state.
12937
12938 For reverse connections via -connect or -connect_or_exit
12939 a timeout of n seconds will be set for all reverse
12940 connects. If the connect timeout alarm goes off,
12941 x11vnc will exit immediately.
12942
12943 -sleepin n At startup sleep n seconds before proceeding (e.g. to
12944 allow redirs and listening clients to start up)
12945
12946 If a range is given: '-sleepin min-max', a random value
12947 between min and max is slept. E.g. '-sleepin 0-20' and
12948 '-sleepin 10-30'. Floats are allowed too.
12949
12950 -inetd Launched by inetd(8): stdio instead of listening socket.
12951 Note: if you are not redirecting stderr to a log file
12952 (via shell 2> or -o option) you MUST also specify the -q
12953 option, otherwise the stderr goes to the viewer which
12954 will cause it to abort. Specifying both -inetd and -q
12955 and no -o will automatically close the stderr.
12956
12957 -tightfilexfer Enable the TightVNC file transfer extension. Note that
12958 that when the -viewonly option is supplied all file
12959 transfers are disabled. Also clients that log in
12960 viewonly cannot transfer files. However, if the remote
12961 control mechanism is used to change the global or
12962 per-client viewonly state the filetransfer permissions
12963 will NOT change.
12964
12965 IMPORTANT: please understand if -tightfilexfer is
12966 specified and you run x11vnc as root for, say, inetd
12967 or display manager (gdm, kdm, ...) access and you do
12968 not have it switch users via the -users option, then
12969 VNC Viewers that connect are able to do filetransfer
12970 reads and writes as *root*.
12971
12972 Also, tightfilexfer is disabled in -unixpw mode.
12973
12974 -ultrafilexfer Note: to enable UltraVNC filetransfer and to get it to
12975 work you probably need to supply these LibVNCServer
12976 options: "-rfbversion 3.6 -permitfiletransfer"
12977 "-ultrafilexfer" is an alias for this combination.
12978
12979 IMPORTANT: please understand if -ultrafilexfer is
12980 specified and you run x11vnc as root for, say, inetd
12981 or display manager (gdm, kdm, ...) access and you do
12982 not have it switch users via the -users option, then
12983 VNC Viewers that connect are able to do filetransfer
12984 reads and writes as *root*.
12985
12986 Note that sadly you cannot do both -tightfilexfer and
12987 -ultrafilexfer at the same time because the latter
12988 requires setting the version to 3.6 and tightvnc will
12989 not do filetransfer when it sees that version number.
12990
12991 -http Instead of using -httpdir (see below) to specify
12992 where the Java vncviewer applet is, have x11vnc try
12993 to *guess* where the directory is by looking relative
12994 to the program location and in standard locations
12995 (/usr/local/share/x11vnc/classes, etc). Under -ssl or
12996 -stunnel the ssl classes subdirectory is sought.
12997 -http_ssl As -http, but force lookup for ssl classes subdir.
12998
12999 Note that for HTTPS, single-port Java applet delivery
13000 you can set X11VNC_HTTPS_DOWNLOAD_WAIT_TIME to the
13001 max number of seconds to wait for the applet download
13002 to finish. The default is 15.
13003
13004 -avahi Use the Avahi/mDNS ZeroConf protocol to advertise
13005 this VNC server to the local network. (Related terms:
13006 Rendezvous, Bonjour). Depending on your setup, you
13007 may need to start avahi-daemon and open udp port 5353
13008 in your firewall.
13009
13010 You can set X11VNC_AVAHI_NAME, X11VNC_AVAHI_HOST,
13011 and/or X11VNC_AVAHI_PORT environment variables
13012 to override the default values. For example:
13013 -env X11VNC_AVAHI_NAME=wally
13014
13015 If the avahi API cannot be found at build time, a helper
13016 program like avahi-publish(1) or dns-sd(1) will be tried
13017
13018 -mdns Same as -avahi.
13019 -zeroconf Same as -avahi.
13020
13021 -connect string For use with "vncviewer -listen" reverse connections.
13022 If "string" has the form "host" or "host:port"
13023 the connection is made once at startup.
13024
13025 Use commas for a list of host's and host:port's.
13026 E.g. -connect host1,host2 or host1:0,host2:5678.
13027 Note that to reverse connect to multiple hosts at the
13028 same time you will likely need to also supply: -shared
13029
13030 Note that unlike most vnc servers, x11vnc will require a
13031 password for reverse as well as for forward connections.
13032 (provided password auth has been enabled, -rfbauth, etc)
13033 If you do not want to require a password for reverse
13034 connections set X11VNC_REVERSE_CONNECTION_NO_AUTH=1 in
13035 your environment before starting x11vnc.
13036
13037 If "string" contains "/" it is instead interpreted
13038 as a file to periodically check for new hosts.
13039 The first line is read and then the file is truncated.
13040 Be careful about the location of this file if x11vnc
13041 is running as root (e.g. via gdm(1), etc).
13042
13043
13044 Repeater mode: Some services provide an intermediate
13045 "vnc repeater": http://www.uvnc.com/addons/repeater.html
13046 (and also http://koti.mbnet.fi/jtko/ for linux port)
13047 that acts as a proxy/gateway. Modes like these require
13048 an initial string to be sent for the reverse connection
13049 before the VNC protocol is started. Here are the ways
13050 to do this:
13051
13052 -connect pre=some_string+host:port
13053 -connect pre128=some_string+host:port
13054 -connect repeater=ID:1234+host:port
13055 -connect repeater=23.45.67.89::5501+host:port
13056
13057 SSVNC notation is also supported:
13058
13059 -connect repeater://host:port+ID:1234
13060
13061 As with normal -connect usage, if the repeater port is
13062 not supplied 5500 is assumed.
13063
13064 The basic idea is between the special tag, e.g. "pre="
13065 and "+" is the pre-string to be sent. Note that in
13066 this case host:port is the repeater server, NOT the
13067 vnc viewer. Somehow the pre-string tells the repeater
13068 server how to find the vnc viewer and connect you to it.
13069
13070 In the case pre=some_string+host:port, "some_string"
13071 is simply sent. In the case preNNN=some_string+host:port
13072 "some_string" is sent in a null padded buffer of
13073 length NNN. repeater= is the same as pre250=, this is
13074 the ultravnc repeater buffer size.
13075
13076 Strings like "\n" and "\r", etc. are expanded to
13077 newline and carriage return. "\c" is expanded to
13078 "," since the connect string is comma separated.
13079
13080 See also the -proxy option below for additional ways
13081 to plumb reverse connections.
13082
13083 Reverse SSL: using -connect in -ssl mode makes x11vnc
13084 act as an SSL client (initiates SSL connection) rather
13085 than an SSL server. The idea is x11vnc might be
13086 connecting to stunnel on the viewer side with the
13087 viewer in listening mode. If you do not want this
13088 behavior, use -env X11VNC_DISABLE_SSL_CLIENT_MODE=1.
13089 With this the viewer side can act as the SSL client
13090 as it normally does for forward connections.
13091
13092 Reverse SSL Repeater mode: This will work, but note
13093 that if the VNC Client does any sort of a 'Fetch Cert'
13094 action before connecting, then the Repeater will
13095 likely drop the connection and both sides will need
13096 to restart. Consider the use of -connect_or_exit
13097 and -loop300,2 to have x11vnc reconnect once to the
13098 repeater after the fetch. You will probably also want
13099 to supply -sslonly to avoid x11vnc thinking the delay
13100 in response means the connection is VeNCrypt. The env
13101 var X11VNC_DISABLE_SSL_CLIENT_MODE=1 discussed above
13102 may also be useful (i.e. the viewer can do a forward
13103 connection as it normally does.)
13104
13105 IPv6: as of x11vnc 0.9.10 the -connect option should
13106 connect to IPv6 hosts properly. If there are problems
13107 you can disable IPv6 by setting -DX11VNC_IPV6=0
13108 in CPPFLAGS when configuring. If there problems
13109 connecting to IPv6 hosts consider a relay like the
13110 included inet6to4 script or the -proxy option.
13111
13112 -connect_or_exit str As with -connect, except if none of the reverse
13113 connections succeed, then x11vnc shuts down immediately
13114
13115 An easier to type alias for this option is '-coe'
13116
13117 By the way, if you do not want x11vnc to listen on
13118 ANY interface use -rfbport 0 which is handy for the
13119 -connect_or_exit mode.
13120
13121 -proxy string Use proxy in string (e.g. host:port) as a proxy for
13122 making reverse connections (-connect or -connect_or_exit
13123 options).
13124
13125 Web proxies are supported, but note by default most of
13126 them only support destination connections to ports 443
13127 or 563, so this might not be very useful (the viewer
13128 would need to listen on that port or the router would
13129 have to do a port redirection).
13130
13131 A web proxy may be specified by either "host:port"
13132 or "http://host:port" (the port is required even if
13133 it is the common choices 80 or 8080)
13134
13135 SOCKS4, SOCKS4a, and SOCKS5 are also supported.
13136 SOCKS proxies normally do not have restrictions on the
13137 destination port number.
13138
13139 Use a format like this: socks://host:port or
13140 socks5://host:port. Note that ssh -D does not support
13141 SOCKS4a, so use socks5://. For socks:// SOCKS4 is used
13142 on a numerical IP and "localhost", otherwise SOCKS4a
13143 is used (and so the proxy tries to do the DNS lookup).
13144
13145 An experimental mode is "-proxy http://host:port/..."
13146 Note the "/" after the port that distinguishes it from
13147 a normal web proxy. The port must be supplied even if
13148 it is the default 80. For this mode a GET is done to
13149 the supplied URL with the string host=H&port=P appended.
13150 H and P will be the -connect reverse connect host
13151 and port. Use the string "__END__" to disable the
13152 appending. The basic idea here is that maybe some cgi
13153 script provides the actual viewer hookup and tunnelling.
13154 How to actually achieve this within cgi, php, etc. is
13155 not clear... A custom web server or apache module
13156 would be straight-forward.
13157
13158 Another experimental mode is "-proxy ssh://user@host"
13159 in which case a SSH tunnel is used for the proxying.
13160 "user@" is not needed unless your unix username is
13161 different on "host". For a non-standard SSH port
13162 use ssh://user@host:port. If proxies are chained (see
13163 next paragraph) then the ssh one must be the first one.
13164 If ssh-agent is not active, then the ssh password needs
13165 to be entered in the terminal where x11vnc is running.
13166 Examples:
13167
13168 -connect localhost:0 -proxy ssh://me@friends-pc:2222
13169
13170 -connect snoopy:0 -proxy ssh://ssh.company.com
13171
13172 Multiple proxies may be chained together in case one
13173 needs to ricochet off of a number of hosts to finally
13174 reach the VNC viewer. Up to 3 may be chained, separate
13175 them by commas in the order they are to be connected to.
13176 E.g.: http://host1:port1,socks5://host2:port2 or three
13177 like: first,second,third
13178
13179 IPv6: as of x11vnc 0.9.10 the -proxy option should
13180 connect to IPv6 hosts properly. If there are problems
13181 you can disable IPv6 by setting -DX11VNC_IPV6=0
13182 in CPPFLAGS when configuring. If there problems
13183 connecting to IPv6 hosts consider a relay like the
13184 included inet6to4 script.
13185
13186 -vncconnect Monitor the VNC_CONNECT X property set by the standard
13187 -novncconnect VNC program vncconnect(1). When the property is
13188 set to "host" or "host:port" establish a reverse
13189 connection. Using xprop(1) instead of vncconnect may
13190 work (see the FAQ). The -remote control mechanism uses
13191 X11VNC_REMOTE channel, and this option disables/enables
13192 it as well. Default: -vncconnect
13193
13194 To use different names for these X11 properties (e.g. to
13195 have separate communication channels for multiple
13196 x11vnc's on the same display) set the VNC_CONNECT or
13197 X11VNC_REMOTE env. vars. to the string you want, for
13198 example: -env X11VNC_REMOTE=X11VNC_REMOTE_12345
13199 Both sides of the channel must use the same unique name.
13200 The same can be done for the internal X11VNC_TICKER
13201 property (heartbeat and timestamp) if desired.
13202
13203 -allow host1[,host2..] Only allow client connections from hosts matching
13204 the comma separated list of hostnames or IP addresses.
13205 Can also be a numerical IP prefix, e.g. "192.168.100."
13206 to match a simple subnet, for more control build
13207 LibVNCServer with libwrap support (See the FAQ). If the
13208 list contains a "/" it instead is a interpreted
13209 as a file containing addresses or prefixes that is
13210 re-read each time a new client connects. Lines can be
13211 commented out with the "#" character in the usual way.
13212
13213 -allow applies in -ssl mode, but not in -stunnel mode.
13214
13215 IPv6: as of x11vnc 0.9.10 a host can be specified
13216 in IPv6 numerical format, e.g. 2001:4860:b009::93.
13217
13218 -localhost Basically the same as "-allow 127.0.0.1".
13219
13220 Note: if you want to restrict which network interface
13221 x11vnc listens on, see the -listen option below.
13222 E.g. "-listen localhost" or "-listen 192.168.3.21".
13223 As a special case, the option "-localhost" implies
13224 "-listen localhost".
13225
13226 A rare case, but for non-localhost -listen usage, if
13227 you use the remote control mechanism (-R) to change
13228 the -listen interface you may need to manually adjust
13229 the -allow list (and vice versa) to avoid situations
13230 where no connections (or too many) are allowed.
13231
13232 If you do not want x11vnc to listen on ANY interface
13233 (evidently you are using -connect or -connect_or_exit,
13234 or plan to use remote control: -R connect:host), use
13235 -rfbport 0
13236
13237 IPv6: if IPv6 is supported, this option automatically
13238 implies the IPv6 loopback address '::1' as well.
13239
13240 -unixsock str Listen on the unix socket (AF_UNIX) 'str'
13241 for connections. This mode is for either local
13242 connections or a tunnel endpoint where one wants the
13243 file permission of the unix socket file to determine
13244 what can connect to it. (This currently requires an
13245 edit to libvnserver/rfbserver.c: comment out lines 310
13246 and 311, 'close(sock)' and 'return NULL' in rfbserver.c
13247 after the setsockopt() call.) Note that to disable all
13248 tcp listening ports specify '-rfbport 0' and should be
13249 useful with this mode. Example:
13250 mkdir ~/s; chmod 700 ~/s;
13251 x11vnc -unixsock ~/s/mysock -rfbport 0 ...
13252 The SSVNC unix vncviewer can connect to unix sockets.
13253
13254 -listen6 str When in IPv6 listen mode "-6", listen only on the
13255 network interface with address "str". It also works
13256 for link scope addresses (fe80::219:dbff:fee5:3f92%eth0)
13257 and IPv6 hostname strings (e.g. ipv6.google.com.)
13258 Use LibVNCServer -listen option for the IPv4 interface.
13259
13260 -nolookup Do not use gethostbyname() or gethostbyaddr() to look up
13261 host names or IP numbers. Use this if name resolution
13262 is incorrectly set up and leads to long pauses as name
13263 lookups time out, etc.
13264
13265 -input string Fine tuning of allowed user input. If "string" does
13266 not contain a comma "," the tuning applies only to
13267 normal clients. Otherwise the part before "," is
13268 for normal clients and the part after for view-only
13269 clients. "K" is for Keystroke input, "M" for
13270 Mouse-motion input, "B" for Button-click input, "C"
13271 is for Clipboard input, and "F" is for File transfer
13272 (ultravnc only). Their presence in the string enables
13273 that type of input. E.g. "-input M" means normal
13274 users can only move the mouse and "-input KMBCF,M"
13275 lets normal users do anything and enables view-only
13276 users to move the mouse. This option is ignored when
13277 a global -viewonly is in effect (all input is discarded
13278 in that case).
13279
13280 -grabkbd When VNC viewers are connected, attempt to the grab
13281 the keyboard so a (non-malicious) user sitting at the
13282 physical display is not able to enter keystrokes.
13283 This method uses XGrabKeyboard(3X11) and so it is
13284 not secure and does not rule out the person at the
13285 physical display injecting keystrokes by flooding the
13286 server with them, grabbing the keyboard himself, etc.
13287 Some degree of cooperation from the person at the
13288 display is assumed. This is intended for remote
13289 help-desk or educational usage modes.
13290
13291 Note: on some recent (12/2010) X servers and/or
13292 desktops, -grabkbd no longer works: it prevents the
13293 window manager from resizing windows and similar things.
13294 Try -ungrabboth below (might not work.)
13295
13296 -grabptr As -grabkbd, but for the mouse pointer using
13297 XGrabPointer(3X11). Unfortunately due to the way the X
13298 server works, the mouse can still be moved around by the
13299 user at the physical display, but he will not be able to
13300 change window focus with it. Also some window managers
13301 that call XGrabServer(3X11) for resizes, etc, will
13302 act on the local user's input. Again, some degree of
13303 cooperation from the person at the display is assumed.
13304
13305 -ungrabboth Whenever there is any input (either keyboard or
13306 pointer), ungrab *both* the keyboard and the pointer
13307 while injecting the synthetic input. This is to allow
13308 window managers, etc. a chance to grab.
13309
13310 -grabalways Apply both -grabkbd and -grabptr even when no VNC
13311 viewers are connected. If you only want one of them,
13312 use the -R remote control to turn the other back on,
13313 e.g. -R nograbptr.
13314
13315 -viewpasswd string Supply a 2nd password for view-only logins. The -passwd
13316 (full-access) password must also be supplied.
13317
13318 -passwdfile filename Specify the LibVNCServer password via the first line
13319 of the file "filename" (instead of via -passwd on
13320 the command line where others might see it via ps(1)).
13321
13322 See the descriptions below for how to supply multiple
13323 passwords, view-only passwords, to specify external
13324 programs for the authentication, and other features.
13325
13326 If the filename is prefixed with "rm:" it will be
13327 removed after being read. Perhaps this is useful in
13328 limiting the readability of the file. In general, the
13329 password file should not be readable by untrusted users
13330 (BTW: neither should the VNC -rfbauth file: it is NOT
13331 encrypted, only obscured with a fixed key).
13332
13333 If the filename is prefixed with "read:" it will
13334 periodically be checked for changes and reread. It is
13335 guaranteed to be reread just when a new client connects
13336 so that the latest passwords will be used.
13337
13338 If "filename" is prefixed with "cmd:" then the
13339 string after the ":" is run as an external command:
13340 the output of the command will be interpreted as if it
13341 were read from a password file (see below). If the
13342 command does not exit with 0, then x11vnc terminates
13343 immediately. To specify more than 1000 passwords this
13344 way set X11VNC_MAX_PASSWDS before starting x11vnc.
13345 The environment variables are set as in -accept.
13346
13347 Note that due to the VNC protocol only the first 8
13348 characters of a password are used (DES key).
13349
13350 If "filename" is prefixed with "custom:" then a
13351 custom password checker is supplied as an external
13352 command following the ":". The command will be run
13353 when a client authenticates. If the command exits with
13354 0 the client is accepted, otherwise it is rejected.
13355 The environment variables are set as in -accept.
13356
13357 The standard input to the custom command will be a
13358 decimal digit "len" followed by a newline. "len"
13359 specifies the challenge size and is usually 16 (the
13360 VNC spec). Then follows len bytes which is the random
13361 challenge string that was sent to the client. This is
13362 then followed by len more bytes holding the client's
13363 response (i.e. the challenge string encrypted via DES
13364 with the user password in the standard situation).
13365
13366 The "custom:" scheme can be useful to implement
13367 dynamic passwords or to implement methods where longer
13368 passwords and/or different encryption algorithms
13369 are used. The latter will require customizing the VNC
13370 client as well. One could create an MD5SUM based scheme
13371 for example.
13372
13373 File format for -passwdfile:
13374
13375 If multiple non-blank lines exist in the file they are
13376 all taken as valid passwords. Blank lines are ignored.
13377 Password lines may be "commented out" (ignored) if
13378 they begin with the character "#" or the line contains
13379 the string "__SKIP__". Lines may be annotated by use
13380 of the "__COMM__" string: from it to the end of the
13381 line is ignored. An empty password may be specified
13382 via the "__EMPTY__" string on a line by itself (note
13383 your viewer might not accept empty passwords).
13384
13385 If the string "__BEGIN_VIEWONLY__" appears on a
13386 line by itself, the remaining passwords are used for
13387 viewonly access. For compatibility, as a special case
13388 if the file contains only two password lines the 2nd
13389 one is automatically taken as the viewonly password.
13390 Otherwise the "__BEGIN_VIEWONLY__" token must be
13391 used to have viewonly passwords. (tip: make the 3rd
13392 and last line be "__BEGIN_VIEWONLY__" to have 2
13393 full-access passwords)
13394
13395 -showrfbauth filename Print to the screen the obscured VNC password kept in
13396 the rfbauth file "filename" and then exit.
13397
13398 -unixpw [list] Use Unix username and password authentication. x11vnc
13399 will use the su(1) program to verify the user's
13400 password. [list] is an optional comma separated list
13401 of allowed Unix usernames. If the [list] string begins
13402 with the character "!" then the entire list is taken
13403 as an exclude list. See below for per-user options
13404 that can be applied.
13405
13406 A familiar "login:" and "Password:" dialog is
13407 presented to the user on a black screen inside the
13408 vncviewer. The connection is dropped if the user fails
13409 to supply the correct password in 3 tries or does not
13410 send one before a 45 second timeout. Existing clients
13411 are view-only during this period.
13412
13413 If the first character received is "Escape" then the
13414 unix username will not be displayed after "login:"
13415 as it is typed. This could be of use for VNC viewers
13416 that automatically type the username and password.
13417
13418 Since the detailed behavior of su(1) can vary from
13419 OS to OS and for local configurations, test the mode
13420 before deployment to make sure it is working properly.
13421 x11vnc will attempt to be conservative and reject a
13422 login if anything abnormal occurs.
13423
13424 One case to note: FreeBSD and the other BSD's by
13425 default it is impossible for the user running x11vnc to
13426 validate his *own* password via su(1) (commenting out
13427 the pam_self.so entry in /etc/pam.d/su eliminates this
13428 behavior). So the x11vnc login will always *FAIL* for
13429 this case (even when the correct password is supplied).
13430
13431 A possible workaround for this on *BSD would be to
13432 start x11vnc as root with the "-users +nobody" option
13433 to immediately switch to user nobody where the su'ing
13434 will proceed normally.
13435
13436 Another source of potential problems are PAM modules
13437 that prompt for extra info, e.g. password aging modules.
13438 These logins will fail as well even when the correct
13439 password is supplied.
13440
13441 **IMPORTANT**: to prevent the Unix password being sent
13442 in *clear text* over the network, one of two schemes
13443 will be enforced: 1) the -ssl builtin SSL mode, or 2)
13444 require both -localhost and -stunnel be enabled.
13445
13446 Method 1) ensures the traffic is encrypted between
13447 viewer and server. A PEM file will be required, see the
13448 discussion under -ssl below (under some circumstances
13449 a temporary one can be automatically generated).
13450
13451 Method 2) requires the viewer connection to appear
13452 to come from the same machine x11vnc is running on
13453 (e.g. from a ssh -L port redirection). And that the
13454 -stunnel SSL mode be used for encryption over the
13455 network. (see the description of -stunnel below).
13456
13457 Note: as a convenience, if you ssh(1) in and start
13458 x11vnc it will check if the environment variable
13459 SSH_CONNECTION is set and appears reasonable. If it
13460 does, then the -ssl or -stunnel requirement will be
13461 dropped since it is assumed you are using ssh for the
13462 encrypted tunnelling. -localhost is still enforced.
13463 Use -ssl or -stunnel to force SSL usage even if
13464 SSH_CONNECTION is set.
13465
13466 To override the above restrictions you can set
13467 environment variables before starting x11vnc:
13468
13469 Set UNIXPW_DISABLE_SSL=1 to disable requiring either
13470 -ssl or -stunnel (as under SSH_CONNECTION.) Evidently
13471 you will be using a different method to encrypt the
13472 data between the vncviewer and x11vnc: perhaps ssh(1)
13473 or an IPSEC VPN. -localhost is still enforced (however,
13474 see the next paragraph.)
13475
13476 Set UNIXPW_DISABLE_LOCALHOST=1 to disable the -localhost
13477 requirement in -unixpw modes. One should never do this
13478 (i.e. allow the Unix passwords to be sniffed on the
13479 network.) This also disables the localhost requirement
13480 for reverse connections (see below.)
13481
13482 Note that use of -localhost with ssh(1) (and no -unixpw)
13483 is roughly the same as requiring a Unix user login
13484 (since a Unix password or the user's public key
13485 authentication is used by sshd on the machine where
13486 x11vnc runs and only local connections from that machine
13487 are accepted).
13488
13489 Regarding reverse connections (e.g. -R connect:host
13490 and -connect host), when the -localhost constraint is
13491 in effect then reverse connections can only be used
13492 to connect to the same machine x11vnc is running on
13493 (default port 5500). Please use a ssh or stunnel port
13494 redirection to the viewer machine to tunnel the reverse
13495 connection over an encrypted channel.
13496
13497 In -inetd mode the Method 1) will be enforced (not
13498 Method 2). With -ssl in effect reverse connections
13499 are disabled. If you override this via env. var, be
13500 sure to also use encryption from the viewer to inetd.
13501 Tip: you can also have your own stunnel spawn x11vnc
13502 in -inetd mode (thereby bypassing inetd). See the FAQ
13503 for details.
13504
13505 The user names in the comma separated [list] may have
13506 per-user options after a ":", e.g. "fred:opts"
13507 where "opts" is a "+" separated list of
13508 "viewonly", "fullaccess", "input=XXXX", or
13509 "deny", e.g. "karl,wally:viewonly,boss:input=M".
13510 For "input=" it is the K,M,B,C described under -input.
13511
13512 If an item in the list is "*" that means those
13513 options apply to all users. It ALSO implies all users
13514 are allowed to log in after supplying a valid password.
13515 Use "deny" to explicitly deny some users if you use
13516 "*" to set a global option. If [list] begins with the
13517 "!" character then "*" is ignored for checking if
13518 the user is allowed, but the option values associated
13519 with it do apply as normal.
13520
13521 There are also some utilities for checking passwords
13522 if [list] starts with the "%" character. See the
13523 quick_pw() function for more details. Description:
13524 "%-" or "%stdin" means read one line from stdin.
13525 "%env" means it is in $UNIXPW env var. A leading
13526 "%/" or "%." means read the first line from the
13527 filename that follows after the % character. % by
13528 itself means prompt for the username and password.
13529 Otherwise: %user:pass E.g. -unixpw %fred:swordfish
13530 For the other cases user:pass is read from the indicated
13531 source. If the password is correct 'Y user' is printed
13532 and the program exit code is 0. If the password is
13533 incorrect it prints 'N user' and the exit code is 1.
13534 If there is some other error the exit code is 2.
13535 This feature enables x11vnc to be a general unix user
13536 password checking tool; it could be used from scripts
13537 or other programs. These % password checks also apply
13538 to the -unixpw_nis and -unixpw_cmd options.
13539
13540 For the % password check, if the env. var. UNIXPW_CMD
13541 is set to a command then it is run as the user (assuming
13542 the password is correct.) The output of the command is
13543 not printed, the program or script must manage that by
13544 some other means. The exit code of x11vnc will depend
13545 on the exit code of the command that is run.
13546
13547 Use -nounixpw to disable unixpw mode if it was enabled
13548 earlier in the cmd line (e.g. -svc mode)
13549
13550 -unixpw_nis [list] As -unixpw above, however do not use su(1) but rather
13551 use the traditional getpwnam(3) + crypt(3) method to
13552 verify passwords. All of the above -unixpw options and
13553 constraints apply.
13554
13555 This mode requires that the encrypted passwords be
13556 readable. Encrypted passwords stored in /etc/shadow
13557 will be inaccessible unless x11vnc is run as root.
13558
13559 This is called "NIS" mode simply because in most
13560 NIS setups user encrypted passwords are accessible
13561 (e.g. "ypcat passwd") by an ordinary user and so that
13562 user can authenticate ANY user.
13563
13564 NIS is not required for this mode to work (only that
13565 getpwnam(3) return the encrypted password is required),
13566 but it is unlikely it will work (as an ordinary user)
13567 for most modern environments unless NIS is available.
13568 On the other hand, when x11vnc is run as root it will
13569 be able to to access /etc/shadow even if NIS is not
13570 available (note running as root is often done when
13571 running x11vnc from inetd and xdm/gdm/kdm).
13572
13573 Looked at another way, if you do not want to use the
13574 su(1) method provided by -unixpw (i.e. su_verify()), you
13575 can run x11vnc as root and use -unixpw_nis. Any users
13576 with passwords in /etc/shadow can then be authenticated.
13577
13578 In -unixpw_nis mode, under no circumstances is x11vnc's
13579 user password verifying function based on su called
13580 (i.e. the function su_verify() that runs /bin/su
13581 in a pseudoterminal to verify passwords.) However,
13582 if -unixpw_nis is used in conjunction with the -find
13583 and -create -display WAIT:... modes then, if x11vnc is
13584 running as root, /bin/su may be called externally to
13585 run the find or create commands.
13586
13587 -unixpw_cmd cmd As -unixpw above, however do not use su(1) but rather
13588 run the externally supplied command "cmd". The first
13589 line of its stdin will be the username and the second
13590 line the received password. If the command exits
13591 with status 0 (success) the VNC user will be accepted.
13592 It will be rejected for any other return status.
13593
13594 Dynamic passwords and non-unix passwords, e.g. LDAP,
13595 can be implemented this way by providing your own custom
13596 helper program. Note that the remote viewer is given 3
13597 tries to enter the correct password, and so the program
13598 may be called in a row that many (or more) times.
13599
13600 If a list of allowed users is needed to limit who can
13601 log in, use -unixpw [list] in addition to this option.
13602
13603 In FINDDISPLAY and FINDCREATEDISPLAY modes the "cmd"
13604 will also be run with the RFB_UNIXPW_CMD_RUN env. var.
13605 non-empty and set to the corresponding display
13606 find/create command. The first two lines of input are
13607 the username and passwd as in the normal case described
13608 above. To support FINDDISPLAY and FINDCREATEDISPLAY,
13609 "cmd" should run the requested command as the user
13610 (and most likely refusing to run it if the password is
13611 not correct.) Here is an example script (note it has
13612 a hardwired bogus password "abc"!)
13613
13614 #!/bin/sh
13615 # Example x11vnc -unixpw_cmd script.
13616 # Read the first two lines of stdin (user and passwd)
13617 read user
13618 read pass
13619
13620 debug=0
13621 if [ $debug = 1 ]; then
13622 echo "user: $user" 1>&2
13623 echo "pass: $pass" 1>&2
13624 env | egrep -i 'rfb|vnc' 1>&2
13625 fi
13626
13627 # Check if the password is valid.
13628 # (A real example would use ldap lookup, etc!)
13629 if [ "X$pass" != "Xabc" ]; then
13630 exit 1 # incorrect password
13631 fi
13632
13633 if [ "X$RFB_UNIXPW_CMD_RUN" = "X" ]; then
13634 exit 0 # correct password
13635 else
13636 # Run the requested command (finddisplay)
13637 if [ $debug = 1 ]; then
13638 echo "run: $RFB_UNIXPW_CMD_RUN" 1>&2
13639 fi
13640 exec /bin/su - "$user" -c "$RFB_UNIXPW_CMD_RUN"
13641 fi
13642
13643 In -unixpw_cmd mode, under no circumstances is x11vnc's
13644 user password verifying function based on su called
13645 (i.e. the function su_verify() that runs /bin/su in a
13646 pseudoterminal to verify passwords.) It is up to the
13647 supplied unixpw_cmd to do user switching if desired
13648 and if it has the permissions to do so.
13649
13650 -find Find the user's display using FINDDISPLAY. This
13651 is an alias for "-display WAIT:cmd=FINDDISPLAY".
13652
13653 Note: if a -display occurs later on the command line
13654 it will override the -find setting.
13655
13656 For this and the next few options see -display WAIT:...
13657 below for all of the details.
13658
13659 -finddpy Run the FINDDISPLAY program, print out the found
13660 display (if any) and exit. Output is like: DISPLAY=:0.0
13661 DISPLAY=:0.0,XPID=12345 or DISPLAY=:0.0,VT=7. XPID is
13662 the process ID of the found X server. VT is the Linux
13663 virtual terminal of the X server.
13664 -listdpy Have the FINDDISPLAY program list all of your displays
13665 (i.e. all the X displays on the local machine that you
13666 have access rights to). x11vnc then exits.
13667
13668 -findauth [disp] Apply the -find/-finddpy heuristics to try to guess
13669 the XAUTHORITY file for DISPLAY 'disp'. If 'disp'
13670 is not supplied, then the value in the -display on
13671 the cmdline is used; failing that $DISPLAY is used;
13672 and failing that ":0" is used. x11vnc then exits.
13673
13674 If nothing is printed out, that means no XAUTHORITY was
13675 found for 'disp'; i.e. failure. If "XAUTHORITY="
13676 is printed out, that means use the default (i.e. do
13677 not set XAUTHORITY). If "XAUTHORITY=/path/to/file"
13678 is printed out, then use that file.
13679
13680 XDM/GDM/KDM: if you are running x11vnc as root and want
13681 to find the XAUTHORITY before anyone has logged into an
13682 X session yet, use: x11vnc -env FD_XDM=1 -findauth ...
13683 (This will also find the XAUTHORITY if a user is already
13684 logged into the X session.) When running as root,
13685 FD_XDM=1 will be tried if the initial -findauth fails.
13686
13687 -create First try to find the user's display using FINDDISPLAY,
13688 if that doesn't succeed create an X session via the
13689 FINDCREATEDISPLAY method. This is an alias for
13690 "-display WAIT:cmd=FINDCREATEDISPLAY-Xvfb".
13691
13692 Note: if a -display occurs later on the command line
13693 it will override the -create setting.
13694
13695 SSH NOTE: for both -find and -create you can (should!)
13696 add the "-localhost" option to force SSH tunnel access.
13697
13698 -xdummy As in -create, except Xdummy instead of Xvfb.
13699 -xvnc As in -create, except Xvnc instead of Xvfb.
13700 -xvnc_redirect As in -create, except Xvnc.redirect instead of Xvfb.
13701 -xdummy_xvfb Sets WAIT:cmd=FINDCREATEDISPLAY-Xdummy,Xvfb
13702
13703 -create_xsrv str Sets WAIT:cmd=FINDCREATEDISPLAY-<str> Can be on cmdline
13704 after anything that sets WAIT:.. and other things
13705 (e.g. -svc, -xdmsvc) to adjust the X server list.
13706 Example: -svc ... -create_xsrv Xdummy,X
13707
13708 -svc Terminal services mode based on SSL access. Alias for
13709 -display WAIT:cmd=FINDCREATEDISPLAY-Xvfb -unixpw -users
13710 unixpw= -ssl SAVE Also "-service".
13711
13712 Note: if a -display, -unixpw, -users, or -ssl occurs
13713 later on the command line it will override the -svc
13714 setting.
13715
13716 -svc_xdummy As -svc except Xdummy instead of Xvfb.
13717 -svc_xvnc As -svc except Xvnc instead of Xvfb.
13718 -svc_xdummy_xvfb As -svc with Xdummy,Xvfb.
13719
13720 -xdmsvc Display manager Terminal services mode based on SSL.
13721 Alias for -display WAIT:cmd=FINDCREATEDISPLAY-Xvfb.xdmcp
13722 -unixpw -users unixpw= -ssl SAVE Also "-xdm_service".
13723
13724 Note: if a -display, -unixpw, -users, or -ssl occurs
13725 later on the command line it will override the -xdmsvc
13726 setting.
13727
13728 To create a session a user will have to first log in
13729 to the -unixpw dialog and then log in again to the
13730 XDM/GDM/KDM prompt. Subsequent re-connections will
13731 only require the -unixpw password. See the discussion
13732 under -display WAIT:... for more details about XDM,
13733 etc configuration.
13734
13735 Remember to enable XDMCP in the xdm-config, gdm.conf,
13736 or kdmrc configuration file. See -display WAIT: for
13737 more info.
13738
13739 -sshxdmsvc Display manager Terminal services mode based on SSH.
13740 Alias for -display WAIT:cmd=FINDCREATEDISPLAY-Xvfb.xdmcp
13741 -localhost.
13742
13743 The -localhost option constrains connections to come
13744 in via a SSH tunnel (which will require a login).
13745 To create a session a user will also have to log into
13746 the XDM GDM KDM prompt. Subsequent re-connections will
13747 only only require the SSH login. See the discussion
13748 under -display WAIT:... for more details about XDM,
13749 etc configuration.
13750
13751 Remember to enable XDMCP in the xdm-config, gdm.conf,
13752 or kdmrc configuration file. See -display WAIT: for
13753 more info.
13754
13755 -unixpw_system_greeter Present a "Press 'Escape' for System Greeter" option
13756 to the connecting VNC client in combined -unixpw
13757 and xdmcp FINDCREATEDISPLAY modes (e.g. -xdmsvc).
13758
13759 Normally in a -unixpw mode the VNC client must
13760 supply a valid username and password to gain access.
13761 However, if -unixpw_system_greeter is supplied AND
13762 the FINDCREATEDISPLAY command matches 'xdmcp', then
13763 the user has the option to press Escape and then get a
13764 XDM/GDM/KDM login/greeter panel instead. They will then
13765 supply a username and password directly to the greeter.
13766
13767 Otherwise, in xdmcp FINDCREATEDISPLAY mode the user
13768 must supply his username and password TWICE. First to
13769 the initial unixpw login dialog, and second to the
13770 subsequent XDM/GDM/KDM greeter. Note that if the user
13771 re-connects and supplies his username and password in
13772 the unixpw dialog the xdmcp greeter is skipped and
13773 he is connected directly to his existing X session.
13774 So the -unixpw_system_greeter option avoids the extra
13775 password at X session creation time.
13776
13777 Example: x11vnc -xdmsvc -unixpw_system_greeter
13778 See -unixpw and -display WAIT:... for more info.
13779
13780 The special options after a colon at the end of the
13781 username (e.g. user:solid) described under -display
13782 WAIT: are also applied in this mode if they are typed
13783 in before the user hits Escape. The username is ignored
13784 but the colon options are not.
13785
13786 The default message is 2 lines in a small font, set
13787 the env. var. X11VNC_SYSTEM_GREETER1=true for a 1 line
13788 message in a larger font.
13789
13790 If the user pressed Escape the FINDCREATEDISPLAY command
13791 will be run with the env. var. X11VNC_XDM_ONLY=1.
13792
13793 Remember to enable XDMCP in the xdm-config, gdm.conf,
13794 or kdmrc configuration file. See -display WAIT: for
13795 more info.
13796
13797 -redirect port As in FINDCREATEDISPLAY-Xvnc.redirect mode except
13798 redirect immediately (i.e. without X session finding
13799 or creation) to a VNC server listening on port. You
13800 can also supply host:port to redirect to a different
13801 machine.
13802
13803 If 0 <= port < 200 it is taken as a VNC display (5900 is
13804 added to get the actual port), if port < 0 then -port
13805 is used.
13806
13807 Probably the only reason to use the -redirect option
13808 is in conjunction with SSL support, e.g. -ssl SAVE.
13809 This provides an easy way to add SSL encryption to a VNC
13810 server that does not support SSL (e.g. Xvnc or vnc.so)
13811 In fact, the protocol does not even need to be VNC,
13812 and so "-rfbport port1 -ssl SAVE -redirect host:port2"
13813 can act as a replacement for stunnel(1).
13814
13815 This mode only allows one redirected connection.
13816 The -forever option does not apply. Use -inetd or
13817 -loop for persistent service.
13818
13819 -display_WAIT :... A special usage mode for the normal -display option.
13820 Useful with -unixpw, but can be used independently
13821 of it. If the display string begins with WAIT: then
13822 x11vnc waits until a VNC client connects before opening
13823 the X display (or -rawfb device).
13824
13825 This could be useful for delaying opening the display
13826 for certain usage modes (say if x11vnc is started at
13827 boot time and no X server is running or users logged
13828 in yet).
13829
13830 If the string is, e.g. WAIT:0.0 or WAIT:1, i.e. "WAIT"
13831 in front of a normal X display, then that indicated
13832 display is used.
13833
13834 One can also insert a geometry between colons, e.g.
13835 WAIT:1280x1024:... to set the size of the display the
13836 VNC client first attaches to since some VNC viewers
13837 will not automatically adjust to a new framebuffer size.
13838
13839 A more interesting case is like this:
13840
13841 WAIT:cmd=/usr/local/bin/find_display
13842
13843 in which case the command after "cmd=" is run to
13844 dynamically work out the DISPLAY and optionally the
13845 XAUTHORITY data. The first line of the command output
13846 must be of the form DISPLAY=<xdisplay>. On Linux
13847 if the virtual terminal is known append ",VT=n" to
13848 this string and the chvt(1) program will also be run.
13849 Any remaining output is taken as XAUTHORITY data.
13850 It can be either of the form XAUTHORITY=<file> or raw
13851 xauthority data for the display. For example;
13852
13853 xauth extract - $DISPLAY"
13854
13855 NOTE: As specified in the previous paragraph, you can
13856 supply your own WAIT:cmd=... program or script, BUT
13857 there are two very useful *BUILT-IN* ones: FINDDISPLAY
13858 (alias -find above) and FINDCREATEDISPLAY (alias -create
13859 above.) Most people use these instead of creating
13860 their own script. Read the following (especially the
13861 BUILT-IN modes sections) to see how to configure these
13862 two useful builtin -display WAIT: modes.
13863
13864 In the case of -unixpw (and -unixpw_nis only if x11vnc
13865 is running as root), then the cmd= command is run
13866 as the user who just authenticated via the login and
13867 password prompt.
13868
13869 In the case of -unixpw_cmd, the commands will also be
13870 run as the logged-in user, as long as the user-supplied
13871 helper program supports RFB_UNIXPW_CMD_RUN (see the
13872 -unixpw_cmd option.)
13873
13874 Also in the case of -unixpw, the user logging in can
13875 place a colon at the end of her username and supply
13876 a few options: scale=, scale_cursor= (or sc=), solid
13877 (or so), id=, clear_mods (or cm), clear_keys (or
13878 ck), clear_all (or ca), repeat, speeds= (or sp=),
13879 readtimeout= (or rd=), viewonly (or vo), nodisplay=
13880 (or nd=), rotate= (or ro=), or noncache (or nc),
13881 all separated by commas if there is more than one.
13882 After the user logs in successfully, these options will
13883 be applied to the VNC screen. For example,
13884
13885 login: fred:scale=3/4,sc=1,repeat
13886 Password: ...
13887
13888 login: runge:sp=modem,rd=120,solid
13889
13890 for convenience m/n implies scale= e.g. fred:3/4 If you
13891 type and enter your password incorrectly, to retrieve
13892 your long "login:" line press the Up arrow once
13893 (before typing anything else).
13894
13895 Most of these colon options only apply to the builtin
13896 FINDDISPLAY and FINDCREATEDISPLAY modes, but note
13897 that they are passed to the extrenal command in the
13898 environment as well and so could be used.
13899
13900 In the login panel, press F1 to get a list of the
13901 available options that you can add after the username.
13902
13903 Another option is "geom=WxH" or "geom=WxHxD" (or
13904 ge=). This only has an effect in FINDCREATEDISPLAY
13905 mode when a virtual X server such as Xvfb is going
13906 to be created. It sets the width and height of
13907 the new display, and optionally the color depth as
13908 well.
13909
13910 You can also supply "gnome", "kde", "twm",
13911 "fvwm", "mwm", "dtwm", "wmaker", "xfce",
13912 "lxde", "enlightenment", "Xsession", or
13913 "failsafe" (same as "xterm") to have the created
13914 display use that mode for the user session.
13915
13916 Specify "tag=..." to set the unique FD_TAG desktop
13917 session tag described below. Note: this option will
13918 be ignored if the FD_TAG env. var. is already set or
13919 if the viewer-side supplied value is not completely
13920 composed of alphanumeric or '_' or '-' characters.
13921
13922 User preferences file: Instead of having the user type
13923 in geom=WxH,... etc. every time he logs in to find
13924 or create his X session, if you set FD_USERPREFS to
13925 a string that does not contain the "/" character,
13926 then the user's home directory is prepended to that
13927 string and if the file exists its first line is read
13928 and appended to any options he supplied at the login:
13929 prompt. For example -env FD_USERPREFS=.x11vnc_create
13930 and the user put "geom=1600x1200" in his
13931 ~/.x11vnc_create file.
13932
13933 To disable the option setting set the environment
13934 variable X11VNC_NO_UNIXPW_OPTS=1 before starting x11vnc.
13935 To set any other options, the user can use the gui
13936 (x11vnc -gui connect) or the remote control method
13937 (x11vnc -R opt:val) during his VNC session.
13938
13939 So we see the combination of -display WAIT:cmd=... and
13940 -unixpw allows automatic pairing of an unix
13941 authenticated VNC user with his desktop. This could
13942 be very useful on SunRays and also any system where
13943 multiple users share a given machine. The user does
13944 not need to remember special ports or passwords set up
13945 for his desktop and VNC.
13946
13947 A nice way to use WAIT:cmd=... is out of inetd(8)
13948 (it automatically forks a new x11vnc for each user).
13949 You can have the x11vnc inetd spawned process run as,
13950 say, root or nobody. When run as root (for either inetd
13951 or display manager), you can also supply the option
13952 "-users unixpw=" to have the x11vnc process switch to
13953 the user as well. Note: there will be a 2nd SSL helper
13954 process that will not switch, but it is only encoding
13955 and decoding the encrypted stream at that point.
13956
13957 BUILT-IN modes:
13958
13959 -- Automatic Finding of User X Sessions --
13960
13961 As a special case, WAIT:cmd=FINDDISPLAY will run a
13962 script that works on most Unixes to determine a user's
13963 DISPLAY variable and xauthority data (see who(1)).
13964
13965 NOTE: The option "-find" is an alias for this mode.
13966
13967 To have this default script printed to stdout (e.g. for
13968 customization) run with WAIT:cmd=FINDDISPLAY-print To
13969 have the script run to print what display it would find
13970 use "-finddpy" or WAIT:cmd=FINDDISPLAY-run
13971
13972 The standard script runs xdpyinfo(1) run on potential
13973 displays. If your X server(s) have a login greeter
13974 that exclusively grabs the Xserver, then xdpyinfo
13975 blocks forever and this mode will not work. See
13976 www.karlrunge.com/x11vnc/faq.html#faq-display-manager
13977 for how to disable this for dtgreet on Solaris and
13978 possibly for other greeters.
13979
13980 In -find/cmd=FINDDISPLAY mode, if you set FD_XDM=1,
13981 e.g. 'x11vnc -env FD_XDM=1 -find ...' and x11vnc is
13982 running as root (e.g. inetd) then it will try to find
13983 the XAUTHORITY file of a running XDM/GDM/KDM login
13984 greeter (i.e. no user has logged into an X session yet.)
13985
13986 As another special case, WAIT:cmd=HTTPONCE will allow
13987 x11vnc to service one http request and then exit.
13988 This is usually done in -inetd mode to run on, say,
13989 port 5800 and allow the Java vncviewer to be downloaded
13990 by client web browsers. For example:
13991
13992 5815 stream tcp nowait root /usr/sbin/tcpd /.../x11vnc
13993 \
13994 -inetd -q -http_ssl -prog /.../x11vnc \
13995 -display WAIT:cmd=HTTPONCE
13996
13997 Where /.../x11vnc is the full path to x11vnc.
13998 It is used in the Apache SSL-portal example (see FAQ).
13999
14000 In this mode you can set X11VNC_SKIP_DISPLAY to a
14001 comma separated list of displays (e.g. ":0,:1") to
14002 ignore in the finding process. The ":" is optional.
14003 Ranges n-m e.g. 0-20 can also be supplied. This string
14004 can also be set by the connecting user via "nd="
14005 using "+" instead of "," If "nd=all" or you set
14006 X11VNC_SKIP_DISPLAY=all then all display finding fails
14007 as if you set X11VNC_FINDDISPLAY_ALWAYS_FAILS=1 (below.)
14008
14009 On some systems lsof(1) can be very slow. Set the
14010 env. var. FIND_DISPLAY_NO_LSOF=1 to skip using lsof to
14011 try to find the Linux VT the X server is running on.
14012 set FIND_DISPLAY_NO_VT_FIND=1 to avoid looking at all.
14013
14014 -- Automatic Creation of User X Sessions --
14015
14016 An interesting option is WAIT:cmd=FINDCREATEDISPLAY
14017 that is like FINDDISPLAY in that is uses the same method
14018 to find an existing display. However, if it does not
14019 find one it will try to *start* up an X server session
14020 for the user. This is the only time x11vnc tries to
14021 actually start up an X server.
14022
14023 NOTE: The option "-create" is an alias for this mode.
14024
14025 It will start looking for an open display number at :20
14026 Override via X11VNC_CREATE_STARTING_DISPLAY_NUMBER=n
14027 By default 80 X displays are allowed (i.e. going to :99)
14028 Override via X11VNC_CREATE_MAX_DISPLAYS=n
14029
14030 For its heuristics, the create display script sets
14031 LC_ALL=C so that command output is uniform. By default
14032 it will try to restore LC_ALL right before starting the
14033 user session. However, if you don't mind it keeping
14034 LC_ALL=C set the env. var.: X11VNC_CREATE_LC_ALL_C_OK=1
14035
14036 By default FINDCREATEDISPLAY will try Xvfb and then
14037 Xdummy:
14038
14039 The Xdummy wrapper is part of the x11vnc source code
14040 (x11vnc/misc/Xdummy) It should be available in PATH
14041 and have run "Xdummy -install" once to create the
14042 shared library. Xdummy only works on Linux. As of
14043 12/2009 it no longer needs to be run as root, and the
14044 default is to not run as root. In some circumstances
14045 permissions may require running it as root, in these
14046 cases specify FD_XDUMMY_RUN_AS_ROOT=1, this is the same
14047 as supplying -root to the Xdummy cmdline.
14048
14049 Xvfb is available on most platforms and does not
14050 require root.
14051
14052 An advantage of Xdummy over Xvfb is that Xdummy supports
14053 RANDR dynamic screen resizing.
14054
14055 When x11vnc exits (i.e. user disconnects) the X
14056 server session stays running in the background.
14057 The FINDDISPLAY will find it directly next time.
14058 The user must exit the X session in the usual way for
14059 it to terminate (or kill the X server process if all
14060 else fails).
14061
14062 To troubleshoot the FINDCREATEDISPLAY mechanism,
14063 set the following env. var. to an output log file,
14064 e.g -env CREATE_DISPLAY_OUTPUT=/tmp/mydebug.txt
14065
14066 So this is a somewhat odd mode for x11vnc in that it
14067 will start up and poll virtual X servers! This can
14068 be used from, say, inetd(8) to provide a means of
14069 definitely getting a desktop (either real or virtual)
14070 on the machine. E.g. a desktop service:
14071
14072 5900 stream tcp nowait root /usr/sbin/tcpd /.../x11vnc
14073 -inetd -q -http -ssl SAVE -unixpw -users unixpw=\
14074 -passwd secret -prog /.../x11vnc \
14075 -display WAIT:cmd=FINDCREATEDISPLAY
14076
14077 Where /.../x11vnc is the full path to x11vnc.
14078
14079 See the -svc/-service option alias above.
14080
14081 If for some reason you do not want x11vnc to ever
14082 try to find an existing display set the env. var
14083 X11VNC_FINDDISPLAY_ALWAYS_FAILS=1 (also -env ...)
14084 This is the same as setting X11VNC_SKIP_DISPLAY=all or
14085 supplying "nd=all" after "username:"
14086
14087 Use WAIT:cmd=FINDCREATEDISPLAY-print to print out the
14088 script that is used for this.
14089
14090 You can specify the preferred X server order via e.g.,
14091 WAIT:cmd=FINDCREATEDISPLAY-Xdummy,Xvfb,X and/or leave
14092 out ones you do not want. The the case "X" means try
14093 to start up a real, hardware X server using xinit(1)
14094 or startx(1). If there is already an X server running
14095 the X case may only work on Linux (see startx(1)).
14096
14097 "Xvnc" will start up a VNC X server (real-
14098 or tight-vnc, e.g. use if Xvfb is not available).
14099 "Xsrv" will start up the server program in the
14100 variable "FD_XSRV" if it is non-empty. You can make
14101 this be a wrapper script if you like (it must handle :N,
14102 -geometry, and -depth and other X server options).
14103
14104 You can set the environment variable FD_GEOM (or
14105 X11VNC_CREATE_GEOM) to WxH or WxHxD to set the width
14106 and height and optionally the color depth of the
14107 created display. You can also set FD_SESS to be the
14108 session (short name of the windowmanager: kde, gnome,
14109 twm, failsafe, etc.). FD_OPTS contains extra options
14110 to pass to the X server. You can also set FD_PROG to
14111 be the full path to the session/windowmanager program.
14112
14113 More FD tricks: FD_CUPS=port or FD_CUPS=host:port
14114 will set the cups printing environment. Similarly for
14115 FD_ESD=port or FD_ESD=host:port for esddsp sound
14116 redirection. Set FD_EXTRA to a command to be run a
14117 few seconds after the X server starts up. Set FD_TAG
14118 to be a unique name for the session, it is set as an
14119 X property, that makes FINDDISPLAY only find sessions
14120 with that tag value.
14121
14122 Set FD_XDMCP_IF to the network interface that the
14123 display manager is running on; default is 'localhost'
14124 but you may need to set it to '::1' on some IPv6 only
14125 systems or misconfigured display managers.
14126
14127 If you want the FINDCREATEDISPLAY session to contact an
14128 XDMCP login manager (xdm/gdm/kdm) on the same machine,
14129 then use "Xvfb.xdmcp" instead of "Xvfb", etc.
14130 The user will have to supply his username and password
14131 one more time (but he gets to select his desktop type
14132 so that can be useful). For this to work, you will
14133 need to enable localhost XDMCP (udp port 177) for the
14134 display manager. This seems to be:
14135
14136 for gdm in gdm.conf: Enable=true in section [xdmcp]
14137 for kdm in kdmrc: Enable=true in section [Xdmcp]
14138 for xdm in xdm-config: DisplayManager.requestPort: 177
14139
14140 See the shorthand options above "-svc", "-xdmsvc"
14141 and "-sshxdmsvc" that specify the above options for
14142 some useful cases.
14143
14144 If you set the env. var WAITBG=1 x11vnc will go into
14145 the background once listening in wait mode.
14146
14147 Another special mode is FINDCREATEDISPLAY-Xvnc.redirect,
14148 (or FINDDISPLAY-Xvnc.redirect). In this case it will
14149 start up Xvnc as above if needed, but instead of
14150 polling it in its normal way, it simply does a socket
14151 redirection of the connected VNC viewer to the Xvnc.
14152
14153 So in Xvnc.redirect x11vnc does no VNC but merely
14154 transfers the data back and forth. This should be
14155 faster then x11vnc's polling method, but not as fast
14156 as connecting directly to the Xvnc with the VNC Viewer.
14157 The idea here is to take advantage of x11vnc's display
14158 finding/creating scheme, SSL, and perhaps a few others.
14159 Most of x11vnc's options do not apply in this mode.
14160
14161 Xvnc.redirect should also work for the vnc.so X server
14162 module for the h/w display however it will work only
14163 for finding the display and the user must already be
14164 logged into the X console.
14165
14166 -vencrypt mode The VeNCrypt extension to the VNC protocol allows
14167 encrypted SSL/TLS connections. If the -ssl mode is
14168 enabled, then VeNCrypt is enabled as well BY DEFAULT
14169 (they both use a SSL/TLS tunnel, only the protocol
14170 handshake is a little different.)
14171
14172 To control when and how VeNCrypt is used, specify the
14173 mode string. If mode is "never", then VeNCrypt is
14174 not used. If mode is "support" (the default) then
14175 VeNCrypt is supported. If mode is "only", then the
14176 similar and older ANONTLS protocol is not simultaneously
14177 supported. x11vnc's normal SSL mode (vncs://) will be
14178 supported under -ssl unless you set mode to "force".
14179
14180 If mode is prefixed with "nodh:", then Diffie Hellman
14181 anonymous key exchange is disabled. If mode is prefixed
14182 with "nox509:", then X509 key exchange is disabled.
14183
14184 To disable all Anonymous Diffie-Hellman access
14185 (susceptible to Man-In-The-Middle attack) you will need
14186 to supply "-vencrypt nodh:support -anontls never"
14187 or "-vencrypt nodh:only"
14188
14189 If mode is prefixed with "newdh:", then new Diffie
14190 Hellman parameters are generated for each connection
14191 (this can be time consuming: 1-60 secs; see -dhparams
14192 below for a faster way) rather than using the
14193 fixed values in the program. Using fixed, publicly
14194 known values is not known to be a security problem.
14195 This setting applies to ANONTLS as well.
14196
14197 Long example: -vencrypt newdh:nox509:support
14198
14199 Also, if mode is prefixed with "plain:", then
14200 if -unixpw mode is active the VeNCrypt "*Plain"
14201 username+passwd method is enabled for Unix logins.
14202 Otherwise in -unixpw mode the normal login panel is
14203 provided.
14204
14205 You *MUST* supply the -ssl option for VeNCrypt to
14206 be active. The -vencrypt option only fine-tunes its
14207 operation.
14208
14209 -anontls mode The ANONTLS extension to the VNC protocol allows
14210 encrypted SSL/TLS connections. If the -ssl mode is
14211 enabled, then ANONTLS is enabled as well BY DEFAULT
14212 (they both use a SSL/TLS tunnel, only the protocol
14213 handshake is a little different.)
14214
14215 ANONTLS is an older SSL/TLS mode introduced by vino.
14216
14217 It is referred to as 'TLS' for its registered VNC
14218 security-type name, but we use the more descriptive
14219 'ANONTLS' here because it provides only Anonymous
14220 Diffie-Hellman encrypted connections, and hence no
14221 possibility for certificate authentication.
14222
14223 To control when and how ANONTLS is used, specify the
14224 mode string. If mode is "never", then ANONTLS is not
14225 used. If mode is "support" (the default) then ANONTLS
14226 is supported. If mode is "only", then the similar
14227 VeNCrypt protocol is not simultaneously supported.
14228 x11vnc's normal SSL mode (vncs://) will be supported
14229 under -ssl unless you set mode to "force".
14230
14231 If mode is prefixed with "newdh:", then new Diffie
14232 Hellman parameters are generated for each connection
14233 (this can be time consuming: 1-60 secs; see -dhparams
14234 below for a faster way) rather than using the
14235 fixed values in the program. Using fixed, publicly
14236 known values is not known to be a security problem.
14237 This setting applies to VeNCrypt as well. See the
14238 description of "plain:" under -vencrypt.
14239
14240 Long example: -anontls newdh:plain:support
14241
14242 You *MUST* supply the -ssl option for ANONTLS to
14243 be active. The -anontls option only fine-tunes its
14244 operation.
14245
14246 -sslonly Same as: "-vencrypt never -anontls never" i.e. it
14247 disables the VeNCrypt and ANONTLS encryption methods
14248 and only allows standard SSL tunneling. You must also
14249 supply the -ssl ... option (see below.)
14250
14251
14252 -dhparams file For some operations a set of Diffie Hellman parameters
14253 (prime and generator) is needed. If so, use the
14254 parameters in "file". In particular, the VeNCrypt and
14255 ANONTLS anonymous DH mode need them. By default a
14256 fixed set is used. If you do not want to do that you
14257 can specify "newdh:" to the -vencrypt and -anontls
14258 options to generate a new set each session. If that
14259 is too slow for you, use -dhparams file to a set you
14260 created manually via "openssl dhparam -out file 1024"
14261
14262 -nossl Disable the -ssl option (see below). Since -ssl is off
14263 by default -nossl would only be used on the commandline
14264 to unset any *earlier* -ssl option (or -svc...)
14265
14266 -ssl [pem] Use the openssl library (www.openssl.org) to provide a
14267 built-in encrypted SSL/TLS tunnel between VNC viewers
14268 and x11vnc. This requires libssl support to be
14269 compiled into x11vnc at build time. If x11vnc is not
14270 built with libssl support it will exit immediately when
14271 -ssl is prescribed. See the -stunnel option below for
14272 an alternative.
14273
14274 The VNC Viewer-side needs to support SSL/TLS as well.
14275 See this URL and also the discussion below for
14276 ideas on how to enable SSL support for the viewer:
14277 http://www.karlrunge.com/x11vnc/faq.html#faq-ssl-tun
14278 nel-viewers . x11vnc provides an SSL enabled Java
14279 viewer applet in the classes/ssl directory (-http or
14280 -httpdir options.) The SSVNC viewer package supports
14281 SSL tunnels too.
14282
14283 If the VNC Viewer supports VeNCrypt or ANONTLS (vino's
14284 encryption mode) they are also supported by the -ssl
14285 mode (see the -vencrypt and -anontls options for more
14286 info; use -sslonly to disable both of them.)
14287
14288 Use "-ssl /path/to/mycert.pem" to specify an SSL
14289 certificate file in PEM format to use to identify and
14290 provide a key for this server. See openssl(1) for more
14291 info about PEMs and the -sslGenCert and "-ssl SAVE"
14292 options below for how to create them.
14293
14294 The connecting VNC viewer SSL tunnel can (at its option)
14295 authenticate this server if it has the public key part
14296 of the certificate (or a common certificate authority,
14297 CA, is a more sophisticated way to verify this server's
14298 cert, see -sslGenCA below). This authentication is
14299 done to prevent Man-In-The-Middle attacks. Otherwise,
14300 if the VNC viewer simply accepts this server's key
14301 WITHOUT verification, the traffic is protected from
14302 passive sniffing on the network, but *NOT* from
14303 Man-In-The-Middle attacks. There are hacker tools
14304 like dsniff/webmitm and cain that implement SSL
14305 Man-In-The-Middle attacks.
14306
14307 If [pem] is empty or the string "SAVE" then the
14308 openssl(1) command must be available to generate the
14309 certificate the first time. A self-signed certificate
14310 is generated (see -sslGenCA and -sslGenCert for use
14311 of a Certificate Authority.) It will be saved to the
14312 file ~/.vnc/certs/server.pem. On subsequent calls if
14313 that file already exists it will be used directly.
14314
14315 Use "SAVE_NOPROMPT" to avoid being prompted to
14316 protect the generated key with a passphrase. However in
14317 -inetd and -bg modes there will be no prompting for a
14318 passphrase in either case.
14319
14320 If [pem] is "SAVE_PROMPT" the server.pem certificate
14321 will be created based on your answers to its prompts for
14322 all info such as OrganizationalName, CommonName, etc.
14323
14324 Use "SAVE-<string>" and "SAVE_PROMPT-<string>"
14325 to refer to the file ~/.vnc/certs/server-<string>.pem
14326 instead (it will be generated if it does not already
14327 exist). E.g. "SAVE-charlie" will store to the file
14328 ~/.vnc/certs/server-charlie.pem
14329
14330 Examples: x11vnc -ssl SAVE -display :0 ...
14331 x11vnc -ssl SAVE-someother -display :0 ...
14332
14333 If [pem] is "TMP" and the openssl(1) utility
14334 command exists in PATH, then a temporary, self-signed
14335 certificate will be generated for this session. If
14336 openssl(1) cannot be used to generate a temporary
14337 certificate x11vnc exits immediately. The temporary
14338 cert will be discarded when x11vnc exits.
14339
14340 If successful in using openssl(1) to generate a
14341 temporary certificate in "SAVE" or "TMP" creation
14342 modes, the public part of it will be displayed to stderr
14343 (e.g. one could copy it to the client-side to provide
14344 authentication of the server to VNC viewers.)
14345
14346 NOTE: In "TMP" mode, unless you safely copy the
14347 public part of the temporary Cert to the viewer for
14348 authenticate *every time* (unlikely...), then only
14349 passive sniffing attacks are prevented and you are
14350 still open to Man-In-The-Middle attacks. This is
14351 why the default "SAVE" mode is preferred (and more
14352 sophisticated CA mode too). Only with saved keys AND
14353 the VNC viewer authenticating them (via the public
14354 certificate), are Man-In-The-Middle attacks prevented.
14355
14356 If [pem] is "ANON" then the Diffie-Hellman anonymous
14357 key exchange method is used. In this mode there
14358 are *no* SSL certificates and so it is not possible
14359 to authenticate either the VNC server or VNC client.
14360 Thus only passive network sniffing attacks are avoided:
14361 the "ANON" method is susceptible to Man-In-The-Middle
14362 attacks. "ANON" is not recommended; instead use
14363 a SSL PEM you created or the default "SAVE" method.
14364
14365 See -ssldir below to use a directory besides the
14366 default ~/.vnc/certs
14367
14368 If your x11vnc binary was not compiled with OpenSSL
14369 library support, use of the -ssl option will induce an
14370 immediate failure and exit. For such binaries, consider
14371 using the -stunnel option for SSL encrypted connections.
14372
14373 Misc Info: In temporary cert creation mode "TMP", set
14374 the env. var. X11VNC_SHOW_TMP_PEM=1 to have x11vnc print
14375 out the entire certificate, including the PRIVATE KEY
14376 part, to stderr. There are better ways to get/save this
14377 info. See "SAVE" above and "-sslGenCert" below.
14378
14379 -ssltimeout n Set SSL read timeout to n seconds. In some situations
14380 (i.e. an iconified viewer in Windows) the viewer stops
14381 talking and the connection is dropped after the default
14382 timeout (25s for about the first minute, 43200s later).
14383 Set to zero to poll forever. Set to a negative value
14384 to use the builtin setting.
14385
14386 Note that this value does NOT apply to the *initial* ssl
14387 init connection. The default timeout for that is 20sec.
14388 Use -env SSL_INIT_TIMEOUT=n to modify it.
14389
14390 -sslnofail Exit at the first SSL connection failure. Useful when
14391 scripting SSL connections (e.g. x11vnc is started via
14392 ssh) and you do not want x11vnc waiting around for more
14393 connections, tying up ports, etc.
14394
14395 -ssldir dir Use "dir" as an alternate ssl certificate and key
14396 management toplevel directory. The default is
14397 ~/.vnc/certs
14398
14399 This directory is used to store server and other
14400 certificates and keys and also other materials. E.g. in
14401 the simplest case, "-ssl SAVE" will store the x11vnc
14402 server cert in dir/server.pem
14403
14404 Use of alternate directories via -ssldir allows you to
14405 manage multiple VNC Certificate Authority (CA) keys.
14406 Another use is if ~/.vnc/cert is on an NFS share you
14407 might want your certificates and keys to be on a local
14408 filesystem to prevent network snooping (for example
14409 -ssldir /var/lib/x11vnc-certs).
14410
14411 -ssldir affects nearly all of the other -ssl* options,
14412 e.g. -ssl SAVE, -sslGenCert, etc..
14413
14414 -sslverify path For either of the -ssl or -stunnel modes, use "path"
14415 to provide certificates to authenticate incoming VNC
14416 *Client* connections (normally only the server is
14417 authenticated in SSL.) This can be used as a method
14418 to replace standard password authentication of clients.
14419
14420 If "path" is a directory it contains the client (or CA)
14421 certificates in separate files. If path is a file,
14422 it contains one or more certificates. See special tokens
14423 below. These correspond to the "CApath = dir" and
14424 "CAfile = file" stunnel options. See the stunnel(8)
14425 manpage for details.
14426
14427 Examples:
14428 x11vnc -ssl -sslverify ~/my.crt
14429 x11vnc -ssl -sslverify ~/my_pem_dir/
14430
14431 Note that if path is a directory, it must contain
14432 the certs in separate files named like <HASH>.0, where
14433 the value of <HASH> is found by running the command
14434 "openssl x509 -hash -noout -in file.crt". Evidently
14435 one uses <HASH>.1 if there is a collision...
14436
14437 The the key-management utility "-sslCertInfo HASHON"
14438 and "-sslCertInfo HASHOFF" will create/delete these
14439 hashes for you automatically (via symlink) in the HASH
14440 subdirs it manages. Then you can point -sslverify to
14441 the HASH subdir.
14442
14443 Special tokens: in -ssl mode, if "path" is not a file or
14444 a directory, it is taken as a comma separated list of
14445 tokens that are interpreted as follows:
14446
14447 If a token is "CA" that means load the CA/cacert.pem
14448 file from the ssl directory. If a token is "clients"
14449 then all the files clients/*.crt in the ssl directory
14450 are loaded. Otherwise the file clients/token.crt
14451 is attempted to be loaded. As a kludge, use a token
14452 like ../server-foo to load a server cert if you find
14453 that necessary.
14454
14455 Use -ssldir to use a directory different from the
14456 ~/.vnc/certs default.
14457
14458 Note that if the "CA" cert is loaded you do not need
14459 to load any of the certs that have been signed by it.
14460 You will need to load any additional self-signed certs
14461 however.
14462
14463 Examples:
14464 x11vnc -ssl -sslverify CA
14465 x11vnc -ssl -sslverify self:fred,self:jim
14466 x11vnc -ssl -sslverify CA,clients
14467
14468 Usually "-sslverify CA" is the most effective.
14469 See the -sslGenCA and -sslGenCert options below for
14470 how to set up and manage the CA framework.
14471
14472
14473
14474 NOTE: the following utilities, -sslGenCA, -sslGenCert,
14475 -sslEncKey, -sslCertInfo, and -sslCRL are provided for
14476 completeness, but for casual usage they are overkill.
14477
14478 They provide VNC Certificate Authority (CA) key creation
14479 and server / client key generation and signing. So they
14480 provide a basic Public Key management framework for
14481 VNC-ing with x11vnc. (note that they require openssl(1)
14482 be installed on the system)
14483
14484 However, the simplest usage mode, "-ssl TMP" (where
14485 x11vnc automatically generates its own, self-signed,
14486 temporary key and the VNC viewers always accept it,
14487 e.g. accepting via a dialog box) is probably safe enough
14488 for most scenarios. CA management is not needed.
14489
14490 To protect against Man-In-The-Middle attacks the "TMP"
14491 mode can be improved by using "-ssl SAVE" (same as
14492 "-ssl", i.e. the default) to have x11vnc create a
14493 longer term self-signed certificate, and then (safely)
14494 copy the corresponding public key cert to the desired
14495 client machines (care must be taken the private key part
14496 is not stolen; you will be prompted for a passphrase).
14497
14498 So keep in mind no CA key creation or management
14499 (-sslGenCA and -sslGenCert) is needed for either of
14500 the above two common usage modes.
14501
14502 One might want to use -sslGenCA and -sslGenCert
14503 if you had a large number of VNC client and server
14504 workstations. That way the administrator could generate
14505 a single CA key with -sslGenCA and distribute its
14506 certificate part to all of the workstations.
14507
14508 Next, he could create signed VNC server keys
14509 (-sslGenCert server ...) for each workstation or user
14510 that then x11vnc would use to authenticate itself to
14511 any VNC client that has the CA cert.
14512
14513 Optionally, the admin could also make it so the
14514 VNC clients themselves are authenticated to x11vnc
14515 (-sslGenCert client ...) For this -sslverify would be
14516 pointed to the CA cert (and/or self-signed certs).
14517
14518 x11vnc will be able to use all of these cert and
14519 key files. On the VNC client side, they will need to
14520 be "imported" somehow. Web browsers have "Manage
14521 Certificates" actions as does the Java applet plugin
14522 Control Panel. stunnel can also use these files (see
14523 the ss_vncviewer example script in the FAQ and SSVNC.)
14524
14525 -sslCRL path Set the Certificate Revocation Lists (CRL) to "path".
14526 This setting applies for both -ssl and -stunnel modes.
14527
14528 If path is a file, the file contains one or more CRLs
14529 in PEM format. If path is a directory, it contains
14530 hash named files of CRLs in the usual OpenSSL manner.
14531 See the OpenSSL and stunnel(8) documentation for
14532 more info.
14533
14534 This option only applies if -sslverify has been
14535 supplied: it checks for revocation along the
14536 certificate chain used to verify the VNC client.
14537 The -sslCRL setting will be ignored when -sslverify is
14538 not specified.
14539
14540 Note that if a CRL's expiration date has passed, all
14541 SSL connections will fail regardless of if they are
14542 related to the subject of the CRL or not.
14543
14544 Only rarely will one's x11vnc -ssl infrastructure be so
14545 large that this option would be useful (since normally
14546 maintaining the contents of the -sslverify file or
14547 directory should be enough.) However, when using
14548 x11vnc with a Certificate Authority (see -sslGenCA)
14549 to authenticate Clients via SSL/TLS, the -sslCRL option
14550 can be useful to revoke users' certs whose private SSL
14551 keys were lost or stolen (e.g. laptop.) This way a new
14552 CA cert+key does not need to be created and new signed
14553 client keys generated and distributed to all users.
14554
14555 To create a CRL file with revoked certificates the
14556 commands 'openssl ca -revoke ...' and 'openssl ca
14557 -gencrl ...' are useful. (Run them in ~/.vnc/certs)
14558
14559 -sslGenCA [dir] Generate your own Certificate Authority private key,
14560 certificate, and other files in directory [dir].
14561 x11vnc then exits.
14562
14563 If [dir] is not supplied, a -ssldir setting is used,
14564 or otherwise ~/.vnc/certs is used.
14565
14566 This command also creates directories where server and
14567 client certs and keys will be stored. The openssl(1)
14568 program must be installed on the system and available
14569 in PATH.
14570
14571 After the CA files and directories are created the
14572 x11vnc command exits; the VNC server is not run.
14573
14574 You will be prompted for information to put into the CA
14575 certificate. The info does not have to be accurate just
14576 as long as clients accept the cert for VNC connections.
14577 You will also need to supply a passphrase of at least
14578 4 characters for the CA private key.
14579
14580 Once you have generated the CA you can distribute
14581 its certificate part, [dir]/CA/cacert.pem, to other
14582 workstations where VNC viewers will be run. One will
14583 need to "import" this certificate in the applications,
14584 e.g. Web browser, Java applet plugin, stunnel, etc.
14585 Next, you can create and sign keys using the CA with
14586 the -sslGenCert option below.
14587
14588 Examples:
14589 x11vnc -sslGenCA
14590 x11vnc -sslGenCA ~/myCAdir
14591 x11vnc -ssldir ~/myCAdir -sslGenCA
14592
14593 (the last two lines are equivalent)
14594
14595 -sslGenCert type name Generate a VNC server or client certificate and private
14596 key pair signed by the CA created previously with
14597 -sslGenCA. The openssl(1) program must be installed
14598 on the system and available in PATH.
14599
14600 After the Certificate is generated x11vnc exits; the
14601 VNC server is not run.
14602
14603 The type of key to be generated is the string "type".
14604 It is either "server" (i.e. for use by x11vnc) or
14605 "client" (for a VNC viewer). Note that typically
14606 only "server" is used: the VNC clients authenticate
14607 themselves by a non-public-key method (e.g. VNC or
14608 unix password). "type" is required.
14609
14610 An arbitrary default name you want to associate with
14611 the key is supplied by the "name" string. You can
14612 change it at the various prompts when creating the key.
14613 "name" is optional.
14614
14615 If name is left blank for clients keys then "nobody"
14616 is used. If left blank for server keys, then the
14617 primary server key: "server.pem" is created (this
14618 is the saved one referenced by "-ssl SAVE" when the
14619 server is started)
14620
14621 If "name" begins with the string "self:" then
14622 a self-signed certificate is created instead of one
14623 signed by your CA key.
14624
14625 If "name" begins with the string "req:" then only a
14626 key (.key) and a certificate signing *request* (.req)
14627 are generated. You can then send the .req file to
14628 an external CA (even a professional one, e.g. Thawte)
14629 and then combine the .key and the received cert into
14630 the .pem file with the same basename.
14631
14632 The distinction between "server" and "client" is
14633 simply the choice of output filenames and sub-directory.
14634 This makes it so the -ssl SAVE-name option can easily
14635 pick up the x11vnc PEM file this option generates.
14636 And similarly makes it easy for the -sslverify option
14637 to pick up your client certs.
14638
14639 There is nothing special about the filename or directory
14640 location of either the "server" and "client" certs.
14641 You can rename the files or move them to wherever
14642 you like.
14643
14644 Precede this option with -ssldir [dir] to use a
14645 directory other than the default ~/.vnc/certs You will
14646 need to run -sslGenCA on that directory first before
14647 doing any -sslGenCert key creation.
14648
14649 Note you cannot recreate a cert with exactly the same
14650 distiguished name (DN) as an existing one. To do so,
14651 you will need to edit the [dir]/CA/index.txt file to
14652 delete the line.
14653
14654 Similar to -sslGenCA, you will be prompted to fill
14655 in some information that will be recorded in the
14656 certificate when it is created.
14657
14658 Tip: if you know the fully-qualified hostname other
14659 people will be connecting to, you can use that as the
14660 CommonName "CN" to avoid some applications (e.g. web
14661 browsers and java plugin) complaining that it does not
14662 match the hostname.
14663
14664 You will also need to supply the CA private key
14665 passphrase to unlock the private key created from
14666 -sslGenCA. This private key is used to sign the server
14667 or client certificate.
14668
14669 The "server" certs can be used by x11vnc directly by
14670 pointing to them via the -ssl [pem] option. The default
14671 file will be ~/.vnc/certs/server.pem. This one would
14672 be used by simply typing -ssl SAVE. The pem file
14673 contains both the certificate and the private key.
14674 server.crt file contains the cert only.
14675
14676 The "client" cert + private key file will need
14677 to be copied and imported into the VNC viewer
14678 side applications (Web browser, Java plugin,
14679 stunnel, etc.) Once that is done you can delete the
14680 "client" private key file on this machine since
14681 it is only needed on the VNC viewer side. The,
14682 e.g. ~/.vnc/certs/clients/<name>.pem contains both
14683 the cert and private key. The <name>.crt contains the
14684 certificate only.
14685
14686 NOTE: It is very important to know one should
14687 generate new keys with a passphrase. Otherwise if an
14688 untrusted user steals the key file he could use it to
14689 masquerade as the x11vnc server (or VNC viewer client).
14690 You will be prompted whether to encrypt the key with
14691 a passphrase or not. It is recommended that you do.
14692 One inconvenience to a passphrase is that it must
14693 be typed in EVERY time x11vnc or the client app is
14694 started up.
14695
14696 Examples:
14697
14698 x11vnc -sslGenCert server
14699 x11vnc -ssl SAVE -display :0 ...
14700
14701 and then on viewer using ss_vncviewer stunnel wrapper
14702 (see the FAQ):
14703 ss_vncviewer -verify ./cacert.crt hostname:0
14704
14705 (this assumes the cacert.crt cert from -sslGenCA
14706 was safely copied to the VNC viewer machine where
14707 ss_vncviewer is run)
14708
14709 Example using a name:
14710
14711 x11vnc -sslGenCert server charlie
14712 x11vnc -ssl SAVE-charlie -display :0 ...
14713
14714 Example for a client certificate (rarely used):
14715
14716 x11vnc -sslGenCert client roger
14717 scp ~/.vnc/certs/clients/roger.pem somehost:.
14718 rm ~/.vnc/certs/clients/roger.pem
14719
14720 x11vnc is then started with the option -sslverify
14721 ~/.vnc/certs/clients/roger.crt (or simply -sslverify
14722 roger), and on the viewer user on somehost could do
14723 for example:
14724
14725 ss_vncviewer -mycert ./roger.pem hostname:0
14726
14727 If you set the env. var REQ_ARGS='...' it will be
14728 passed to openssl req(1). A common use would be
14729 REQ_ARGS='-days 1095' to bump up the expiration date
14730 (3 years in this case).
14731
14732 -sslEncKey pem Utility to encrypt an existing PEM file with a
14733 passphrase you supply when prompted. For that key to be
14734 used (e.g. by x11vnc) the passphrase must be supplied
14735 each time.
14736
14737 The "SAVE" notation described under -ssl applies as
14738 well. (precede this option with -ssldir [dir] to refer
14739 a directory besides the default ~/.vnc/certs)
14740
14741 The openssl(1) program must be installed on the system
14742 and available in PATH. After the Key file is encrypted
14743 the x11vnc command exits; the VNC server is not run.
14744
14745 Examples:
14746 x11vnc -sslEncKey /path/to/foo.pem
14747 x11vnc -sslEncKey SAVE
14748 x11vnc -sslEncKey SAVE-charlie
14749
14750 -sslCertInfo pem Prints out information about an existing PEM file.
14751 In addition the public certificate is also printed.
14752 The openssl(1) program must be in PATH. Basically the
14753 command "openssl x509 -text" is run on the pem.
14754
14755 After the info is printed the x11vnc command exits;
14756 the VNC server is not run.
14757
14758 The "SAVE" notation described under -ssl applies
14759 as well.
14760
14761 Using "LIST" will give a list of all certs being
14762 managed (in the ~/.vnc/certs dir, use -ssldir to refer
14763 to another dir). "ALL" will print out the info for
14764 every managed key (this can be very long). Giving a
14765 client or server cert shortname will also try a lookup
14766 (e.g. -sslCertInfo charlie). Use "LISTL" or "LL"
14767 for a long (ls -l style) listing.
14768
14769 Using "HASHON" will create subdirs [dir]/HASH and
14770 [dir]/HASH with OpenSSL hash filenames (e.g. 0d5fbbf1.0)
14771 symlinks pointing up to the corresponding *.crt file.
14772 ([dir] is ~/.vnc/certs or one given by -ssldir.)
14773 This is a useful way for other OpenSSL applications
14774 (e.g. stunnel) to access all of the certs without
14775 having to concatenate them. x11vnc will not use them
14776 unless you specifically reference them. "HASHOFF"
14777 removes these HASH subdirs.
14778
14779 The LIST, LISTL, LL, ALL, HASHON, HASHOFF words can
14780 also be lowercase, e.g. "list".
14781
14782 -sslDelCert pem Prompts you to delete all .crt .pem .key .req files
14783 associated with [pem]. x11vnc then exits. "SAVE"
14784 and lookups as in -sslCertInfo apply as well.
14785
14786 -sslScripts Prints out both the 'genCA' and 'genCert' x11vnc
14787 openssl wrapper scripts for you to examine, modify, etc.
14788 The scripts are printed to stdout and then the x11vnc
14789 program exits.
14790
14791
14792 -stunnel [pem] Use the stunnel(8) (stunnel.mirt.net) to provide an
14793 encrypted SSL tunnel between viewers and x11vnc.
14794
14795 This external tunnel method was implemented prior to the
14796 integrated -ssl encryption described above. It still
14797 works well and avoids the requirement of linking with
14798 the OpenSSL libraries. This mode requires stunnel
14799 to be installed on the system and available via PATH
14800 (n.b. stunnel is often installed in sbin directories).
14801 Version 4.x of stunnel is assumed (but see -stunnel3
14802 below.)
14803
14804 [pem] is optional, use "-stunnel /path/to/stunnel.pem"
14805 to specify a PEM certificate file to pass to stunnel.
14806 See the -ssl option for more info on certificate files.
14807
14808 Whether or not your stunnel has its own certificate
14809 depends on your stunnel configuration; stunnel often
14810 generates one at install time. See your stunnel
14811 documentation for details. In any event, if you want to
14812 use this certificate you must supply the full path to it
14813 as [pem]. Note: the file may only be readable by root.
14814
14815 [pem] may also be the special strings "TMP", "SAVE",
14816 and "SAVE..." as described in the -ssl option.
14817 If [pem] is not supplied, "SAVE" is assumed.
14818
14819 Note that the VeNCrypt, ANONTLS, and "ANON" modes
14820 are not supported in -stunnel mode.
14821
14822 stunnel is started up as a child process of x11vnc and
14823 any SSL connections stunnel receives are decrypted and
14824 sent to x11vnc over a local socket. The strings
14825 "The SSL VNC desktop is ..." and "SSLPORT=..."
14826 are printed out at startup to indicate this.
14827
14828 The -localhost option is enforced by default to avoid
14829 people routing around the SSL channel. Use -env
14830 STUNNEL_DISABLE_LOCALHOST=1 to disable this security
14831 requirement.
14832
14833 Set -env STUNNEL_DEBUG=1 for more debugging printout.
14834
14835 Set -env STUNNEL_PROG=xxx to the full path of stunnel
14836 program you want to be used (e.g. /usr/bin/stunnel4).
14837
14838 Set -env STUNNEL_LISTEN=xxx to the address of the
14839 network interface to listen on (the default is to listen
14840 on all interfaces), e.g. STUNNEL_LISTEN=192.168.1.100.
14841
14842 A simple way to add IPv6 support is STUNNEL_LISTEN=::
14843
14844 Your VNC viewer will also need to be able to connect
14845 via SSL. Unfortunately not too many do this. See the
14846 information about SSL viewers under the -ssl option.
14847 The x11vnc project's SSVNC is an option.
14848
14849 Also, in the x11vnc distribution, patched TightVNC
14850 and UltraVNC Java applet jar files are provided in
14851 the classes/ssl directory that do SSL connections.
14852 Enable serving them with the -http, -http_ssl, or
14853 -httpdir (see the option descriptions for more info.)
14854
14855 Note that for the Java viewer applet usage the
14856 "?PORT=xxxx" in the various URLs printed at startup
14857 will need to be supplied to the web browser to connect
14858 properly.
14859
14860 Currently the automatic "single port" HTTPS mode of
14861 -ssl is not fully supported in -stunnel mode. However,
14862 it can be emulated via:
14863
14864 % x11vnc -stunnel -http_ssl -http_oneport ...
14865
14866 In general, it is also not too difficult to set up
14867 an stunnel or other SSL tunnel on the viewer side.
14868 A simple example on Unix using stunnel 3.x is:
14869
14870 % stunnel -c -d localhost:5901 -r remotehost:5900
14871 % vncviewer localhost:1
14872
14873 For Windows, stunnel has been ported to it and there
14874 are probably other such tools available. See the FAQ
14875 and SSVNC for more examples.
14876
14877 -stunnel3 [pem] Use version 3.x stunnel command line syntax instead of
14878 version 4.x. The -http/-httpdir Java applet serving
14879 is currently not available in this mode.
14880
14881 -enc cipher:keyfile Use symmetric encryption with cipher "cipher"
14882 and secret key data in "keyfile". If keyfile is
14883 pw=<string> then "string" is used as the key data.
14884
14885 NOTE: It is recommended that you use SSL via the -ssl
14886 option instead of this option because SSL is well
14887 understood and takes great care to establish unique
14888 session keys and is more compatible with other software.
14889 Use this option if you do not want to deal with SSL
14890 certificates for authentication and do not want to
14891 use SSH but want some encryption for your VNC session.
14892 Or if you must interface with a symmetric key tunnel
14893 that you do not have control over.
14894
14895 Note that this mode will NOT work with the UltraVNC DSM
14896 plugins because they alter the RFB protocol in addition
14897 to tunnelling with the symmetric cipher (an unfortunate
14898 choice of implementation...)
14899
14900 cipher can be one of: arc4, aesv2, aes-cfb, blowfish,
14901 aes256, or 3des. See the OpenSSL documentation for
14902 more info. The keysize is 128 bits (except for aes256).
14903 Here is one way to make a keyfile with that many bits:
14904
14905 dd if=/dev/random of=./my.key bs=16 count=1
14906
14907 you will need to securely share this key with the other
14908 side of the VNC connection (See SSVNC for examples).
14909
14910 Example: -enc blowfish:./my.key
14911 Example: -enc blowfish:pw=swordfish
14912
14913 By default 16 bytes of random salt followed by 16 bytes
14914 of random initialization vector are sent at the very
14915 beginning of the stream. The other side must read these
14916 and initialize their cipher with them. These values
14917 make the session key unique (without them the security
14918 is minimal). Similarly, the other side must send us
14919 its random salt and IV with those same lengths.
14920
14921 The salt and key data are combined to create a session
14922 key using an md5 hash as described in EVP_BytesToKey(3).
14923
14924 The exact call is: EVP_BytesToKey(Cipher, EVP_md5(),
14925 salt, keydata, len, 1, keystr, NULL); where salt is
14926 the random data as described above, and keydata is the
14927 shared secret key data. keystr is the resulting session
14928 key. The cipher is then seeded with keystr and uses
14929 the random initialization vector as its first block.
14930
14931 To modify the amount of random salt and initialization
14932 vector use cipher@n,m where n is the salt length and
14933 m the initialization vector length. E.g.
14934
14935 -enc aes-cfb@8,16:./my.key
14936
14937 It is not a good idea to set either one to zero,
14938 although you may be forced to if the other side of the
14939 tunnel is not under your control.
14940
14941 To skip the salt and EVP_BytesToKey MD5 entirely (no
14942 hashing is done: the keydata is directly inserted into
14943 the cipher) specify "-1" for the salt, e.g.
14944
14945 -enc blowfish@-1,16:./my.key
14946
14947 The message digest can also be changed to something
14948 besides the default MD5. Use cipher@md+n,m where "md"
14949 can be one of sha, sha1, md5, or ripe. For example:
14950
14951 -enc arc4@sha+8,16:./my.key
14952
14953 The SSVNC vnc viewer project supplies a symmetric
14954 encryption tool named "ultravnc_dsm_helper" that can
14955 be used on the viewer side. For example:
14956
14957 ssvncviewer exec='ultravnc_dsm_helper arc4 my.key 0 h:p'
14958
14959 where h:p is the hostname and port of the x11vnc server.
14960 ultravnc_dsm_helper may also be used standalone to
14961 provide a symmetric encryption tunnel for any viewer
14962 or server (VNC or otherwise.) The cipher (1st arg)
14963 is basically the same syntax as we use above.
14964
14965 Also see the 'Non-Ultra DSM' SSVNC option for the
14966 'UltraVNC DSM Encryption Plugin' advanced option.
14967
14968 For both ways of using the viewer, you can specify the
14969 salt,ivec sizes (in GUI or, e.g. arc4@8,16).
14970
14971 -https [port] Use a special, separate HTTPS port (-ssl and
14972 -stunnel modes only) for HTTPS Java viewer applet
14973 downloading. I.e. not 5900 and not 5800 (the defaults.)
14974
14975 BACKGROUND: In -ssl mode, it turns out you can use the
14976 single VNC port (e.g. 5900) for both VNC and HTTPS
14977 connections. (HTTPS is used to retrieve a SSL-aware
14978 VncViewer.jar applet that is provided with x11vnc).
14979 Since both use SSL the implementation was extended to
14980 detect if HTTP traffic (i.e. GET) is taking place and
14981 handle it accordingly. The URL would be, e.g.:
14982
14983 https://mymachine.org:5900/
14984
14985 This is convenient for firewalls, etc, because only one
14986 port needs to be allowed in. However, this heuristic
14987 adds a few seconds delay to each connection and can be
14988 unreliable (especially if the user takes much time to
14989 ponder the Certificate dialogs in his browser, Java VM,
14990 or VNC Viewer applet. That's right 3 separate "Are
14991 you sure you want to connect?" dialogs!)
14992
14993 END OF BACKGROUND.
14994
14995 USAGE: So use the -https option to provide a separate,
14996 more reliable HTTPS port that x11vnc will listen on. If
14997 [port] is not provided (or is 0), one is autoselected.
14998 The URL to use is printed out at startup.
14999
15000 The SSL Java applet directory is specified via the
15001 -httpdir option. If not supplied, -https will try
15002 to guess the directory as though the -http option
15003 was supplied.
15004
15005 -httpsredir [port] In -ssl mode with the Java applet retrieved via HTTPS,
15006 when the HTML file containing applet parameters
15007 ('index.vnc' or 'proxy.vnc') is sent do NOT set the
15008 applet PORT parameter to the actual VNC port but set it
15009 to "port" instead. If "port" is not supplied, then
15010 the port number is guessed from the Host: HTTP header.
15011
15012 This is useful when an incoming TCP connection
15013 redirection is performed by a router/gateway/firewall
15014 from one port to an internal machine where x11vnc is
15015 listening on a different port. The Java applet needs to
15016 connect to the firewall/router port, not the VNC port
15017 on the internal workstation. For example, one could
15018 redir from mygateway.com:443 to workstation:5900.
15019
15020 This spares the user from having to type in
15021 https://mygateway.com/?PORT=443 into their web
15022 browser. Note that port 443 is the default https port;
15023 other ports must be explicitly indicated, for example:
15024 https://mygateway.com:8000/?PORT=8000. To avoid having
15025 to include the PORT= in the browser URL, simply supply
15026 "-httpsredir" to x11vnc.
15027
15028 This option does not work in -stunnel mode.
15029
15030 More tricks: set the env var X11VNC_EXTRA_HTTPS_PARAMS
15031 to be extra URL parameters to use. This way you do
15032 not need to specify extra PARAMS in the index.vnc file.
15033 E.g. x11vnc -env X11VNC_EXTRA_HTTPS_PARAMS='?GET=1' ...
15034
15035 If you do not want to expose the non-SSL HTTP port to
15036 the network (i.e. you just want the single VNC/HTTPS
15037 port, e.g. 5900, open for connections) then specify the
15038 option -env X11VNC_HTTP_LISTEN_LOCALHOST=1 This way
15039 the connection to the LibVNCServer httpd server will
15040 only be available on localhost (note that in -ssl mode,
15041 HTTPS requests are redirected from SSL to the non-SSL
15042 LibVNCServer HTTP server.)
15043
15044 -http_oneport For UN-encrypted connections mode (i.e. no -ssl,
15045 -stunnel, or -enc options), allow the Java VNC Viewer
15046 applet to be downloaded thru the VNC port via HTTP.
15047
15048 That is to say, you can use a single port for Java
15049 applet viewer connections by using a URL in your web
15050 browser like this, for example:
15051
15052 http://hostname:5900
15053
15054 The regular, two-port mode, URL http://hostname:5800
15055 will continue to work as well.
15056
15057 As mentioned above, this mode will NOT work with
15058 the -ssl, -stunnel, or -enc encryption options.
15059 Note that is it equivalent to '-enc none' (i.e. it
15060 uses the same detection mechanism as for HTTPS, but
15061 with no encryption.)
15062
15063 HTTPS single-port is on by default in -ssl encrypted
15064 mode (and -enc too), so you only need -http_oneport
15065 when doing non-SSL encrypted connections.
15066
15067 This mode could also be useful for SSH tunnels since
15068 it means only one port needs to be redirected.
15069
15070 The -httpsredir option may also be useful for this
15071 mode when using an SSH tunnel as well as for router
15072 port redirections.
15073
15074 Note that the -env X11VNC_HTTP_LISTEN_LOCALHOST=1
15075 option described above under -httpsredir applies for
15076 the LibVNCServer httpd server in all cases (ssl or not.)
15077
15078 -ssh user@host:disp Create a remote listening port on machine "host"
15079 via a SSH tunnel using the -R rport:localhost:lport
15080 method. lport will be the local x11vnc listening port,
15081 so a connection to rport (5900+disp) on "host"
15082 will reach x11vnc. E.g. fred (a] snoopy.com:0
15083
15084 This could be useful if a firewall/router prevents
15085 incoming connections to the x11vnc machine, but
15086 the ssh machine "host" can be reached by the VNC
15087 viewer. "user@" is not needed unless the remote unix
15088 username differs from the current one.
15089
15090 By default the remote sshd is usually configured to
15091 listen only on localhost for rport, so the viewer may
15092 need to ssh -L redir to "host" as well (See SSVNC to
15093 automate this). The sshd setting GatewayPorts enables
15094 listening on all interfaces for rport; viewers can
15095 reach it more easily.
15096
15097 "disp" is the VNC display for the remote SSH side,
15098 e.g. 0 corresponds to port 5900, etc. If disp is
15099 greater than 200 the value is used as the port. Use a
15100 negative value to force a low port, e.g. host:-80 will
15101 use port 80.
15102
15103 If ssh-agent is not active, then the ssh password needs
15104 to be entered in the terminal where x11vnc is running.
15105
15106 By default the remote ssh will issue a 'sleep 300' to
15107 wait for the incoming connection for 5 mins. To modify
15108 this use user@host:disp+secs.
15109
15110 If the remote SSH server is on a non-standard port
15111 (i.e. not 22) use user@host:port:disp+secs.
15112
15113 Note that the ssh process MAY NOT be killed when
15114 x11vnc exits. It tries by looking at ps(1) output.
15115
15116 -usepw If no other password method was supplied on the command
15117 line, first look for ~/.vnc/passwd and if found use it
15118 with -rfbauth; next, look for ~/.vnc/passwdfile and
15119 use it with -passwdfile; otherwise, prompt the user
15120 for a password to create ~/.vnc/passwd and use it with
15121 the -rfbauth option. If none of these succeed x11vnc
15122 exits immediately.
15123
15124 -storepasswd pass file Store password "pass" as the VNC password in the
15125 file "file". Once the password is stored the
15126 program exits. Use the password via "-rfbauth file"
15127
15128 If called with no arguments, "x11vnc -storepasswd",
15129 the user is prompted for a password and it is stored
15130 in the file ~/.vnc/passwd. Called with one argument,
15131 that will be the file to store the prompted password in.
15132
15133 -nopw Disable the big warning message when you use x11vnc
15134 without some sort of password.
15135
15136 -accept string Run a command (possibly to prompt the user at the
15137 X11 display) to decide whether an incoming client
15138 should be allowed to connect or not. "string" is
15139 an external command run via system(3) or some special
15140 cases described below. Be sure to quote "string"
15141 if it contains spaces, shell characters, etc. If the
15142 external command returns 0 the client is accepted,
15143 otherwise the client is rejected. See below for an
15144 extension to accept a client view-only.
15145
15146 If x11vnc is running as root (say from inetd(8) or from
15147 display managers xdm(1), gdm(1), etc), think about the
15148 security implications carefully before supplying this
15149 option (likewise for the -gone option).
15150
15151 Environment: The RFB_CLIENT_IP environment variable will
15152 be set to the incoming client IP number and the port
15153 in RFB_CLIENT_PORT (or -1 if unavailable). Similarly,
15154 RFB_SERVER_IP and RFB_SERVER_PORT (the x11vnc side
15155 of the connection), are set to allow identification
15156 of the tcp virtual circuit. The x11vnc process
15157 id will be in RFB_X11VNC_PID, a client id number in
15158 RFB_CLIENT_ID, and the number of other connected clients
15159 in RFB_CLIENT_COUNT. RFB_MODE will be "accept".
15160 RFB_STATE will be PROTOCOL_VERSION, SECURITY_TYPE,
15161 AUTHENTICATION, INITIALISATION, NORMAL, or UNKNOWN
15162 indicating up to which state the client has achieved.
15163 RFB_LOGIN_VIEWONLY will be 0, 1, or -1 (unknown).
15164 RFB_USERNAME, RFB_LOGIN_TIME, and RFB_CURRENT_TIME may
15165 also be set.
15166
15167 If "string" is "popup" then a builtin popup window
15168 is used. The popup will time out after 120 seconds,
15169 use "popup:N" to modify the timeout to N seconds
15170 (use 0 for no timeout).
15171
15172 In the case of "popup" and when the -unixpw option
15173 is specified, then a *second* window will be popped
15174 up after the user successfully logs in via his UNIX
15175 password. This time the user will be identified as
15176 UNIX:username@hostname, the "UNIX:" prefix indicates
15177 which user the viewer logged as via -unixpw. The first
15178 popup is only for whether to allow him to even *try*
15179 to login via unix password.
15180
15181 If "string" is "xmessage" then an xmessage(1)
15182 invocation is used for the command. xmessage must be
15183 installed on the machine for this to work.
15184
15185 Both "popup" and "xmessage" will present an option
15186 for accepting the client "View-Only" (the client
15187 can only watch). This option will not be presented if
15188 -viewonly has been specified, in which case the entire
15189 display is view only.
15190
15191 If the user supplied command is prefixed with something
15192 like "yes:0,no:*,view:3 mycommand ..." then this
15193 associates the numerical command return code with
15194 the actions: accept, reject, and accept-view-only,
15195 respectively. Use "*" instead of a number to indicate
15196 the default action (in case the command returns an
15197 unexpected value). E.g. "no:*" is a good choice.
15198
15199 Note that x11vnc blocks while the external command
15200 or popup is running (other clients may see no updates
15201 during this period). So a person sitting a the physical
15202 display is needed to respond to an popup prompt. (use
15203 a 2nd x11vnc if you lock yourself out).
15204
15205 More -accept tricks: use "popupmouse" to only allow
15206 mouse clicks in the builtin popup to be recognized.
15207 Similarly use "popupkey" to only recognize
15208 keystroke responses. These are to help avoid the
15209 user accidentally accepting a client by typing or
15210 clicking. All 3 of the popup keywords can be followed
15211 by +N+M to supply a position for the popup window.
15212 The default is to center the popup window.
15213 -afteraccept string As -accept, except to run a user supplied command after
15214 a client has been accepted and authenticated. RFB_MODE
15215 will be set to "afteraccept" and the other RFB_*
15216 variables are as in -accept. Unlike -accept, the
15217 command return code is not interpreted by x11vnc.
15218 Example: -afteraccept 'killall xlock &'
15219 -gone string As -accept, except to run a user supplied command when
15220 a client goes away (disconnects). RFB_MODE will be
15221 set to "gone" and the other RFB_* variables are as
15222 in -accept. The "popup" actions apply as well.
15223 Unlike -accept, the command return code is not
15224 interpreted by x11vnc. Example: -gone 'xlock &'
15225
15226 -users list If x11vnc is started as root (say from inetd(8) or from
15227 display managers xdm(1), gdm(1), etc), then as soon
15228 as possible after connections to the X display are
15229 established try to switch to one of the users in the
15230 comma separated "list". If x11vnc is not running as
15231 root this option is ignored.
15232
15233 Why use this option? In general it is not needed since
15234 x11vnc is already connected to the X display and can
15235 perform its primary functions. The option was added
15236 to make some of the *external* utility commands x11vnc
15237 occasionally runs work properly. In particular under
15238 GNOME and KDE to implement the "-solid color" feature
15239 external commands (gconftool-2 and dcop) unfortunately
15240 must be run as the user owning the desktop session.
15241 Since this option switches userid it also affects the
15242 userid used to run the processes for the -accept and
15243 -gone options. It also affects the ability to read
15244 files for options such as -connect, -allow, and -remap
15245 and also the ultra and tight filetransfer feature if
15246 enabled. Note that the -connect file is also sometimes
15247 written to.
15248
15249 So be careful with this option since in some situations
15250 its use can decrease security.
15251
15252 In general the switch to a user will only take place
15253 if the display can still be successfully opened as that
15254 user (this is primarily to try to guess the actual owner
15255 of the session). Example: "-users fred,wilma,betty".
15256 Note that a malicious local user "barney" by
15257 quickly using "xhost +" when logging in may possibly
15258 get the x11vnc process to switch to user "fred".
15259 What happens next?
15260
15261 Under display managers it may be a long time before
15262 the switch succeeds (i.e. a user logs in). To instead
15263 make it switch immediately regardless if the display
15264 can be reopened prefix the username with the "+"
15265 character. E.g. "-users +bob" or "-users +nobody".
15266
15267 The latter (i.e. switching immediately to user
15268 "nobody") is the only obvious use of the -users option
15269 that increases security.
15270
15271 Use the following notation to associate a group with
15272 a user: user1.group1,user2.group2,... Note that
15273 initgroups(2) will still be called first to try to
15274 switch to ALL of a user's groups (primary and additional
15275 groups). Only if that fails or it is not available
15276 then the single group specified as above (or the user's
15277 primary group if not specified) is switched to with
15278 setgid(2). Use -env X11VNC_SINGLE_GROUP=1 to prevent
15279 trying initgroups(2) and only switch to the single
15280 group. This sort of setting is only really needed to
15281 make the ultra or tight filetransfer permissions work
15282 properly. This format applies to any comma separated lis
15283 t
15284 of users, even the special "=" modes described below.
15285
15286 In -unixpw mode, if "-users unixpw=" is supplied
15287 then after a user authenticates himself via the
15288 -unixpw mechanism, x11vnc will try to switch to that
15289 user as though "-users +username" had been supplied.
15290 If you want to limit which users this will be done for,
15291 provide them as a comma separated list after "unixpw="
15292 Groups can also be specified as described above.
15293
15294 Similarly, in -ssl mode, if "-users sslpeer=" is
15295 supplied then after an SSL client authenticates with his
15296 cert (the -sslverify option is required for this) x11vnc
15297 will extract a UNIX username from the "emailAddress"
15298 field (username (a] hostname.com) of the "Subject" of the
15299 x509 SSL cert and then try to switch to that user as
15300 though "-users +username" had been supplied. If you
15301 want to limit which users this will be done for, provide
15302 them as a comma separated list after "sslpeer=".
15303 Set the env. var X11VNC_SSLPEER_CN to use the Common
15304 Name (normally a hostname) instead of the Email field.
15305
15306 NOTE: for sslpeer= mode the x11vnc administrator must
15307 take care that any client certs he adds to -sslverify
15308 have the intended UNIX username in the "emailAddress"
15309 field of the cert. Otherwise a user may be able to
15310 log in as another. This command can be of use in
15311 checking: "openssl x509 -text -in file.crt", see the
15312 "Subject:" line. Also, along with the normal RFB_*
15313 env. vars. (see -accept) passed to external cmd=
15314 commands, RFB_SSL_CLIENT_CERT will be set to the
15315 client's x509 certificate string.
15316
15317 The sslpeer= mode can aid finding X sessions via the
15318 FINDDISPLAY and FINDCREATEDISPLAY mechanisms.
15319
15320 To immediately switch to a user *before* connections
15321 to the X display are made or any files opened use the
15322 "=" character: "-users =bob". That user needs to
15323 be able to open the X display and any files of course.
15324
15325 The special user "guess=" means to examine the utmpx
15326 database (see who(1)) looking for a user attached to
15327 the display number (from DISPLAY or -display option)
15328 and try him/her. To limit the list of guesses, use:
15329 "-users guess=bob,betty".
15330
15331 Even more sinister is the special user "lurk="
15332 that means to try to guess the DISPLAY from the utmpx
15333 login database as well. So it "lurks" waiting for
15334 anyone to log into an X session and then connects to it.
15335 Specify a list of users after the = to limit which users
15336 will be tried. To enable a different searching mode, if
15337 the first user in the list is something like ":0" or
15338 ":0-2" that indicates a range of DISPLAY numbers that
15339 will be tried (regardless of whether they are in the
15340 utmpx database) for all users that are logged in. Also
15341 see the "-display WAIT:..." functionality. Examples:
15342 "-users lurk=" and also "-users lurk=:0-1,bob,mary"
15343
15344 Be especially careful using the "guess=" and "lurk="
15345 modes. They are not recommended for use on machines
15346 with untrustworthy local users.
15347
15348 -noshm Do not use the MIT-SHM extension for the polling.
15349 Remote displays can be polled this way: be careful this
15350 can use large amounts of network bandwidth. This is
15351 also of use if the local machine has a limited number
15352 of shm segments and -onetile is not sufficient.
15353 -flipbyteorder Sometimes needed if remotely polled host has different
15354 endianness. Ignored unless -noshm is set.
15355 -onetile Do not use the new copy_tiles() framebuffer mechanism,
15356 just use 1 shm tile for polling. Limits shm segments
15357 used to 3.
15358
15359 To disable any automatic shm reduction set the
15360 env. var. X11VNC_NO_LIMIT_SHM.
15361
15362 -solid [color] To improve performance, when VNC clients are connected
15363 try to change the desktop background to a solid color.
15364 The [color] is optional: the default color is "cyan4".
15365 For a different one specify the X color (rgb.txt name,
15366 e.g. "darkblue" or numerical "#RRGGBB").
15367
15368 Currently this option only works on GNOME, KDE, CDE,
15369 XFCE, and classic X (i.e. with the background image
15370 on the root window). The "gconftool-2", "dcop"
15371 and "xfconf-query" external commands are run for
15372 GNOME, KDE, and XFCE respectively. This also works
15373 on native MacOSX. (There is no color selection for
15374 MacOSX or XFCE.) Other desktops won't work, (send
15375 us the corresponding commands if you find them).
15376 If x11vnc is running as root (inetd(8) or gdm(1)),
15377 the -users option may be needed for GNOME, KDE, XFCE.
15378 If x11vnc guesses your desktop incorrectly, you can
15379 force it by prefixing color with "gnome:", "kde:",
15380 "cde:", "xfce:", or "root:".
15381
15382 Update: -solid no longer works on KDE4.
15383
15384 This mode works in a limited way on the Mac OS X Console
15385 with one color ('kelp') using the screensaver writing
15386 to the background. Look in "~/Library/Screen Savers"
15387 for VncSolidColor.png to change the color.
15388
15389 -blackout string Black out rectangles on the screen. "string" is a
15390 comma separated list of WxH+X+Y type geometries for
15391 each rectangle. If one of the items on the list is the
15392 string "noptr" the mouse pointer will not be allowed
15393 to go into a blacked out region.
15394 -xinerama If your screen is composed of multiple monitors
15395 -noxinerama glued together via XINERAMA, and that screen is
15396 not a rectangle this option will try to guess the
15397 areas to black out (if your system has libXinerama).
15398 default: -xinerama
15399
15400 In general, we have noticed on XINERAMA displays you may
15401 need to use the "-xwarppointer" option if the mouse
15402 pointer misbehaves and it is enabled by default. Use
15403 "-noxwarppointer" if you do not want this.
15404
15405 -xtrap Use the DEC-XTRAP extension for keystroke and mouse
15406 input insertion. For use on legacy systems, e.g. X11R5,
15407 running an incomplete or missing XTEST extension.
15408 By default DEC-XTRAP will be used if XTEST server grab
15409 control is missing, use -xtrap to do the keystroke and
15410 mouse insertion via DEC-XTRAP as well.
15411
15412 -xrandr [mode] If the display supports the XRANDR (X Resize, Rotate
15413 and Reflection) extension, and you expect XRANDR events
15414 to occur to the display while x11vnc is running, this
15415 options indicates x11vnc should try to respond to
15416 them (as opposed to simply crashing by assuming the
15417 old screen size). See the xrandr(1) manpage and run
15418 'xrandr -q' for more info. [mode] is optional and
15419 described below.
15420
15421 Since watching for XRANDR events and trapping errors
15422 increases polling overhead, only use this option if
15423 XRANDR changes are expected. For example on a rotatable
15424 screen PDA or laptop, or using a XRANDR-aware Desktop
15425 where you resize often. It is best to be viewing with a
15426 vncviewer that supports the NewFBSize encoding, since it
15427 knows how to react to screen size changes. Otherwise,
15428 LibVNCServer tries to do so something reasonable for
15429 viewers that cannot do this (portions of the screen
15430 may be clipped, unused, etc).
15431
15432 Note: the default now is to check for XRANDR events, but
15433 do not trap every X call that may fail due to resize.
15434 If a resize event is received, the full -xrandr mode
15435 is enabled. To disable even checking for events supply:
15436 -noxrandr.
15437
15438 "mode" defaults to "resize", which means create a
15439 new, resized, framebuffer and hope all viewers can cope
15440 with the change. "newfbsize" means first disconnect
15441 all viewers that do not support the NewFBSize VNC
15442 encoding, and then resize the framebuffer. "exit"
15443 means disconnect all viewer clients, and then terminate
15444 x11vnc.
15445
15446 -rotate string Rotate and/or flip the framebuffer view exported by VNC.
15447 This transformation is independent of XRANDR and is
15448 done in software in main memory and so may be slower.
15449 This mode could be useful on a handheld with portrait or
15450 landscape modes that do not correspond to the scanline
15451 order of the actual framebuffer. "string" can be:
15452
15453 x flip along x-axis
15454 y flip along y-axis
15455 xy flip along x- and y-axes
15456 +90 rotate 90 degrees clockwise
15457 -90 rotate 90 degrees counter-clockwise
15458 +90x rotate 90 degrees CW, then flip along x
15459 +90y rotate 90 degrees CW, then flip along y
15460
15461 these give all possible rotations and reflections.
15462
15463 Aliases: same as xy: yx, +180, -180, 180
15464 same as -90: +270, 270
15465 same as +90: 90, (ditto for 90x, 90y)
15466
15467 Like -scale, this transformation is applied at the very
15468 end of any chain of framebuffer transformations and so
15469 any options with geometries, e.g. -blackout, -clip, etc.
15470 are relative to the original X (or -rawfb) framebuffer,
15471 not the final one sent to VNC viewers.
15472
15473 If you do not want the cursor shape to be rotated
15474 prefix "string" with "nc:", e.g. "nc:+90",
15475 "nc:xy", etc.
15476
15477 -padgeom WxH Whenever a new vncviewer connects, the framebuffer is
15478 replaced with a fake, solid black one of geometry WxH.
15479 Shortly afterwards the framebuffer is replaced with the
15480 real one. This is intended for use with vncviewers
15481 that do not support NewFBSize and one wants to make
15482 sure the initial viewer geometry will be big enough
15483 to handle all subsequent resizes (e.g. under -xrandr,
15484 -remote id:windowid, rescaling, etc.)
15485
15486 In -unixpw mode this sets the size of the login screen.
15487 Use "once:WxH" it ignore padgeom after the login
15488 screen is set up.
15489
15490 -o logfile Write stderr messages to file "logfile" instead of to
15491 the terminal. Same as "-logfile file". To append
15492 to the file use "-oa file" or "-logappend file".
15493 If "logfile" contains the string "%VNCDISPLAY"
15494 it is expanded to the vnc display (the name may need
15495 to be guessed at.) "%HOME" works too.
15496
15497 -flag file Write the "PORT=NNNN" (e.g. PORT=5900) string to
15498 "file" in addition to stdout. This option could be
15499 useful by wrapper script to detect when x11vnc is ready.
15500
15501 -rmflag file Remove "file" at exit to signal when x11vnc is done.
15502 The file is created at startup if it does not already
15503 exist or if "file" is prefixed with "create:".
15504 If the file is created, the x11vnc PID is placed in
15505 the file. Otherwise the files contents is not changed.
15506 Use prefix "nocreate:" to prevent creation.
15507
15508 -rc filename Use "filename" instead of $HOME/.x11vncrc for rc file.
15509 -norc Do not process any .x11vncrc file for options.
15510
15511 -env VAR=VALUE Set the environment variable 'VAR' to value 'VALUE'
15512 at x11vnc startup. This is a convenience utility to
15513 avoid shell script wrappers, etc. to set the env. var.
15514 You may specify as many of these as needed on the
15515 command line.
15516 -prog /path/to/x11vnc Set the full path to the x11vnc program for cases when
15517 it cannot be determined from argv[0] (e.g. tcpd/inetd)
15518
15519 -h, -help Print this help text.
15520 -?, -opts Only list the x11vnc options.
15521 -V, -version Print program version and last modification date.
15522 -license Print out license information. Same as -copying and
15523 -warranty.
15524
15525 -dbg Instead of exiting after cleaning up, run a simple
15526 "debug crash shell" when fatal errors are trapped.
15527
15528 -q, -quiet Be quiet by printing less informational output to
15529 stderr. (use -noquiet to undo an earlier -quiet.)
15530
15531 The -quiet option does not eliminate all informational
15532 output, it only reduces it. It is ignored in most
15533 auxiliary usage modes, e.g. -storepasswd. To eliminate
15534 all output use: 2>/dev/null 1>&2, etc.
15535
15536 -v, -verbose Print out more information to stderr.
15537
15538 -bg Go into the background after screen setup. Messages to
15539 stderr are lost unless -o logfile is used. Something
15540 like this could be useful in a script:
15541 port=`ssh -t $host "x11vnc -display :0 -bg" | grep PORT
15542 `
15543 port=`echo "$port" | sed -e 's/PORT=//'`
15544 port=`expr $port - 5900`
15545 vncviewer $host:$port
15546
15547 -modtweak Option -modtweak automatically tries to adjust the AltGr
15548 -nomodtweak and Shift modifiers for differing language keyboards
15549 between client and host. Otherwise, only a single key
15550 press/release of a Keycode is simulated (i.e. ignoring
15551 the state of the modifiers: this usually works for
15552 identical keyboards). Also useful in resolving cases
15553 where a Keysym is bound to multiple keys (e.g. "<" + ">"
15554 and "," + "<" keys). Default: -modtweak
15555
15556 If you are having trouble with with keys and -xkb or
15557 -noxkb, and similar things don't help, try -nomodtweak.
15558
15559 On some HP-UX systems it is been noted that they have
15560 an odd keymapping where a single keycode will have a
15561 keysym, e.g. "#", up to three times. You can check
15562 via "xmodmap -pk" or the -dk option. The failure
15563 is when you try to type "#" it yields "3". If you
15564 see this problem try setting the environment variable
15565 MODTWEAK_LOWEST=1 to see if it helps.
15566
15567 -xkb When in modtweak mode, use the XKEYBOARD extension (if
15568 -noxkb the X display supports it) to do the modifier tweaking.
15569 This is powerful and should be tried if there are still
15570 keymapping problems when using -modtweak by itself.
15571 The default is to check whether some common keysyms,
15572 e.g. !, @, [, are only accessible via -xkb mode and if
15573 so then automatically enable the mode. To disable this
15574 automatic detection use -noxkb.
15575
15576 When -xkb mode is active you can set these env. vars.
15577 They apply only when there is ambiguity as to which
15578 key to choose (i.e the mapping is not one-to-one).
15579 NOKEYHINTS=1: for up ascii keystrokes do not use score
15580 hints saved when the key was pressed down. NOANYDOWN=1:
15581 for up keystrokes do not resort to searching through
15582 keys that are currently pressed down. KEYSDOWN=N:
15583 remember the last N keys press down for tie-breaking
15584 when an up keystroke comes in.
15585
15586 -capslock When in -modtweak (the default) or -xkb mode,
15587 if a keysym in the range A-Z comes in check the X
15588 server to see if the Caps_Lock is set. If it is do
15589 not artificially press Shift to generate the keysym.
15590 This will enable the CapsLock key to behave correctly
15591 in some circumstances: namely *both* the VNC viewer
15592 machine and the x11vnc X server are in the CapsLock
15593 on state. If one side has CapsLock on and the other
15594 off and the keyboard is not behaving as you think it
15595 should you should correct the CapsLock states (hint:
15596 pressing CapsLock inside and outside of the viewer can
15597 help toggle them both to the correct state). However,
15598 for best results do not use this option, but rather
15599 *only* enable CapsLock on the VNC viewer side (i.e. by
15600 pressing CapsLock outside of the viewer window, also
15601 -skip_lockkeys below). Also try -nomodtweak for a
15602 possible workaround.
15603
15604 -skip_lockkeys Have x11vnc ignore all Caps_Lock, Shift_Lock, Num_Lock,
15605 -noskip_lockkeys Scroll_Lock keysyms received from viewers. The idea is
15606 you press Caps_Lock on the VNC Viewer side but that does
15607 not change the lock state in the x11vnc-side X server.
15608 Nevertheless your capitalized letters come in over
15609 the wire and are applied correctly to the x11vnc-side
15610 X server. Note this mode probably won't do what you
15611 want in -nomodtweak mode. Also, a kludge for KP_n
15612 digits is always done in this mode: they are mapped to
15613 regular digit keysyms. See also -capslock above.
15614 The default is -noskip_lockkeys.
15615
15616 -skip_keycodes string Ignore the comma separated list of decimal keycodes.
15617 Perhaps these are keycodes not on your keyboard but
15618 your X server thinks exist. Currently only applies
15619 to -xkb mode. Use this option to help x11vnc in the
15620 reverse problem it tries to solve: Keysym -> Keycode(s)
15621 when ambiguities exist (more than one Keycode per
15622 Keysym). Run 'xmodmap -pk' to see your keymapping.
15623 Example: "-skip_keycodes 94,114"
15624 -sloppy_keys Experimental option that tries to correct some
15625 "sloppy" key behavior. E.g. if at the viewer you
15626 press Shift+Key but then release the Shift before
15627 Key that could give rise to extra unwanted characters
15628 (usually only between keyboards of different languages).
15629 Only use this option if you observe problems with
15630 some keystrokes.
15631 -skip_dups Some VNC viewers send impossible repeated key events,
15632 -noskip_dups e.g. key-down, key-down, key-up, key-up all for the same
15633 key, or 20 downs in a row for the same modifier key!
15634 Setting -skip_dups means to skip these duplicates and
15635 just process the first event. Note: some VNC viewers
15636 assume they can send down's without the corresponding
15637 up's and so you should not set this option for
15638 these viewers (symptom: some keys do not autorepeat)
15639 Default: -noskip_dups
15640 -add_keysyms If a Keysym is received from a VNC viewer and that
15641 -noadd_keysyms Keysym does not exist in the X server, then add the
15642 Keysym to the X server's keyboard mapping on an unused
15643 key. Added Keysyms will be removed periodically and
15644 also when x11vnc exits. Default: -add_keysyms
15645 -clear_mods At startup and exit clear the modifier keys by sending
15646 KeyRelease for each one. The Lock modifiers are skipped.
15647 Used to clear the state if the display was accidentally
15648 left with any pressed down.
15649 -clear_keys As -clear_mods, except try to release ANY pressed key.
15650 Note that this option and -clear_mods can interfere
15651 with a person typing at the physical keyboard.
15652 -clear_all As -clear_keys, except try to release any CapsLock,
15653 NumLock, etc. locks as well.
15654
15655 -remap string Read Keysym remappings from file named "string".
15656 Format is one pair of Keysyms per line (can be name
15657 or hex value) separated by a space. If no file named
15658 "string" exists, it is instead interpreted as this
15659 form: key1-key2,key3-key4,... See <X11/keysymdef.h>
15660 header file for a list of Keysym names, or use xev(1).
15661
15662 To map a key to a button click, use the fake Keysyms
15663 "Button1", ..., etc. E.g: "-remap Super_R-Button2"
15664 (useful for pasting on a laptop)
15665
15666 I use these if the machine I am viewing from does not
15667 have a scrollwheel or I don't like using the one it has:
15668
15669 -remap Super_R-Button4,Menu-Button5
15670 -remap KP_Add-Button4,KP_Enter-Button5
15671
15672 the former would be used on a PC, the latter on a
15673 MacBook. This way those little used keys can be used
15674 to generate bigger hops than the Up and Down arrows
15675 provide. One can scroll through text or web pages more
15676 quickly this way (especially if x11vnc scroll detection
15677 is active.)
15678
15679 Use Button44, Button12, etc. for multiple clicks.
15680
15681 To disable a keysym (i.e. make it so it will not be
15682 injected), remap it to "NoSymbol" or "None".
15683
15684 Dead keys: "dead" (or silent, mute) keys are keys that
15685 do not produce a character but must be followed by a 2nd
15686 keystroke. This is often used for accenting characters,
15687 e.g. to put "`" on top of "a" by pressing the dead
15688 key and then "a". Note that this interpretation
15689 is not part of core X11, it is up to the toolkit or
15690 application to decide how to react to the sequence.
15691 The X11 names for these keysyms are "dead_grave",
15692 "dead_acute", etc. However some VNC viewers send the
15693 keysyms "grave", "acute" instead thereby disabling
15694 the accenting. To work around this -remap can be used.
15695 For example "-remap grave-dead_grave,acute-dead_acute"
15696 As a convenience, "-remap DEAD" applies these remaps:
15697
15698 g grave-dead_grave
15699 a acute-dead_acute
15700 c asciicircum-dead_circumflex
15701 t asciitilde-dead_tilde
15702 m macron-dead_macron
15703 b breve-dead_breve
15704 D abovedot-dead_abovedot
15705 d diaeresis-dead_diaeresis
15706 o degree-dead_abovering
15707 A doubleacute-dead_doubleacute
15708 r caron-dead_caron
15709 e cedilla-dead_cedilla
15710
15711 If you just want a subset use the first letter
15712 label, e.g. "-remap DEAD=ga" to get the first two.
15713 Additional remaps may also be supplied via commas,
15714 e.g. "-remap DEAD=ga,Super_R-Button2". Finally,
15715 "DEAD=missing" means to apply all of the above as
15716 long as the left hand member is not already in the
15717 X11 keymap.
15718
15719 -norepeat Option -norepeat disables X server key auto repeat when
15720 -repeat VNC clients are connected and VNC keyboard input is
15721 not idle for more than 5 minutes. This works around a
15722 repeating keystrokes bug (triggered by long processing
15723 delays between key down and key up client events:
15724 either from large screen changes or high latency).
15725 Default: -norepeat
15726
15727 You can set the env. var. X11VNC_IDLE_TIMEOUT to the
15728 number of idle seconds you want (5min = 300secs).
15729
15730 Note: your VNC viewer side will likely do autorepeating,
15731 so this is no loss unless someone is simultaneously at
15732 the real X display.
15733
15734 Use "-norepeat N" to set how many times norepeat will
15735 be reset if something else (e.g. X session manager)
15736 undoes it. The default is 2. Use a negative value
15737 for unlimited resets.
15738
15739 -nofb Ignore video framebuffer: only process keyboard and
15740 pointer. Intended for use with Win2VNC and x2vnc
15741 dual-monitor setups.
15742 -nobell Do not watch for XBell events. (no beeps will be heard)
15743 Note: XBell monitoring requires the XKEYBOARD extension.
15744 -nosel Do not manage exchange of X selection/cutbuffer between
15745 VNC viewers and the X server at all.
15746 -noprimary Do not poll the PRIMARY selection for changes to send
15747 back to clients. (PRIMARY is still set on received
15748 changes, however).
15749 -nosetprimary Do not set the PRIMARY selection for changes received
15750 from VNC clients.
15751 -noclipboard Do not poll the CLIPBOARD selection for changes to send
15752 back to clients. (CLIPBOARD is still set on received
15753 changes, however).
15754 -nosetclipboard Do not set the CLIPBOARD selection for changes
15755 received from VNC clients.
15756 -seldir string If direction string is "send", only send the selection
15757 to viewers, and if it is "recv" only receive it from
15758 viewers. To work around apps setting the selection
15759 too frequently and messing up the other end. You can
15760 actually supply a comma separated list of directions,
15761 including "debug" to turn on debugging output.
15762
15763 -cursor [mode] Sets how the pointer cursor shape (little icon at the
15764 -nocursor mouse pointer) should be handled. The "mode" string
15765 is optional and is described below. The default
15766 is to show some sort of cursor shape(s). How this
15767 is done depends on the VNC viewer and the X server.
15768 Use -nocursor to disable cursor shapes completely.
15769
15770 Some VNC viewers support the TightVNC CursorPosUpdates
15771 and CursorShapeUpdates extensions (cuts down on
15772 network traffic by not having to send the cursor image
15773 every time the pointer is moved), in which case these
15774 extensions are used (see -nocursorshape and -nocursorpos
15775 below to disable). For other viewers the cursor shape
15776 is written directly to the framebuffer every time the
15777 pointer is moved or changed and gets sent along with
15778 the other framebuffer updates. In this case, there
15779 will be some lag between the vnc viewer pointer and
15780 the remote cursor position.
15781
15782 If the X display supports retrieving the cursor shape
15783 information from the X server, then the default is
15784 to use that mode. On Solaris this can be done with
15785 the SUN_OVL extension using -overlay (see also the
15786 -overlay_nocursor option). A similar overlay scheme
15787 is used on IRIX. Xorg (e.g. Linux) and recent Solaris
15788 Xsun servers support the XFIXES extension to retrieve
15789 the exact cursor shape from the X server. If XFIXES
15790 is present it is preferred over Overlay and is used by
15791 default (see -noxfixes below). This can be disabled
15792 with -nocursor, and also some values of the "mode"
15793 option below.
15794
15795 Note that under XFIXES cursors with transparency (alpha
15796 channel) will usually not be exactly represented and one
15797 may find Overlay preferable. See also the -alphacut
15798 and -alphafrac options below as fudge factors to try
15799 to improve the situation for cursors with transparency
15800 for a given theme.
15801
15802 The "mode" string can be used to fine-tune the
15803 displaying of cursor shapes. It can be used the
15804 following ways:
15805
15806 "-cursor arrow" - just show the standard arrow
15807 nothing more or nothing less.
15808
15809 "-cursor none" - same as "-nocursor"
15810
15811 "-cursor X" - when the cursor appears to be on the
15812 root window, draw the familiar X shape. Some desktops
15813 such as GNOME cover up the root window completely,
15814 and so this will not work, try "X1", etc, to try to
15815 shift the tree depth. On high latency links or slow
15816 machines there will be a time lag between expected and
15817 the actual cursor shape.
15818
15819 "-cursor some" - like "X" but use additional
15820 heuristics to try to guess if the window should have
15821 a windowmanager-like resizer cursor or a text input
15822 I-beam cursor. This is a complete hack, but may be
15823 useful in some situations because it provides a little
15824 more feedback about the cursor shape.
15825
15826 "-cursor most" - try to show as many cursors as
15827 possible. Often this will only be the same as "some"
15828 unless the display has overlay visuals or XFIXES
15829 extensions available. On Solaris and IRIX if XFIXES
15830 is not available, -overlay mode will be attempted.
15831
15832 -cursor_drag Show cursor shape changes even when the mouse is being
15833 dragged with a mouse button down. This is useful if you
15834 want to be able to see Drag-and-Drop cursor icons, etc.
15835
15836 -arrow n Choose an alternate "arrow" cursor from a set of
15837 some common ones. n can be 1 to 6. Default is: 1
15838 Ignored when in XFIXES cursor-grabbing mode.
15839
15840 -noxfixes Do not use the XFIXES extension to draw the exact cursor
15841 shape even if it is available.
15842
15843 Note: To work around a crash in Xorg 1.5 and later
15844 some people needed to use -noxfixes. The Xorg crash
15845 occurred right after a Display Manager (e.g. GDM) login.
15846 Starting with x11vnc 0.9.9 it tries to automatically
15847 avoid using XFIXES until it is sure a window manager
15848 is running. See the -reopen option for more info and
15849 how to use X11VNC_AVOID_WINDOWS=never to disable it.
15850
15851 -alphacut n When using the XFIXES extension for the cursor shape,
15852 cursors with transparency will not usually be displayed
15853 exactly (but opaque ones will). This option sets n as
15854 a cutoff for cursors that have transparency ("alpha
15855 channel" with values ranging from 0 to 255) Any cursor
15856 pixel with alpha value less than n becomes completely
15857 transparent. Otherwise the pixel is completely opaque.
15858 Default 240
15859
15860 -alphafrac fraction With the threshold in -alphacut some cursors will become
15861 almost completely transparent because their alpha values
15862 are not high enough. For those cursors adjust the
15863 alpha threshold until fraction of the non-zero alpha
15864 channel pixels become opaque. Default 0.33
15865 -alpharemove By default, XFIXES cursors pixels with transparency have
15866 the alpha factor multiplied into the RGB color values
15867 (i.e. that corresponding to blending the cursor with a
15868 black background). Specify this option to remove the
15869 alpha factor. (useful for light colored semi-transparent
15870 cursors).
15871 -noalphablend In XFIXES mode do not send cursor alpha channel data
15872 to LibVNCServer. The default is to send it. The
15873 alphablend effect will only be visible in -nocursorshape
15874 mode or for clients with cursorshapeupdates turned
15875 off. (However there is a hack for 32bpp with depth 24,
15876 it uses the extra 8 bits to store cursor transparency
15877 for use with a hacked vncviewer that applies the
15878 transparency locally. See the FAQ for more info).
15879
15880 -nocursorshape Do not use the TightVNC CursorShapeUpdates extension
15881 even if clients support it. See -cursor above.
15882 -cursorpos Option -cursorpos enables sending the X cursor position
15883 -nocursorpos back to all vnc clients that support the TightVNC
15884 CursorPosUpdates extension. Other clients will be able
15885 to see the pointer motions. Default: -cursorpos
15886 -xwarppointer Move the pointer with XWarpPointer(3X) instead of
15887 -noxwarppointer the XTEST extension. Use this as a workaround
15888 if the pointer motion behaves incorrectly, e.g.
15889 on touchscreens or other non-standard setups.
15890
15891 It is also sometimes needed on XINERAMA displays and is
15892 enabled by default if XINERAMA is found to be active.
15893 To prevent this, use -noxwarppointer.
15894
15895 -always_inject Even if there is no displacement (dx = dy = 0) for a
15896 VNC mouse event force the pointer to the indicated x,y
15897 position anyway. Recent (2009) gui toolkits (gnome)
15898 have problems with x11vnc's original mouse input
15899 injection method. So x11vnc's mouse input injection
15900 method has been modified. To regain the OLD behavior
15901 use this option: -always_inject. Then x11vnc will
15902 always force positioning the mouse to the x,y position
15903 even if that position has not changed since the previous
15904 VNC input event.
15905
15906 The first place this problem was noticed was in gnome
15907 terminal: if you pressed and released mouse button 3, a
15908 menu was posted and then its first element 'New Terminal
15909 Window' was activated. This was because x11vnc injected
15910 the mouse position twice: once on ButtonPress and again
15911 on ButtonRelease. The toolkit interpreted the 2nd one
15912 as mouse motion even though the mouse hadn't moved.
15913 So now by default x11vnc tries to avoid injecting the
15914 2nd one.
15915
15916 Note that with the new default x11vnc will be oblivious
15917 to applications moving the pointer (warping) or the
15918 user at the physical display moving it. So it might,
15919 e.g., inject ButtonRelease at the wrong position.
15920 If this (or similar scenarios) causes problems in your
15921 environment, specify -always_inject for the old method.
15922
15923 -buttonmap string String to remap mouse buttons. Format: IJK-LMN, this
15924 maps buttons I -> L, etc., e.g. -buttonmap 13-31
15925
15926 Button presses can also be mapped to keystrokes: replace
15927 a button digit on the right of the dash with :<sym>:
15928 or :<sym1>+<sym2>: etc. for multiple keys. For example,
15929 if the viewing machine has a mouse-wheel (buttons 4 5)
15930 but the x11vnc side does not, these will do scrolls:
15931 -buttonmap 12345-123:Prior::Next:
15932 -buttonmap 12345-123:Up+Up+Up::Down+Down+Down:
15933
15934 See <X11/keysymdef.h> header file for a list of Keysyms,
15935 or use the xev(1) program. Note: mapping of button
15936 clicks to Keysyms may not work if -modtweak or -xkb is
15937 needed for the Keysym.
15938
15939 If you include a modifier like "Shift_L" the
15940 modifier's up/down state is toggled, e.g. to send
15941 "The" use :Shift_L+t+Shift_L+h+e: (the 1st one is
15942 shift down and the 2nd one is shift up). (note: the
15943 initial state of the modifier is ignored and not reset)
15944 To include button events use "Button1", ... etc.
15945
15946 -buttonmap currently does not work on MacOSX console
15947 or in -rawfb mode.
15948
15949 Workaround: use -buttonmap IJ...-LM...=n to limit the
15950 number of mouse buttons to n, e.g. 123-123=3. This will
15951 prevent x11vnc from crashing if the X server reports
15952 there are 5 buttons (4/5 scroll wheel), but there are
15953 only really 3.
15954
15955 -nodragging Do not update the display during mouse dragging events
15956 (mouse button held down). Greatly improves response on
15957 slow setups, but you lose all visual feedback for drags,
15958 text selection, and some menu traversals. It overrides
15959 any -pointer_mode setting.
15960
15961 -ncache n Client-side caching scheme. Framebuffer memory "n"
15962 (an integer) times that of the full display is allocated
15963 below the actual framebuffer to cache screen contents
15964 for rapid retrieval. So a W x H frambuffer is expanded
15965 to a W x (n+1)*H one. Use 0 to disable.
15966
15967 The "n" is actually optional, the default is 10.
15968
15969 For this and the other -ncache* options below you can
15970 abbreviate "-ncache" with "-nc". Also, "-nonc"
15971 is the same as "-ncache 0"
15972
15973 This is an experimental option, currently implemented in
15974 an awkward way in that in the VNC Viewer you can see the
15975 pixel cache contents if you scroll down, etc. So you
15976 will have to set things up so you can't see that region.
15977 If this method is successful, the changes required for
15978 clients to do this less awkwardly will be investigated.
15979
15980 The SSVNC viewer does a good job at automatically hiding
15981 the pixel cache region. Or use SSVNC's -ycrop option
15982 to explicitly hide the region.
15983
15984 Note that this mode consumes a huge amount of memory,
15985 both on the x11vnc server side and on the VNC Viewer
15986 side. If n=2 then the amount of RAM used is roughly
15987 tripled for both x11vnc and the VNC Viewer. As a rule
15988 of thumb, note that 1280x1024 at depth 24 is about 5MB
15989 of pixel data.
15990
15991 For reasonable response when cycling through 4 to 6
15992 large (e.g. web browser) windows a value n of 6 to 12
15993 is recommended. (that's right: ~10X more memory...)
15994
15995 Because of the way window backingstore and saveunders
15996 are implemented, n must be even. It will be incremented
15997 by 1 if it is not.
15998
15999 This mode also works for native MacOS X, but may not
16000 be as effective as the X version. This is due to a
16001 number of things, one is the drop-shadow compositing
16002 that leaves extra areas that need to be repaired (see
16003 -ncache_pad). Another is the window iconification
16004 animations need to be avoided (see -macicontime).
16005 It appears the that the 'Scale' animation mode gives
16006 better results than the 'Genie' one. Also, window event
16007 detection not as accurate as the X version.
16008
16009 -ncache_cr In -ncache mode, try to do copyrect opaque window
16010 moves/drags instead of wireframes (this can induce
16011 painting errors). The wireframe will still be used when
16012 moving a window whose save-unders has not yet been set
16013 or has been invalidated.
16014
16015 Some VNC Viewers provide better response than others
16016 with this option. On Unix, realvnc viewer gives
16017 smoother drags than tightvnc viewer. Response may also
16018 be choppy if the server side machine is too slow.
16019
16020 Sometimes on very slow modem connections, this actually
16021 gives an improvement because no pixel data at all
16022 (not even the box animation) is sent during the drag.
16023
16024 -ncache_no_moveraise In -ncache mode, do not assume that moving a window
16025 will cause the window manager to raise it to the top
16026 of the stack. The default is to assume it does, and
16027 so at the beginning of any wireframe, etc, window moves
16028 the window will be pushed to top in the VNC viewer.
16029
16030 -ncache_no_dtchange In -ncache mode, do not try to guess when the desktop
16031 (viewport) changes to another one (i.e. another
16032 workarea). The default is to try to guess and when
16033 detected try to make the transistion more smoothly.
16034
16035 -ncache_no_rootpixmap In -ncache mode, do not try to snapshot the desktop
16036 background to use in guessing or reconstructing window
16037 save-unders.
16038
16039 -ncache_keep_anims In -ncache mode, do not try to disable window
16040 manager animations and other effects (that usually
16041 degrade ncache performance or cause painting errors).
16042 The default is to try to disable them on KDE (but not
16043 GNOME) when VNC clients are connected.
16044
16045 For other window managers or desktops that provide
16046 animations, effects, compositing, translucency,
16047 etc. that interfere with the -ncache method you will
16048 have to disable them manually.
16049
16050 -ncache_old_wm In -ncache mode, enable some heuristics for old style
16051 window managers such as fvwm and twm.
16052
16053 -ncache_pad n In -ncache mode, pad each window with n pixels for the
16054 caching rectangles. This can be used to try to improve
16055 the situation with dropshadows or other compositing
16056 (e.g. MacOS X window manager), although it could make
16057 things worse. The default is 0 on Unix and 24 on
16058 MacOS X.
16059 -debug_ncache Turn on debugging and profiling output under -ncache.
16060
16061 -wireframe [str] Try to detect window moves or resizes when a mouse
16062 -nowireframe button is held down and show a wireframe instead of
16063 the full opaque window. This is based completely on
16064 heuristics and may not always work: it depends on your
16065 window manager and even how you move things around.
16066 See -pointer_mode below for discussion of the "bogging
16067 down" problem this tries to avoid.
16068 Default: -wireframe
16069
16070 Shorter aliases: -wf [str] and -nowf
16071
16072 The value "str" is optional and, of course, is
16073 packed with many tunable parameters for this scheme:
16074
16075 Format: shade,linewidth,percent,T+B+L+R,mod,t1+t2+t3+t4
16076 Default: 0xff,2,0,32+8+8+8,all,0.15+0.30+5.0+0.125
16077
16078 If you leave nothing between commas: ",," the default
16079 value is used. If you don't specify enough commas,
16080 the trailing parameters are set to their defaults.
16081
16082 "shade" indicate the "color" for the wireframe,
16083 usually a greyscale: 0-255, however for 16 and 32bpp you
16084 can specify an rgb.txt X color (e.g. "dodgerblue") or
16085 a value > 255 is treated as RGB (e.g. red is 0xff0000).
16086 "linewidth" sets the width of the wireframe in pixels.
16087 "percent" indicates to not apply the wireframe scheme
16088 to windows with area less than this percent of the
16089 full screen.
16090
16091 "T+B+L+R" indicates four integers for how close in
16092 pixels the pointer has to be from the Top, Bottom, Left,
16093 or Right edges of the window to consider wireframing.
16094 This is a speedup to quickly exclude a window from being
16095 wireframed: set them all to zero to not try the speedup
16096 (scrolling and selecting text will likely be slower).
16097
16098 "mod" specifies if a button down event in the
16099 interior of the window with a modifier key (Alt, Shift,
16100 etc.) down should indicate a wireframe opportunity.
16101 It can be "0" or "none" to skip it, "1" or "all"
16102 to apply it to any modifier, or "Shift", "Alt",
16103 "Control", "Meta", "Super", or "Hyper" to only
16104 apply for that type of modifier key.
16105
16106 "t1+t2+t3+t4" specify four floating point times in
16107 seconds: t1 is how long to wait for the pointer to move,
16108 t2 is how long to wait for the window to start moving
16109 or being resized (for some window managers this can be
16110 rather long), t3 is how long to keep a wireframe moving
16111 before repainting the window. t4 is the minimum time
16112 between sending wireframe "animations". If a slow
16113 link is detected, these values may be automatically
16114 changed to something better for a slow link.
16115
16116 -nowireframelocal By default, mouse motion and button presses of a
16117 user sitting at the LOCAL display are monitored for
16118 wireframing opportunities (so that the changes will be
16119 sent efficiently to the VNC clients). Use this option
16120 to disable this behavior.
16121
16122 -wirecopyrect mode Since the -wireframe mechanism evidently tracks moving
16123 -nowirecopyrect windows accurately, a speedup can be obtained by
16124 telling the VNC viewers to locally copy the translated
16125 window region. This is the VNC CopyRect encoding:
16126 the framebuffer update doesn't need to send the actual
16127 new image data.
16128
16129 Shorter aliases: -wcr [mode] and -nowcr
16130
16131 "mode" can be "never" (same as -nowirecopyrect)
16132 to never try the copyrect, "top" means only do it if
16133 the window was not covered by any other windows, and
16134 "always" means to translate the orginally unobscured
16135 region (this may look odd as the remaining pieces come
16136 in, but helps on a slow link). Default: "always"
16137
16138 Note: there can be painting errors or slow response
16139 when using -scale so you may want to disable CopyRect
16140 in this case "-wirecopyrect never" on the command
16141 line or by remote-control. Or you can also use the
16142 "-scale xxx:nocr" scale option.
16143
16144 -debug_wireframe Turn on debugging info printout for the wireframe
16145 heuristics. "-dwf" is an alias. Specify multiple
16146 times for more output.
16147
16148 -scrollcopyrect mode Like -wirecopyrect, but use heuristics to try to guess
16149 -noscrollcopyrect if a window has scrolled its contents (either vertically
16150 or horizontally). This requires the RECORD X extension
16151 to "snoop" on X applications (currently for certain
16152 XCopyArea and XConfigureWindow X protocol requests).
16153 Examples: Hitting <Return> in a terminal window when the
16154 cursor was at the bottom, the text scrolls up one line.
16155 Hitting <Down> arrow in a web browser window, the web
16156 page scrolls up a small amount. Or scrolling with a
16157 scrollbar or mouse wheel.
16158
16159 Shorter aliases: -scr [mode] and -noscr
16160
16161 This scheme will not always detect scrolls, but when
16162 it does there is a nice speedup from using the VNC
16163 CopyRect encoding (see -wirecopyrect). The speedup
16164 is both in reduced network traffic and reduced X
16165 framebuffer polling/copying. On the other hand, it may
16166 induce undesired transients (e.g. a terminal cursor
16167 being scrolled up when it should not be) or other
16168 painting errors (window tearing, bunching-up, etc).
16169 These are automatically repaired in a short period
16170 of time. If this is unacceptable disable the feature
16171 with -noscrollcopyrect.
16172
16173 Screen clearing kludges: for testing at least, there
16174 are some "magic key sequences" (must be done in less
16175 than 1 second) to aid repairing painting errors that
16176 may be seen when using this mode:
16177
16178 3 Alt_L's in a row: resend whole screen,
16179 4 Alt_L's in a row: reread and resend whole screen,
16180 3 Super_L's in a row: mark whole screen for polling,
16181 4 Super_L's in a row: reset RECORD context,
16182 5 Super_L's in a row: try to push a black screen
16183
16184 note: Alt_L is the Left "Alt" key (a single key)
16185 Super_L is the Left "Super" key (Windows flag).
16186 Both of these are modifier keys, and so should not
16187 generate characters when pressed by themselves. Also,
16188 your VNC viewer may have its own refresh hot-key
16189 or button.
16190
16191 "mode" can be "never" (same as -noscrollcopyrect)
16192 to never try the copyrect, "keys" means to try it
16193 in response to keystrokes only, "mouse" means to
16194 try it in response to mouse events only, "always"
16195 means to do both. Default: "always"
16196
16197 Note: there can be painting errors or slow response
16198 when using -scale so you may want to disable CopyRect
16199 in this case "-scrollcopyrect never" on the command
16200 line or by remote-control. Or you can also use the
16201 "-scale xxx:nocr" scale option.
16202
16203 -scr_area n Set the minimum area in pixels for a rectangle
16204 to be considered for the -scrollcopyrect detection
16205 scheme. This is to avoid wasting the effort on small
16206 rectangles that would be quickly updated the normal way.
16207 E.g. suppose an app updated the position of its skinny
16208 scrollbar first and then shifted the large panel
16209 it controlled. We want to be sure to skip the small
16210 scrollbar and get the large panel. Default: 60000
16211
16212 -scr_skip list Skip scroll detection for applications matching
16213 the comma separated list of strings in "list".
16214 Some applications implement their scrolling in
16215 strange ways where the XCopyArea, etc, also applies
16216 to invisible portions of the window: if we CopyRect
16217 those areas it looks awful during the scroll and
16218 there may be painting errors left after the scroll.
16219 Soffice.bin is the worst known offender.
16220
16221 Use "##" to denote the start of the application class
16222 (e.g. "##XTerm") and "++" to denote the start
16223 of the application instance name (e.g. "++xterm").
16224 The string your list is matched against is of the form
16225 "^^WM_NAME##Class++Instance<same-for-any-subwindows>"
16226 The "xlsclients -la" command will provide this info.
16227
16228 If a pattern is prefixed with "KEY:" it only applies
16229 to Keystroke generated scrolls (e.g. Up arrow). If it
16230 is prefixed with "MOUSE:" it only applies to Mouse
16231 induced scrolls (e.g. dragging on a scrollbar).
16232 Default: ##Soffice.bin,##StarOffice,##OpenOffice
16233
16234 -scr_inc list Opposite of -scr_skip: this list is consulted first
16235 and if there is a match the window will be monitored
16236 via RECORD for scrolls irrespective of -scr_skip.
16237 Use -scr_skip '*' to skip anything that does not match
16238 your -scr_inc. Use -scr_inc '*' to include everything.
16239
16240 -scr_keys list For keystroke scroll detection, only apply the RECORD
16241 heuristics to the comma separated list of keysyms in
16242 "list". You may find the RECORD overhead for every
16243 one of your keystrokes disrupts typing too much, but you
16244 don't want to turn it off completely with "-scr mouse"
16245 and -scr_parms does not work or is too confusing.
16246
16247 The listed keysyms can be numeric or the keysym
16248 names in the <X11/keysymdef.h> header file or from the
16249 xev(1) program. Example: "-scr_keys Up,Down,Return".
16250 One probably wants to have application specific lists
16251 (e.g. for terminals, etc) but that is too icky to think
16252 about for now...
16253
16254 If "list" begins with the "-" character the list
16255 is taken as an exclude list: all keysyms except those
16256 list will be considered. The special string "builtin"
16257 expands to an internal list of keysyms that are likely
16258 to cause scrolls. BTW, by default modifier keys,
16259 Shift_L, Control_R, etc, are skipped since they almost
16260 never induce scrolling by themselves.
16261
16262 -scr_term list Yet another cosmetic kludge. Apply shell/terminal
16263 heuristics to applications matching comma separated
16264 list (same as for -scr_skip/-scr_inc). For example an
16265 annoying transient under scroll detection is if you
16266 hit Enter in a terminal shell with full text window,
16267 the solid text cursor block will be scrolled up.
16268 So for a short time there are two (or more) block
16269 cursors on the screen. There are similar scenarios,
16270 (e.g. an output line is duplicated).
16271
16272 These transients are induced by the approximation of
16273 scroll detection (e.g. it detects the scroll, but not
16274 the fact that the block cursor was cleared just before
16275 the scroll). In nearly all cases these transient errors
16276 are repaired when the true X framebuffer is consulted
16277 by the normal polling. But they are distracting, so
16278 what this option provides is extra "padding" near the
16279 bottom of the terminal window: a few extra lines near
16280 the bottom will not be scrolled, but rather updated
16281 from the actual X framebuffer. This usually reduces
16282 the annoying artifacts. Use "none" to disable.
16283 Default: "term"
16284
16285 -scr_keyrepeat lo-hi If a key is held down (or otherwise repeats rapidly) and
16286 this induces a rapid sequence of scrolls (e.g. holding
16287 down an Arrow key) the "scrollcopyrect" detection
16288 and overhead may not be able to keep up. A time per
16289 single scroll estimate is performed and if that estimate
16290 predicts a sustainable scrollrate of keys per second
16291 between "lo" and "hi" then repeated keys will be
16292 DISCARDED to maintain the scrollrate. For example your
16293 key autorepeat may be 25 keys/sec, but for a large
16294 window or slow link only 8 scrolls per second can be
16295 sustained, then roughly 2 out of every 3 repeated keys
16296 will be discarded during this period. Default: "4-20"
16297
16298 -scr_parms string Set various parameters for the scrollcopyrect mode.
16299 The format is similar to that for -wireframe and packed
16300 with lots of parameters:
16301
16302 Format: T+B+L+R,t1+t2+t3,s1+s2+s3+s4+s5
16303 Default: 0+64+32+32,0.02+0.10+0.9,0.03+0.06+0.5+0.1+5.0
16304
16305 If you leave nothing between commas: ",," the default
16306 value is used. If you don't specify enough commas,
16307 the trailing parameters are set to their defaults.
16308
16309 "T+B+L+R" indicates four integers for how close in
16310 pixels the pointer has to be from the Top, Bottom, Left,
16311 or Right edges of the window to consider scrollcopyrect.
16312 If -wireframe overlaps it takes precedence. This is a
16313 speedup to quickly exclude a window from being watched
16314 for scrollcopyrect: set them all to zero to not try
16315 the speedup (things like selecting text will likely
16316 be slower).
16317
16318 "t1+t2+t3" specify three floating point times in
16319 seconds that apply to scrollcopyrect detection with
16320 *Keystroke* input: t1 is how long to wait after a key
16321 is pressed for the first scroll, t2 is how long to keep
16322 looking after a Keystroke scroll for more scrolls.
16323 t3 is how frequently to try to update surrounding
16324 scrollbars outside of the scrolling area (0.0 to
16325 disable)
16326
16327 "s1+s2+s3+s4+s5" specify five floating point times
16328 in seconds that apply to scrollcopyrect detection with
16329 *Mouse* input: s1 is how long to wait after a mouse
16330 button is pressed for the first scroll, s2 is how long
16331 to keep waiting for additional scrolls after the first
16332 Mouse scroll was detected. s3 is how frequently to
16333 try to update surrounding scrollbars outside of the
16334 scrolling area (0.0 to disable). s4 is how long to
16335 buffer pointer motion (to try to get fewer, bigger
16336 mouse scrolls). s5 is the maximum time to spend just
16337 updating the scroll window without updating the rest
16338 of the screen.
16339
16340 -fixscreen string Periodically "repair" the screen based on settings
16341 in "string". Hopefully you won't need this option,
16342 it is intended for cases when the -scrollcopyrect or
16343 -wirecopyrect features leave too many painting errors,
16344 but it can be used for any scenario. This option
16345 periodically performs costly operations and so
16346 interactive response may be reduced when it is on.
16347 You can use 3 Alt_L's (the Left "Alt" key) taps in
16348 a row (as described under -scrollcopyrect) instead to
16349 manually request a screen repaint when it is needed.
16350
16351 "string" is a comma separated list of one or more of
16352 the following: "V=t", "C=t", "X=t", and "8=t".
16353 In these "t" stands for a time in seconds (it is
16354 a floating point even though one should usually use
16355 values > 2 to avoid wasting resources). V sets how
16356 frequently the entire screen should be sent to viewers
16357 (it is like the 3 Alt_L's). C sets how long to wait
16358 after a CopyRect to repaint the full screen. X sets
16359 how frequently to reread the full X11 framebuffer from
16360 the X server and push it out to connected viewers.
16361 Use of X should be rare, please report a bug if you
16362 find you need it. 8= applies only for -8to24 mode: it
16363 sets how often the non-default visual regions of the
16364 screen (e.g. 8bpp windows) are refreshed. Examples:
16365 -fixscreen V=10 -fixscreen C=10
16366
16367 -debug_scroll Turn on debugging info printout for the scroll
16368 heuristics. "-ds" is an alias. Specify it multiple
16369 times for more output.
16370
16371 -noxrecord Disable any use of the RECORD extension. This is
16372 currently used by the -scrollcopyrect scheme and to
16373 monitor X server grabs.
16374
16375 -grab_buster Some of the use of the RECORD extension can leave a
16376 -nograb_buster tiny window for XGrabServer deadlock. This is only if
16377 the whole-server grabbing application expects mouse or
16378 keyboard input before releasing the grab. It is usually
16379 a window manager that does this. x11vnc takes care to
16380 avoid the problem, but if caught x11vnc will freeze.
16381 Without -grab_buster, the only solution is to go the
16382 physical display and give it some input to satisfy the
16383 grabbing app. Or manually kill and restart the window
16384 manager if that is feasible. With -grab_buster, x11vnc
16385 will fork a helper thread and if x11vnc appears to be
16386 stuck in a grab after a period of time (20-30 sec) then
16387 it will inject some user input: button clicks, Escape,
16388 mouse motion, etc to try to break the grab. If you
16389 experience a lot of grab deadlock, please report a bug.
16390
16391 -debug_grabs Turn on debugging info printout with respect to
16392 XGrabServer() deadlock for -scrollcopyrect mode.
16393
16394 -debug_sel Turn on debugging info printout with respect to
16395 PRIMARY, CLIPBOARD, and CUTBUFFER0 selections.
16396
16397 -pointer_mode n Various pointer motion update schemes. "-pm" is
16398 an alias. The problem is pointer motion can cause
16399 rapid changes on the screen: consider the rapid
16400 changes when you drag a large window around opaquely.
16401 Neither x11vnc's screen polling and vnc compression
16402 routines nor the bandwidth to the vncviewers can keep
16403 up these rapid screen changes: everything will bog down
16404 when dragging or scrolling. So a scheme has to be used
16405 to "eat" much of that pointer input before re-polling
16406 the screen and sending out framebuffer updates. The
16407 mode number "n" can be 0 to 4 and selects one of
16408 the schemes desribed below.
16409
16410 Note that the -wireframe and -scrollcopyrect modes
16411 complement -pointer_mode by detecting (and improving)
16412 certain periods of "rapid screen change".
16413
16414 n=0: does the same as -nodragging. (all screen polling
16415 is suspended if a mouse button is pressed.)
16416
16417 n=1: was the original scheme used to about Jan 2004:
16418 it basically just skips -input_skip keyboard or pointer
16419 events before repolling the screen.
16420
16421 n=2 is an improved scheme: by watching the current rate
16422 of input events it tries to detect if it should try to
16423 "eat" additional pointer events before continuing.
16424
16425 n=3 is basically a dynamic -nodragging mode: it detects
16426 when the mouse motion has paused and then refreshes
16427 the display.
16428
16429 n=4 attempts to measures network rates and latency,
16430 the video card read rate, and how many tiles have been
16431 changed on the screen. From this, it aggressively tries
16432 to push screen "frames" when it decides it has enough
16433 resources to do so. NOT FINISHED.
16434
16435 The default n is 2. Note that modes 2, 3, 4 will skip
16436 -input_skip keyboard events (but it will not count
16437 pointer events). Also note that these modes are not
16438 available in -threads mode which has its own pointer
16439 event handling mechanism.
16440
16441 To try out the different pointer modes to see which
16442 one gives the best response for your usage, it is
16443 convenient to use the remote control function, for
16444 example "x11vnc -R pm:4" or the tcl/tk gui (Tuning ->
16445 pointer_mode -> n).
16446
16447 -input_skip n For the pointer handling when non-threaded: try to
16448 read n user input events before scanning display. n < 0
16449 means to act as though there is always user input.
16450 Default: 10
16451
16452 -allinput Have x11vnc read and process all available client input
16453 before proceeding.
16454
16455 -input_eagerly Similar to -allinput but use the handleEventsEagerly
16456 mechanism built into LibVNCServer.
16457
16458 -speeds rd,bw,lat x11vnc tries to estimate some speed parameters that
16459 are used to optimize scheduling (e.g. -pointer_mode
16460 4, -wireframe, -scrollcopyrect) and other things.
16461 Use the -speeds option to set these manually.
16462 The triple "rd,bw,lat" corresponds to video h/w
16463 read rate in MB/sec, network bandwidth to clients in
16464 KB/sec, and network latency to clients in milliseconds,
16465 respectively. If a value is left blank, e.g. "-speeds
16466 ,100,15", then the internal scheme is used to estimate
16467 the empty value(s).
16468
16469 Typical PC video cards have read rates of 5-10 MB/sec.
16470 If the framebuffer is in main memory instead of video
16471 h/w (e.g. SunRay, shadowfb, dummy driver, Xvfb), the
16472 read rate may be much faster. "x11perf -getimage500"
16473 can be used to get a lower bound (remember to factor
16474 in the bytes per pixel). It is up to you to estimate
16475 the network bandwith and latency to clients. For the
16476 latency the ping(1) command can be used.
16477
16478 For convenience there are some aliases provided,
16479 e.g. "-speeds modem". The aliases are: "modem" for
16480 6,4,200; "dsl" for 6,100,50; and "lan" for 6,5000,1
16481
16482 -wmdt string For some features, e.g. -wireframe and -scrollcopyrect,
16483 x11vnc has to work around issues for certain window
16484 managers or desktops (currently kde and xfce).
16485 By default it tries to guess which one, but it can
16486 guess incorrectly. Use this option to indicate which
16487 wm/dt. "string" can be "gnome", "kde", "cde",
16488 "xfce", or "root" (classic X wm). Anything else
16489 is interpreted as "root".
16490
16491 -debug_pointer Print debugging output for every pointer event.
16492 -debug_keyboard Print debugging output for every keyboard event.
16493 Same as -dp and -dk, respectively. Use multiple
16494 times for more output.
16495
16496 -defer time Time in ms to delay sending updates to connected clients
16497 (deferUpdateTime) Default: 20
16498
16499 -wait time Time in ms to pause between screen polls. Used to cut
16500 down on load. Default: 20
16501
16502 -extra_fbur n Perform extra FrameBufferUpdateRequests checks to
16503 try to be in better sync with the client's requests.
16504 What this does is perform extra polls of the client
16505 socket at critical times (before '-defer' and '-wait'
16506 calls.) The default is n=1. Set to a larger number to
16507 insert more checks or set to n=0 to disable. A downside
16508 of these extra calls is that more mouse input may be
16509 processed than desired.
16510
16511 -wait_ui factor Factor by which to cut the -wait time if there
16512 has been recent user input (pointer or keyboard).
16513 Improves response, but increases the load whenever you
16514 are moving the mouse or typing. Default: 2.00
16515 -setdefer n When the -wait_ui mechanism cuts down the wait time ms,
16516 set the defer time to the same ms value. n=1 to enable,
16517 0 to disable, and -1 to set defer to 0 (no delay).
16518 Similarly, 2 and -2 indicate 'urgent_update' mode should
16519 be used to push the updates even sooner. Default: 1
16520 -nowait_bog Do not detect if the screen polling is "bogging down"
16521 and sleep more. Some activities with no user input can
16522 slow things down a lot: consider a large terminal window
16523 with a long build running in it continuously streaming
16524 text output. By default x11vnc will try to detect this
16525 (3 screen polls in a row each longer than 0.25 sec with
16526 no user input), and sleep up to 1.5 secs to let things
16527 "catch up". Use this option to disable that detection.
16528 -slow_fb time Floating point time in seconds to delay all screen
16529 polling. For special purpose usage where a low frame
16530 rate is acceptable and desirable, but you want the
16531 user input processed at the normal rate so you cannot
16532 use -wait.
16533 -xrefresh time Floating point time in seconds to indicate how often to
16534 do the equivalent of xrefresh(1) to force all windows
16535 (in the viewable area if -id, -sid, or -clip is used)
16536 to repaint themselves. Use this only if applications
16537 misbehave by not repainting themselves properly.
16538 See also -noxdamage.
16539 -nap Monitor activity and if it is low take longer naps
16540 -nonap between screen polls to really cut down load when idle.
16541 Default: take naps
16542 -sb time Time in seconds after NO activity (e.g. screen blank)
16543 to really throttle down the screen polls (i.e. sleep
16544 for about 1.5 secs). Use 0 to disable. Default: 60
16545 Set the env. var. X11VNC_SB_FACTOR to scale it.
16546
16547 -readtimeout n Set LibVNCServer rfbMaxClientWait to n seconds. On
16548 slow links that take a long time to paint the first
16549 screen LibVNCServer may hit the timeout and drop the
16550 connection. Default: 20 seconds.
16551 -ping n Send a 1x1 framebuffer update to all clients every n
16552 seconds (e.g. to try to keep a network connection alive)
16553
16554 -nofbpm If the system supports the FBPM (Frame Buffer Power
16555 -fbpm Management) extension (i.e. some Sun systems), then
16556 prevent the video h/w from going into a reduced power
16557 state when VNC clients are connected.
16558
16559 FBPM capable video h/w save energy when the workstation
16560 is idle by going into low power states (similar to DPMS
16561 for monitors). This interferes with x11vnc's polling
16562 of the framebuffer data.
16563
16564 "-nofbpm" means prevent FBPM low power states whenever
16565 VNC clients are connected, while "-fbpm" means to not
16566 monitor the FBPM state at all. See the xset(1) manpage
16567 for details. -nofbpm is basically the same as running
16568 "xset fbpm force on" periodically. Default: -fbpm
16569
16570 -nodpms If the system supports the DPMS (Display Power Managemen
16571 t
16572 -dpms Signaling) extension, then prevent the monitor from
16573 going into a reduced power state when VNC clients
16574 are connected.
16575
16576 DPMS reduced power monitor states are a good thing
16577 and you normally want the power down to take place
16578 (usually x11vnc has no problem exporting the display in
16579 this state). You probably only want to use "-nodpms"
16580 to work around problems with Screen Savers kicking
16581 on in DPMS low power states. There is known problem
16582 with kdesktop_lock on KDE where the screen saver keeps
16583 kicking in every time user input stops for a second
16584 or two. Specifying "-nodpms" works around it.
16585
16586 "-nodpms" means prevent DPMS low power states whenever
16587 VNC clients are connected, while "-dpms" means to not
16588 monitor the DPMS state at all. See the xset(1) manpage
16589 for details. -nodpms is basically the same as running
16590 "xset dpms force on" periodically. Default: -dpms
16591
16592 -forcedpms If the system supports the DPMS (Display Power
16593 Management Signaling) extension, then try to keep the
16594 monitor in a powered off state. This is to prevent
16595 nosey people at the physical display from viewing what
16596 is on the screen. Be sure to lock the screen before
16597 disconnecting.
16598
16599 This method is far from bullet proof, e.g. suppose
16600 someone attaches a non-DPMS monitor, or loads the
16601 machine so that there is a gap of time before x11vnc
16602 restores the powered off state? On many machines if
16603 he floods it with keyboard and mouse input he can see
16604 flashes of what is on the screen before the DPMS off
16605 state is reestablished. For this to work securely
16606 there would need to be support in the X server to do
16607 this exactly rather than approximately with DPMS.
16608
16609 -clientdpms As -forcedpms but only when VNC clients are connected.
16610
16611 -noserverdpms The UltraVNC ServerInput extension is supported.
16612 This allows the VNC viewer to click a button that will
16613 cause the server (x11vnc) to try to disable keyboard
16614 and mouse input at the physical display and put the
16615 monitor in dpms powered off state. Use this option to
16616 skip powering off the monitor.
16617
16618 -noultraext Disable the following UltraVNC extensions: SingleWindow
16619 and ServerInput. The others managed by LibVNCServer
16620 (textchat, 1/n scaling, rfbEncodingUltra) are not.
16621
16622 -chatwindow Place a local UltraVNC chat window on the X11 display
16623 that x11vnc is polling. That way the person on the VNC
16624 viewer-side can chat with the person at the physical
16625 X11 console. (e.g. helpdesk w/o telephone)
16626
16627 For this to work the SSVNC package (version 1.0.21 or
16628 later) MUST BE installed on the system where x11vnc runs
16629 and the 'ssvnc' command must be available in $PATH.
16630 The ssvncviewer is used as a chat window helper.
16631 See http://www.karlrunge.com/x11vnc/ssvnc.html
16632
16633 This option implies '-rfbversion 3.6' so as to trick
16634 UltraVNC viewers, otherwise they assume chat is not
16635 available. To specify a different rfbversion, place
16636 it after the -chatwindow option on the cmdline.
16637
16638 See also the remote control 'chaton' and 'chatoff'
16639 actions. These can also be set from the tkx11vnc GUI.
16640
16641 -noxdamage Do not use the X DAMAGE extension to detect framebuffer
16642 changes even if it is available. Use -xdamage if your
16643 default is to have it off.
16644
16645 x11vnc's use of the DAMAGE extension: 1) significantly
16646 reduces the load when the screen is not changing much,
16647 and 2) detects changed areas (small ones by default)
16648 more quickly.
16649
16650 Currently the DAMAGE extension is overly conservative
16651 and often reports large areas (e.g. a whole terminal
16652 or browser window) as damaged even though the actual
16653 changed region is much smaller (sometimes just a few
16654 pixels). So heuristics were introduced to skip large
16655 areas and use the damage rectangles only as "hints"
16656 for the traditional scanline polling. The following
16657 tuning parameters are introduced to adjust this
16658 behavior:
16659
16660 -xd_area A Set the largest DAMAGE rectangle area "A" (in
16661 pixels: width * height) to trust as truly damaged:
16662 the rectangle will be copied from the framebuffer
16663 (slow) no matter what. Set to zero to trust *all*
16664 rectangles. Default: 20000
16665 -xd_mem f Set how long DAMAGE rectangles should be "remembered",
16666 "f" is a floating point number and is in units of the
16667 scanline repeat cycle time (32 iterations). The default
16668 (1.0) should give no painting problems. Increase it if
16669 there are problems or decrease it to live on the edge
16670 (perhaps useful on a slow machine).
16671
16672 -sigpipe string Broken pipe (SIGPIPE) handling. "string" can be
16673 "ignore" or "exit". For "ignore" LibVNCServer
16674 will handle the abrupt loss of a client and continue,
16675 for "exit" x11vnc will cleanup and exit at the 1st
16676 broken connection.
16677
16678 This option is not really needed since LibVNCServer
16679 is doing the correct thing now for quite some time.
16680 However, for convenience you can use it to ignore other
16681 signals, e.g. "-sigpipe ignore:HUP,INT,TERM" in case
16682 that would be useful for some sort of application.
16683 You can also put "exit:.." in the list to have x11vnc
16684 cleanup on the listed signals. "-sig" is an alias
16685 for this option if you don't like the 'pipe'. Example:
16686 -sig ignore:INT,TERM,exit:USR1
16687
16688 -threads Whether or not to use the threaded LibVNCServer
16689 -nothreads algorithm [rfbRunEventLoop] if libpthread is available.
16690 In this mode new threads (one for input and one
16691 for output) are created to handle each new client.
16692 Default: -nothreads.
16693
16694 Thread stability is much improved in version 0.9.8.
16695
16696 Multiple clients in threaded mode should be stable
16697 for the ZRLE encoding on all platforms. The Tight and
16698 Zlib encodings are currently only stable on Linux for
16699 multiple clients. Compile with -DTLS=__thread if your
16700 OS and compiler and linker support it.
16701
16702 For resizes (randr, etc.) set this env. var. to the numb
16703 er
16704 of milliseconds to sleep: X11VNC_THREADS_NEW_FB_SLEEP
16705 at various places in the do_new_fb() action. This is to
16706 let various activities settle. Default is about 500ms.
16707
16708 Multiple clients in threaded mode could yield better
16709 performance for 'class-room' broadcasting usage; also in
16710 -appshare broadcast mode. See also the -reflect option.
16711
16712 -fs f If the fraction of changed tiles in a poll is greater
16713 than f, the whole screen is updated. Default: 0.75
16714 -gaps n Heuristic to fill in gaps in rows or cols of n or
16715 less tiles. Used to improve text paging. Default: 4
16716 -grow n Heuristic to grow islands of changed tiles n or wider
16717 by checking the tile near the boundary. Default: 3
16718 -fuzz n Tolerance in pixels to mark a tiles edges as changed.
16719 Default: 2
16720 -debug_tiles Print debugging output for tiles, fb updates, etc.
16721
16722 -snapfb Instead of polling the X display framebuffer (fb)
16723 for changes, periodically copy all of X display fb
16724 into main memory and examine that copy for changes.
16725 (This setting also applies for non-X -rawfb modes).
16726 Under some circumstances this will improve interactive
16727 response, or at least make things look smoother, but in
16728 others (most!) it will make the response worse. If the
16729 video h/w fb is such that reading small tiles is very
16730 slow this mode could help. To keep the "framerate"
16731 up the screen size x bpp cannot be too large. Note that
16732 this mode is very wasteful of memory I/O resources
16733 (it makes full screen copies even if nothing changes).
16734 It may be of use in video capture-like applications,
16735 webcams, or where window tearing is a problem.
16736
16737 -rawfb string Instead of polling X, poll the memory object specified
16738 in "string".
16739
16740 For file polling, to memory map mmap(2) a file use:
16741 "map:/path/to/a/file@WxHxB", with framebuffer Width,
16742 Height, and Bits per pixel. "mmap:..." is the
16743 same.
16744
16745 If there is trouble with mmap, use "file:/..."
16746 for slower lseek(2) based reading.
16747
16748 Use "snap:..." to imply -snapfb mode and the "file:"
16749 access (this is for unseekable devices that only provide
16750 the fb all at once, e.g. a video camera provides the
16751 whole frame).
16752
16753 For shared memory segments string is of the form:
16754 "shm:N@WxHxB" which specifies a shmid N and with
16755 WxHxB as above. See shmat(1) and ipcs(1)
16756
16757 If you do not supply a type "map" is assumed if
16758 the file exists (see the next paragraphs for some
16759 exceptions to this.)
16760
16761 If string is "setup:cmd", then the command "cmd"
16762 is run and the first line from it is read and used
16763 as "string". This allows initializing the device,
16764 determining WxHxB, etc. These are often done as root
16765 so take care.
16766
16767 If the string begins with "video", see the VIDEO4LINUX
16768 discussion below where the device may be queried for
16769 (and possibly set) the framebuffer parameters.
16770
16771 If the string begins with "console", "/dev/fb",
16772 "fb", or "vt", see the LINUX CONSOLE discussion
16773 below where the framebuffer device is opened and
16774 keystrokes (and possibly mouse events) are inserted
16775 into the console.
16776
16777 If the string begins with "vnc", see the VNC HOST
16778 discussion below where the framebuffer is taken as that
16779 of another remote VNC server.
16780
16781 Optional suffixes are ":R/G/B" and "+O" to specify
16782 red, green, and blue masks (in hex) and an offset into
16783 the memory object. If the masks are not provided x11vnc
16784 guesses them based on the bpp (if the colors look wrong,
16785 you need to provide the masks.)
16786
16787 Another optional suffix is the Bytes Per Line which in
16788 some cases is not WxB/8. Specify it as WxHxB-BPL
16789 e.g. 800x600x16-2048. This could be a normal width
16790 1024 at 16bpp fb, but only width 800 shows up.
16791
16792 So the full format is: mode:file@WxHxB:R/G/B+O-BPL
16793
16794 Examples:
16795 -rawfb shm:210337933@800x600x32:ff/ff00/ff0000
16796 -rawfb map:/dev/fb0@1024x768x32
16797 -rawfb map:/tmp/Xvfb_screen0@640x480x8+3232
16798 -rawfb file:/tmp/my.pnm@250x200x24+37
16799 -rawfb file:/dev/urandom@128x128x8
16800 -rawfb snap:/dev/video0@320x240x24 -24to32
16801 -rawfb video0
16802 -rawfb video -pipeinput VID
16803 -rawfb console
16804 -rawfb vt2
16805 -rawfb vnc:somehost:0
16806
16807 (see ipcs(1) and fbset(1) for the first two examples)
16808
16809 In general all user input is discarded by default (see
16810 the -pipeinput option for how to use a helper program
16811 to insert). Most of the X11 (screen, keyboard, mouse)
16812 options do not make sense and many will cause this
16813 mode to crash, so please think twice before setting or
16814 changing them in a running x11vnc.
16815
16816 If you DO NOT want x11vnc to close the X DISPLAY in
16817 rawfb mode, prepend a "+" e.g. +file:/dev/fb0...
16818 Keeping the display open enables the default
16819 remote-control channel, which could be useful.
16820 Alternatively, if you specify -noviewonly, then the
16821 mouse and keyboard input are STILL sent to the X
16822 display, this usage should be very rare, i.e. doing
16823 something strange with /dev/fb0.
16824
16825 If the device is not "seekable" (e.g. webcam) try
16826 reading it all at once in full snaps via the "snap:"
16827 mode (note: this is a resource hog). If you are using
16828 file: or map: AND the device needs to be reopened for
16829 *every* snapfb snapshot, set the environment variable:
16830 SNAPFB_RAWFB_RESET=1 as well.
16831
16832 If you want x11vnc to dynamically transform a 24bpp
16833 rawfb to 32bpp (note that this will be slower) also
16834 supply the -24to32 option. This would be useful for,
16835 say, a video camera that delivers the pixel data as
16836 24bpp packed RGB. This is the default under "video"
16837 mode if the bpp is 24.
16838
16839 Normally the bits per pixel, B, is 8, 16, or 32 (or
16840 rarely 24), however there is also some support for
16841 B < 8 (e.g. old graphics displays 4 bpp or 1 bpp).
16842 In this case you certainly must supply the masks as
16843 well: WxHxB:R/G/B. The pixels will be padded out to
16844 8 bpp using depth 8 truecolor. The scheme currently
16845 does not work with snap fb (ask if interested.) B=1
16846 monochrome example: file:/dev/urandom@128x128x1:1/1/1
16847 Some other like this are 128x128x2:3/3/3 128x128x4:7/7/7
16848
16849 For B < 8 framebuffers you can also set the env. var
16850 RAWFB_CGA=1 to try a CGA mapping for B=4 (e.g. linux
16851 vga16fb driver.) Note with low bpp and/or resolution
16852 VGA and VGA16 modes on the Linux console one's attempt
16853 to export them via x11vnc can often be thwarted due to
16854 special color palettes, pixel packings, and even video
16855 painting buffering. OTOH, often experimenting with the
16856 RGB masks can yield something recognizable.
16857
16858 VIDEO4LINUX: on Linux some attempt is made to handle
16859 video devices (webcams or TV tuners) automatically.
16860 The idea is the WxHxB will be extracted from the
16861 device itself. So if you do not supply "@WxHxB...
16862 parameters x11vnc will try to determine them. It first
16863 tries the v4l API if that support has been compiled in.
16864 Otherwise it will run the v4l-info(1) external program
16865 if it is available.
16866
16867 The simplest examples are "-rawfb video" and "-rawfb
16868 video1" which imply the device file /dev/video and
16869 /dev/video1, respectively. You can also supply the
16870 /dev if you like, e.g. "-rawfb /dev/video0"
16871
16872 Since the video capture device framebuffer usually
16873 changes continuously (e.g. brightness fluctuations),
16874 you may want to use the -wait, -slow_fb, or -defer
16875 options to lower the "framerate" to cut down on
16876 network VNC traffic.
16877
16878 A more sophisticated video device scheme allows
16879 initializing the device's settings using:
16880
16881 -rawfb video:<settings>
16882
16883 The prefix could also be, as above, e.g. "video1:" to
16884 specify the device file. The v4l API must be available
16885 for this to work. Otherwise, you will need to try
16886 to initialize the device with an external program,
16887 e.g. xawtv, spcaview, and hope they persist when x11vnc
16888 re-opens the device.
16889
16890 <settings> is a comma separated list of key=value pairs.
16891 The device's brightness, color, contrast, and hue can
16892 be set to percentages, e.g. br=80,co=50,cn=44,hu=60.
16893
16894 The device filename can be set too if needed (if it
16895 does not start with "video"), e.g. fn=/dev/qcam.
16896
16897 The width, height and bpp of the framebuffer can be
16898 set via, e.g., w=160,h=120,bpp=16.
16899
16900 Related to the bpp above, the pixel format can be set
16901 via the fmt=XXX, where XXX can be one of: GREY, HI240,
16902 RGB555, RGB565, RGB24, and RGB32 (with bpp 8, 8, 16, 16,
16903 24, and 32 respectively). See http://www.linuxtv.org
16904 for more info (V4L api).
16905
16906 For TV/rf tuner cards one can set the tuning mode
16907 via tun=XXX where XXX can be one of PAL, NTSC, SECAM,
16908 or AUTO.
16909
16910 One can switch the input channel by the inp=XXX setting,
16911 where XXX is the name of the input channel (Television,
16912 Composite1, S-Video, etc). Use the name that is in the
16913 information about the device that is printed at startup.
16914
16915 For input channels with tuners (e.g. Television) one
16916 can change which station is selected by the sta=XXX
16917 setting. XXX is the station number. Currently only
16918 the ntsc-cable-us (US cable) channels are built into
16919 x11vnc. See the -freqtab option below to supply one
16920 from xawtv. If XXX is greater than 500, then it is
16921 interpreted as a raw frequency in KHz.
16922
16923 Example:
16924
16925 -rawfb video:br=80,w=320,h=240,fmt=RGB32,tun=NTSC,sta=47
16926
16927 one might need to add inp=Television too for the input
16928 channel to be TV if the card doesn't come up by default
16929 in that one.
16930
16931 Note that not all video capture devices will support
16932 all of the above settings.
16933
16934 See the -pipeinput VID option below for a way to control
16935 the settings through the VNC Viewer via keystrokes.
16936 As a shortcut, if the string begins "Video.." instead
16937 of "video.." then -pipeinput VID is implied.
16938
16939 As above, if you specify a "@WxHxB..." after the
16940 <settings> string they are used verbatim: the device
16941 is not queried for the current values. Otherwise the
16942 device will be queried.
16943
16944 LINUX CONSOLE: The following describes some ways to
16945 view and possibly interact with the Linux text/graphics
16946 console (i.e. not X11 XFree86/Xorg)
16947
16948 Note: If the LibVNCServer LinuxVNC program is on your
16949 system you may want to use that instead of the following
16950 method because it will be faster and more accurate
16951 for the Linux text console and includes mouse support.
16952 There is, however, the basic LinuxVNC functionality in
16953 x11vnc if you replace "console" with "vt" in the
16954 examples below.
16955
16956 If the rawfb string begins with "console" the
16957 framebuffer device /dev/fb0 is opened and /dev/tty0 is
16958 opened too. The latter is used to inject keystrokes
16959 (not all are supported, but the basic ones are).
16960 You will need to be root to inject keystrokes, but
16961 not necessarily to open /dev/fb0. /dev/tty0 refers to
16962 the active VT, to indicate one explicitly, use, e.g.,
16963 "console2" for /dev/tty2, etc. by indicating the
16964 specific VT number.
16965
16966 For the Linux framebuffer device, /dev/fb0, (fb1,
16967 etc) to be enabled the appropriate kernel drivers must
16968 be loaded. E.g. vesafb or vga16fb and also by setting
16969 the boot parameter vga=0x301 (or 0x314, 0x317, etc.)
16970 (The vga=... method is the preferred way; set your
16971 machines up that way.) Otherwise there will be a
16972 'No such device' error. You can also load a Linux
16973 framebuffer driver specific to your make of video card
16974 for more functionality. Once the machine is booted one
16975 can often 'modprobe' the fb driver as root to obtain
16976 a framebuffer device.
16977
16978 If you cannot get /dev/fb0 working on Linux, try
16979 using the LinuxVNC emulation mode by "-rawfb vtN"
16980 where N = 1, ... 6 is the Linux Virtual Terminal (aka
16981 virtual console) you wish to view, e.g. "-rawfb vt2".
16982 Unlike /dev/fb mode, it need not be the active Virtual
16983 Terminal. Note that this mode can only show text and
16984 not graphics. x11vnc polls the text in /dev/vcsaN
16985
16986 Set the env. var. RAWFB_VCSA_BW=1 to disable colors in
16987 the "vtN" mode (i.e. black and white only.) If you
16988 do not prefer the default 16bpp set RAWFB_VCSA_BPP to
16989 8 or 32. If you need to tweak the rawfb parameters by
16990 using the 'console_guess' string printed at startup,
16991 be sure to indicate the snap: method.
16992
16993 uinput: If the Linux version appears to be 2.6
16994 or later and the "uinput" module appears to be
16995 present (modprobe uinput), then the uinput method
16996 will be used instead of /dev/ttyN. uinput allows
16997 insertion of BOTH keystrokes and mouse input and so it
16998 preferred when accessing graphical (e.g. QT-embedded)
16999 linux console apps. It also provides more accurate
17000 keystroke insertion. See -pipeinput UINPUT below for
17001 more information on this mode; you will have to use
17002 -pipeinput if you want to tweak any UINPUT parameters.
17003 You may also want to also use the -nodragging and
17004 -cursor none options. Use "console0", etc or
17005 -pipeinput CONSOLE to force the /dev/ttyN method.
17006
17007 Note you can change the Linux VT remotely using the
17008 chvt(1) command to make the one you want be the active
17009 one (e.g. 'chvt 3'). Sometimes switching out and back
17010 corrects the framebuffer's graphics state. For the
17011 "-rawfb vtN" mode there is no need to switch the VT's.
17012
17013 To skip input injecting entirely use "consolex"
17014 or "vtx".
17015
17016 The string "/dev/fb0" (1, etc.) can be used instead
17017 of "console". This can be used to specify a different
17018 framebuffer device, e.g. /dev/fb1. As a shortcut the
17019 "/dev/" can be dropped. If the name is something
17020 nonstandard, use "console:/dev/foofb"
17021
17022 If you do not want x11vnc to guess the framebuffer's
17023 WxHxB and masks automatically (sometimes the kernel
17024 gives incorrect information), specify them with a @WxHxB
17025 (and optional :R/G/B masks) at the end of the string.
17026
17027 Examples:
17028 -rawfb console
17029 -rawfb /dev/fb0 (same)
17030 -rawfb console3 (force /dev/tty3)
17031 -rawfb consolex (no keystrokes or mouse)
17032 -rawfb console:/dev/nonstd
17033 -rawfb console -pipeinput UINPUT:accel=4.0
17034 -rawfb vt3 (/dev/tty3 w/o /dev/fb0)
17035
17036 VNC HOST: if the -rawfb string is of the form
17037 "vnc:host:N" then the VNC display "N" on the remote
17038 VNC server "host" is connected to (i.e. x11vnc acts as
17039 a VNC client itself) and that framebuffer is exported.
17040
17041 This mode is really only of use if you are trying
17042 to improve performance in the case of many (e.g. >
17043 10) simultaneous VNC viewers, and you try a divide
17044 and conquer scheme to reduce bandwidth and improve
17045 responsiveness. (However, another user found this mode
17046 useful to export a demo display through a slow link:
17047 then multiple demo viewers connected to the reflecting
17048 x11vnc on the fast side of the link, and so avoided
17049 all of the demo viewers going through the slow link.)
17050
17051 For example, if there will be 64 simultaneous VNC
17052 viewers this can lead to a lot of redundant VNC traffic
17053 to and from the server host:N, extra CPU usage,
17054 and all viewers response can be reduced by having
17055 to wait for writes to the slowest client to finish.
17056 However, if you set up 8 reflectors/repeaters started
17057 with option -rawfb vnc:host:N, then there are only
17058 8 connections to host:N. Each repeater then handles
17059 8 vnc viewer connections thereby spreading the load
17060 around. In classroom broadcast usage, try to put the
17061 repeaters on different switches. This mode is the same
17062 as -reflect host:N. Replace "host:N" by "listen"
17063 or "listen:port" for a reverse connection.
17064
17065 Overall performance will not be as good as a single
17066 direct connection because, among other things,
17067 there is an additional level of framebuffer polling
17068 and pointer motion can still induce many changes per
17069 second that must be propagated. Tip: if the remote VNC
17070 is x11vnc doing wireframing, or an X display that does
17071 wireframing that gives much better response than opaque
17072 window dragging. Consider the -nodragging option if
17073 the problem is severe.
17074
17075 The env. var. X11VNC_REFLECT_PASSWORD can be set to
17076 the password needed to log into the vnc host server, or
17077 to "file:path_to_file" to indicate a file containing
17078 the password as its first line.
17079
17080 To set the pixel format that x11vnc requests as a VNC
17081 CLIENT set the env. vars: X11VNC_REFLECT_bitsPerSample
17082 X11VNC_REFLECT_samplesPerPixel, and
17083 X11VNC_REFLECT_bytesPerPixel; the defaults are 8, 3, 4.
17084 2, 3, 1 would give a low color mode. See the function
17085 rfbGetClient() in libvncclient for more info.
17086
17087 The VNC HOST mode implies -shared. Use -noshared as
17088 a subsequent cmdline option to disable sharing.
17089
17090 -freqtab file For use with "-rawfb video" for TV tuner devices to
17091 specify station frequencies. Instead of using the built
17092 in ntsc-cable-us mapping of station number to frequency,
17093 use the data in file. For stations that are not
17094 numeric, e.g. SE20, they are placed above the highest
17095 numbered station in the order they are found. Example:
17096 "-freqtab /usr/X11R6/share/xawtv/europe-west.list"
17097 You can make your own freqtab by copying the xawtv
17098 format.
17099
17100 -pipeinput cmd This option lets you supply an external command in
17101 "cmd" that x11vnc will pipe all of the user input
17102 events to in a simple format. In -pipeinput mode by
17103 default x11vnc will not process any of the user input
17104 events. If you prefix "cmd" with "tee:" it will
17105 both send them to the pipe command and process them.
17106 For a description of the format run "-pipeinput
17107 tee:/bin/cat". Another prefix is "reopen" which
17108 means to reopen pipe if it exits. Separate multiple
17109 prefixes with commas.
17110
17111 In combination with -rawfb one might be able to
17112 do amusing things (e.g. control non-X devices).
17113 To facilitate this, if -rawfb is in effect then the
17114 value is stored in X11VNC_RAWFB_STR for the pipe command
17115 to use if it wants. Do 'env | grep X11VNC' for more.
17116
17117 Built-in pipeinput modes (no external program required):
17118
17119 If cmd is "VID" and you are using the -rawfb for a
17120 video capture device, then an internal list of keyboard
17121 mappings is used to set parameters of the video.
17122 The mappings are:
17123
17124 "B" and "b" adjust the brightness up and down.
17125 "H" and "h" adjust the hue.
17126 "C" and "c" adjust the colour.
17127 "N" and "n" adjust the contrast.
17128 "S" and "s" adjust the size of the capture screen.
17129 "I" and "i" cycle through input channels.
17130 Up and Down arrows adjust the station (if a tuner)
17131 F1, F2, ..., F6 will switch the video capture pixel
17132 format to HI240, RGB565, RGB24, RGB32, RGB555, and
17133 GREY respectively. See -rawfb video for details.
17134
17135 If cmd is "CONSOLE" or "CONSOLEn" where n
17136 is a Linux console number, then the linux console
17137 keystroke insertion to /dev/ttyN (see -rawfb console)
17138 is performed.
17139
17140 If cmd begins with "UINPUT" then the Linux uinput
17141 module is used to insert both keystroke and mouse events
17142 to the Linux console (see -rawfb above). This usually
17143 is the /dev/input/uinput device file (you may need to
17144 create it with "mknod /dev/input/uinput c 10 223"
17145 and insert the module with "modprobe uinput".
17146
17147 The UINPUT mode currently only does US keyboards (a
17148 scan code option may be added), and not all keysyms
17149 are supported. But it is probably more accurate than
17150 the "CONSOLE" method.
17151
17152 You may want to use the options -cursor none and
17153 -nodragging in this mode.
17154
17155 Additional tuning options may be supplied via:
17156 UINPUT:opt1,opt2,... (a comma separated list). If an
17157 option begins with "/" it is taken as the uinput
17158 device file.
17159
17160 Which uinput is injected can be controlled by an option
17161 string made of the characters "K", "M", and "B"
17162 (see the -input option), e.g. "KM" allows keystroke
17163 and motion but not button clicks.
17164
17165 A UINPUT option of the form: accel=f, or accel=fx+fy
17166 sets the mouse motion "acceleration". This is used
17167 to correct raw mouse relative motion into how much the
17168 application cursor moves (x11vnc has no control over,
17169 or knowledge of how the windowing application interprets
17170 the raw mouse motions). Typically the acceleration
17171 for an X display is 2 (see xset "m" option). "f"
17172 is a floating point number, e.g. 3.0. Use "fx+fy"
17173 if you need to supply different corrections for x and y.
17174
17175 Note: the default acceleration is 2.0 since it seems
17176 both X and qt-embedded often (but not always) use
17177 this value.
17178
17179 Even with a correct accel setting the mouse position
17180 will get out of sync (probably due to a mouse
17181 "threshold" setting where the acceleration doe not
17182 apply, set xset(1)). The option reset=N sets the
17183 number of ms (default 150) after which the cursor is
17184 attempted to be reset (by forcing the mouse to (0,
17185 0) via small increments and then back out to (x, y)
17186 in 1 jump), This correction seems to be needed but can
17187 cause jerkiness or unexpected behavior with menus, etc.
17188 Use reset=0 to disable.
17189
17190 If you set the env. var X11VNC_UINPUT_THRESHOLDS then
17191 the thresh=n mode will be enabled. It is currently
17192 not working well. If |dx| <= thresh and |dy| < thresh
17193 no acceleration is applied. Use "thresh=+n" |dx| +
17194 |dy| < thresh to be used instead (X11?)
17195
17196 Example:
17197 -pipeinput UINPUT:accel=4.0 -cursor none
17198
17199 If the uinput device has an absolute pointer (as opposed
17200 to a normal mouse that is a relative pointer) you can
17201 specify the option "abs". Note that a touchpad
17202 on a laptop is an absolute device to some degree.
17203 This (usually) avoids all the problems with mouse
17204 acceleration. If x11vnc has trouble deducing the
17205 size of the device, use "abs=WxH". Furthermore,
17206 if the device is a touchscreen (assumed to have an
17207 absolute pointer) use "touch" or "touch=WxH".
17208 For touchscreens, when a mouse button is pressed,
17209 a pressure increase is injected, and when the button
17210 is released a pressure of zero is injected.
17211
17212 If touch has been set, use "touch_always=1" to
17213 indicate whenever the mouse moves with no button
17214 pressed, a touch event of zero pressure should be
17215 sent anyway. Also use "btn_touch=1" to indicate a
17216 BTN_TOUCH keystroke press or release should be sent
17217 instead of a pressure change. Set "dragskip=n" to
17218 skip n dragged mouse touches (with pressure applied)
17219 before injecting one. To indicate the pressure that
17220 should be sent when there is a button click for a
17221 touchscreen device, specify pressure=n, e.g. n=5. The
17222 default is n=1.
17223
17224 If a touch screen is being used ("touch" above)
17225 and it is having its input processed by tslib, you can
17226 specify the tslib calibration file via tslib_cal=<file>.
17227 For example, tslib_cal=/etc/pointercal. To get accurate
17228 or even usable positioning this is required when tslib
17229 is in use.
17230
17231 The Linux uinput mechanism can be bypassed and one can
17232 write input events DIRECTLY to the devices instead.
17233 To do this, specify one or more of the following
17234 for the input classes: direct_rel=<device>
17235 direct_abs=<device> direct_btn=<device> or
17236 direct_key=<device>. The <device> file is usually
17237 something like /dev/input/event1 but you can specify
17238 any device file or pipe. You must specify each one
17239 of the above classes even if they correspond to the
17240 same device file (rel/abs and btn are often the same.)
17241 Look at the file /proc/bus/input/devices to get an idea
17242 what is available and the device filenames. Note:
17243 The /dev/input/mouse* devices do not seem to work,
17244 use the corresponding /dev/input/event* file instead.
17245 Any input class not directly specified as above will be
17246 handled via the uinput mechanism. To disable creating a
17247 uinput device (and thereby discarding unhandled input),
17248 specify "nouinput".
17249
17250 Examples:
17251
17252 -pipeinput UINPUT:direct_abs=/dev/input/event1
17253
17254 this was used on a qtmoko Neo freerunner (armel):
17255
17256 -pipeinput UINPUT:touch,tslib_cal=/etc/pointercal,
17257 direct_abs=/dev/input/event1,nouinput,dragskip=4
17258
17259 (where the long line has been split into two.)
17260
17261 You can set the env. var X11VNC_UINPUT_DEBUG=1 or higher
17262 to get debugging output for UINPUT mode.
17263
17264 -macnodim For the native MacOSX server, disable dimming.
17265 -macnosleep For the native MacOSX server, disable display sleep.
17266 -macnosaver For the native MacOSX server, disable screensaver.
17267 -macnowait For the native MacOSX server, do not wait for the
17268 user to switch back to his display.
17269 -macwheel n For the native MacOSX server, set the mouse wheel
17270 speed to n (default 5).
17271 -macnoswap For the native MacOSX server, do not swap mouse
17272 buttons 2 and 3.
17273 -macnoresize For the native MacOSX server, do not resize or reset
17274 the framebuffer even if it is detected that the screen
17275 resolution or depth has changed.
17276 -maciconanim n For the native MacOSX server, set n to the number
17277 of milliseconds that the window iconify/deiconify
17278 animation takes. In -ncache mode this value will be
17279 used to skip the animation if possible. (default 400)
17280 -macmenu For the native MacOSX server, in -ncache client-side
17281 caching mode, try to cache pull down menus (not perfect
17282 because they have animated fades, etc.)
17283 -macuskbd For the native MacOSX server, use the original
17284 keystroke insertion code based on a US keyboard.
17285 -macnoopengl For the native MacOSX server, do not use OpenGL for
17286 screen capture, but rather use the original, deprecated
17287 raw memory access method: addr = CGDisplayBaseAddress().
17288 -macnorawfb For the native MacOSX server, disable the raw memory
17289 address screen capture method.
17290
17291 MACOSX NOTE: There are some deprecated MacOSX interfaces
17292 to inject keyboard and mouse events and the raw memory
17293 access method is deprecated as well (however, OpenGL
17294 will be preferred if available because it is faster.)
17295 One can force not using any deprecated interfaces at
17296 compile time by setting -DX11VNC_MACOSX_NO_DEPRECATED=1
17297 in CPPFLAGS. Or to turn them off one by one:
17298 -DX11VNC_MACOSX_NO_DEPRECATED_LOCALEVENTS=1,
17299 -DX11VNC_MACOSX_NO_DEPRECATED_POSTEVENTS=1 or
17300 -DX11VNC_MACOSX_NO_DEPRECATED_FRAMEBUFFER=1
17301 At run time, for testing and workarounds, one can
17302 disable them by using:
17303 -env X11VNC_MACOSX_NO_DEPRECATED=1
17304 -env X11VNC_MACOSX_NO_DEPRECATED_LOCALEVENTS=1
17305 -env X11VNC_MACOSX_NO_DEPRECATED_POSTEVENTS=1 or
17306 -env X11VNC_MACOSX_NO_DEPRECATED_FRAMEBUFFER=1
17307 Note: When doing either of these for the mouse input
17308 not everything works currently, e.g. double clicks and
17309 wireframing. Also, screen resolution and pixel depth
17310 changes will not be automatically detected unless the
17311 deprecated framebuffer interfaces are allowed.
17312
17313 Conversely, if you are compiling on an
17314 older machine that does not have some of
17315 the newer interfaces, you may need to specify
17316 -DX11VNC_MACOSX_NO_CGEVENTCREATESCROLLWHEELEVENT
17317 -DX11VNC_MACOSX_NO_CGEVENTCREATEMOUSEEVENT or
17318 -DX11VNC_MACOSX_NO_CGEVENTCREATEKEYBOARDEVENT. Use
17319 -DX11VNC_MACOSX_USE_GETMAINDEVICE to regain the very
17320 old QuickDraw GetMainDevice() interface (rare...)
17321
17322 -gui [gui-opts] Start up a simple tcl/tk gui based on the remote
17323 control options -remote/-query described below.
17324 Requires the "wish" program to be installed on the
17325 machine. "gui-opts" is not required: the default
17326 is to start up both the full gui and x11vnc with the
17327 gui showing up on the X display in the environment
17328 variable DISPLAY.
17329
17330 "gui-opts" can be a comma separated list of items.
17331 Currently there are these types of items: 1) a gui
17332 mode, a 2) gui "simplicity", 3) the X display the
17333 gui should display on, 4) a "tray" or "icon" mode,
17334 and 5) a gui geometry.
17335
17336 1) The gui mode can be "start", "conn", or "wait"
17337 "start" is the default mode above and is not required.
17338 "conn" means do not automatically start up x11vnc,
17339 but instead just try to connect to an existing x11vnc
17340 process. "wait" means just start the gui and nothing
17341 else (you will later instruct the gui to start x11vnc
17342 or connect to an existing one.)
17343
17344 2) The gui simplicity is off by default (a power-user
17345 gui with all options is presented) To start with
17346 something less daunting supply the string "simple"
17347 ("ez" is an alias for this). Once the gui is
17348 started you can toggle between the two with "Misc ->
17349 simple_gui".
17350
17351 3) Note the possible confusion regarding the potentially
17352 two different X displays: x11vnc polls one, but you
17353 may want the gui to appear on another. For example, if
17354 you ssh in and x11vnc is not running yet you may want
17355 the gui to come back to you via your ssh redirected X
17356 display (e.g. localhost:10).
17357
17358 If you do not specify a gui X display in "gui-opts"
17359 then the DISPLAY environment variable and -display
17360 option are tried (in that order). Regarding the x11vnc
17361 X display the gui will try to communication with, it
17362 first tries -display and then DISPLAY. For example,
17363 "x11vnc -display :0 -gui otherhost:0", will remote
17364 control an x11vnc polling :0 and display the gui on
17365 otherhost:0 The "tray/icon" mode below reverses this
17366 preference, preferring to display on the x11vnc display.
17367
17368 4) When "tray" or "icon" is specified, the gui
17369 presents itself as a small icon with behavior typical
17370 of a "system tray" or "dock applet". The color
17371 of the icon indicates status (connected clients) and
17372 there is also a balloon status. Clicking on the icon
17373 gives a menu from which properties, etc, can be set and
17374 the full gui is available under "Advanced". To be
17375 fully functional, the gui mode should be "start"
17376 (the default).
17377
17378 Note that tray or icon mode will imply the -forever
17379 x11vnc option (if the x11vnc server is started along
17380 with the gui) unless -connect or -connect_or_exit has
17381 been specified. So x11vnc (and the tray/icon gui)
17382 will wait for more connections after the first client
17383 disconnects. If you want only one viewer connection
17384 include the -once option.
17385
17386 For "icon" the gui just a small standalone window.
17387 For "tray" it will attempt to embed itself in the
17388 "system tray" if possible. If "=setpass" is appended the
17389 n
17390 at startup the X11 user will be prompted to set the
17391 VNC session password. If =<hexnumber> is appended
17392 that icon will attempt to embed itself in the window
17393 given by hexnumber. Use =noadvanced to disable the
17394 full gui. (To supply more than one, use "+" sign).
17395 E.g. -gui tray=setpass and -gui icon=0x3600028
17396
17397 Other modes: "full", the default and need not be
17398 specified. "-gui none", do not show a gui, useful
17399 to override a ~/.x11vncrc setting, etc.
17400
17401 5) When "geom=+X+Y" is specified, that geometry
17402 is passed to the gui toplevel. This is the icon in
17403 icon/tray mode, or the full gui otherwise. You can
17404 also specify width and height, i.e. WxH+X+Y, but it
17405 is not recommended. In "tray" mode the geometry is
17406 ignored unless the system tray manager does not seem
17407 to be running. One could imagine using something like
17408 "-gui tray,geom=+4000+4000" with a display manager
17409 to keep the gui invisible until someone logs in...
17410
17411 More icon tricks, "icon=minimal" gives an icon just
17412 with the VNC display number. You can also set the font
17413 with "iconfont=...". The following could be useful:
17414 "-gui icon=minimal,iconfont=5x8,geom=24x10+0-0"
17415
17416 General examples of the -gui option: "x11vnc -gui",
17417 "x11vnc -gui ez" "x11vnc -gui localhost:10",
17418 "x11vnc -gui conn,host:0", "x11vnc -gui tray,ez"
17419 "x11vnc -gui tray=setpass"
17420
17421 If you do not intend to start x11vnc from the gui
17422 (i.e. just remote control an existing one), then the
17423 gui process can run on a different machine from the
17424 x11vnc server as long as X permissions, etc. permit
17425 communication between the two.
17426
17427 FONTS: On some systems the tk fonts can be too small,
17428 jagged, or otherwise unreadable. There are 4 env vars
17429 you can set to be the tk font you prefer:
17430
17431 X11VNC_FONT_BOLD main font for menus and buttons.
17432 X11VNC_FONT_FIXED font for fixed width text.
17433
17434 X11VNC_FONT_BOLD_SMALL tray icon font.
17435 X11VNC_FONT_REG_SMALL tray icon menu font.
17436
17437 The last two only apply for the tray icon mode.
17438
17439 Here are some examples:
17440
17441 -env X11VNC_FONT_BOLD='Helvetica -16 bold'
17442 -env X11VNC_FONT_FIXED='Courier -14'
17443 -env X11VNC_FONT_REG_SMALL='Helvetica -12'
17444
17445 You can put the lines like the above (without the
17446 quotes) in your ~/.x11vncrc file to avoid having to
17447 specify them on the x11vnc command line.
17448
17449 -remote command Remotely control some aspects of an already running
17450 x11vnc server. "-R" and "-r" are aliases for
17451 "-remote". After the remote control command is
17452 sent to the running server the 'x11vnc -remote ...'
17453 x11vnc command exits. You can often use the -query
17454 command (see below) to see if the x11vnc server
17455 processed your -remote command.
17456
17457 The default communication channel is that of X
17458 properties (specifically X11VNC_REMOTE), and so this
17459 command must be run with correct settings for DISPLAY
17460 and possibly XAUTHORITY to connect to the X server
17461 and set the property. Alternatively, use the -display
17462 and -auth options to set them to the correct values.
17463 The running server cannot use the -novncconnect option
17464 because that disables the communication channel.
17465 See below for alternate channels.
17466
17467 For example: 'x11vnc -remote stop' (which is the same as
17468 'x11vnc -R stop') will close down the x11vnc server.
17469 'x11vnc -R shared' will enable shared connections, and
17470 'x11vnc -R scale:3/4' will rescale the desktop.
17471
17472 To use a different name for the X11 property (e.g. to
17473 have separate communication channels for multiple
17474 x11vnc's on the same display) set the X11VNC_REMOTE
17475 environment variable to the string you want, for
17476 example: -env X11VNC_REMOTE=X11VNC_REMOTE_12345
17477 Both sides of the channel must use the same unique name.
17478
17479 To run a bunch of commands in a sequence use something
17480 like: x11vnc -R 'script:firstcmd;secondcmd;...'
17481
17482 Use x11vnc -R script:file=/path/to/file to read commands
17483 from a file (can be multi-line and use the comment '#'
17484 character in the normal way. The ';' separator must
17485 still be used to separate each command.)
17486
17487 To not try to contact another x11vnc process and instead
17488 just run the command (or query) directly, prefix the
17489 command with the string "DIRECT:"
17490
17491 The following -remote/-R commands are supported:
17492
17493 stop terminate the server, same as "quit"
17494 "exit" or "shutdown".
17495 ping see if the x11vnc server responds.
17496 return is: ans=ping:<display>
17497 ping:mystring as above, but use your own unique string
17498 .
17499 return is: ans=ping:mystring:<xdisplay>
17500 blacken try to push a black fb update to all
17501 clients (due to timings a client
17502 could miss it). Same as "zero", also
17503 "zero:x1,y1,x2,y2" for a rectangle.
17504 refresh send the entire fb to all clients.
17505 reset recreate the fb, polling memory, etc.
17506 id:windowid set -id window to "windowid". empty
17507 or "root" to go back to root window
17508 sid:windowid set -sid window to "windowid"
17509 id_cmd:cmd cmds: raise, lower, map, unmap, iconify,
17510 move:dXdY, resize:dWdH, geom:WxH+X+Y. dX
17511 dY, dW, and dH must have a leading "+"
17512 or "-" e.g.: move:-30+10 resize:+20+35
17513 also: wm_delete, wm_name:string and
17514 icon_name:string. Also id_cmd:win=N:cmd
17515 waitmapped wait until subwin is mapped.
17516 nowaitmapped do not wait until subwin is mapped.
17517 clip:WxH+X+Y set -clip mode to "WxH+X+Y"
17518 flashcmap enable -flashcmap mode.
17519 noflashcmap disable -flashcmap mode.
17520 shiftcmap:n set -shiftcmap to n.
17521 notruecolor enable -notruecolor mode.
17522 truecolor disable -notruecolor mode.
17523 overlay enable -overlay mode (if applicable).
17524 nooverlay disable -overlay mode.
17525 overlay_cursor in -overlay mode, enable cursor drawing.
17526 overlay_nocursor disable cursor drawing. same as
17527 nooverlay_cursor.
17528 8to24 enable -8to24 mode (if applicable).
17529 no8to24 disable -8to24 mode.
17530 8to24_opts:str set the -8to24 opts to "str".
17531 24to32 enable -24to32 mode (if applicable).
17532 no24to32 disable -24to32 mode.
17533 visual:vis set -visual to "vis"
17534 scale:frac set -scale to "frac"
17535 scale_cursor:f set -scale_cursor to "f"
17536 viewonly enable -viewonly mode.
17537 noviewonly disable -viewonly mode.
17538 shared enable -shared mode.
17539 noshared disable -shared mode.
17540 forever enable -forever mode.
17541 noforever disable -forever mode.
17542 timeout:n reset -timeout to n, if there are
17543 currently no clients, exit unless one
17544 connects in the next n secs.
17545 tightfilexfer enable filetransfer for NEW clients.
17546 notightfilexfer disable filetransfer for NEW clients.
17547 ultrafilexfer enable filetransfer for clients.
17548 noultrafilexfer disable filetransfer for clients.
17549 rfbversion:n.m set -rfbversion for new clients.
17550 http enable http client connections.
17551 nohttp disable http client connections.
17552 deny deny any new connections, same as "lock"
17553 nodeny allow new connections, same as "unlock"
17554 avahi enable avahi service advertising.
17555 noavahi disable avahi service advertising.
17556 mdns enable avahi service advertising.
17557 nomdns disable avahi service advertising.
17558 zeroconf enable avahi service advertising.
17559 nozeroconf disable avahi service advertising.
17560 connect:host do reverse connection to host, "host"
17561 may be a comma separated list of hosts
17562 or host:ports. See -connect. Passwords
17563 required as with fwd connections.
17564 See X11VNC_REVERSE_CONNECTION_NO_AUTH=1
17565 disconnect:host disconnect any clients from "host"
17566 same as "close:host". Use host
17567 "all" to close all current clients.
17568 If you know the client internal hex ID,
17569 e.g. 0x3 (returned by "-query clients"
17570 and RFB_CLIENT_ID) you can use that too.
17571 proxy:host:port set reverse connection proxy (empty to
17572 disable).
17573 allowonce:host For the next connection only, allow
17574 connection from "host". In -ssl mode
17575 two connections are allowed (i.e. Fetch
17576 Cert) unless X11VNC_NO_SSL_ALLOW_TWICE=1
17577 allow:hostlist set -allow list to (comma separated)
17578 "hostlist". See -allow and -localhost.
17579 Do not use with -allow /path/to/file
17580 Use "+host" to add a single host, and
17581 use "-host" to delete a single host
17582 localhost enable -localhost mode
17583 nolocalhost disable -localhost mode
17584 listen:str set -listen to str, empty to disable.
17585 noipv6 enable -noipv6 mode.
17586 ipv6 disable -noipv6 mode.
17587 noipv4 enable -noipv4 mode.
17588 ipv4 disable -noipv4 mode.
17589 6 enable -6 IPv6 listening mode.
17590 no6 disable -6 IPv6 listening mode.
17591 lookup disable -nolookup mode.
17592 nolookup enable -nolookup mode.
17593 lookup disable -nolookup mode.
17594 input:str set -input to "str", empty to disable.
17595 grabkbd enable -grabkbd mode.
17596 nograbkbd disable -grabkbd mode.
17597 grabptr enable -grabptr mode.
17598 nograbptr disable -grabptr mode.
17599 grabalways enable -grabalways mode.
17600 nograbalways disable -grabalways mode.
17601 grablocal:n set -grablocal to n.
17602 client_input:str set the K, M, B -input on a per-client
17603 basis. select which client as for
17604 disconnect, e.g. client_input:host:MB
17605 or client_input:0x2:K
17606 accept:cmd set -accept "cmd" (empty to disable).
17607 afteraccept:cmd set -afteraccept (empty to disable).
17608 gone:cmd set -gone "cmd" (empty to disable).
17609 noshm enable -noshm mode.
17610 shm disable -noshm mode (i.e. use shm).
17611 flipbyteorder enable -flipbyteorder mode, you may need
17612 to set noshm for this to do something.
17613 noflipbyteorder disable -flipbyteorder mode.
17614 onetile enable -onetile mode. (you may need to
17615 set shm for this to do something)
17616 noonetile disable -onetile mode.
17617 solid enable -solid mode
17618 nosolid disable -solid mode.
17619 solid_color:color set -solid color (and apply it).
17620 blackout:str set -blackout "str" (empty to disable).
17621 See -blackout for the form of "str"
17622 (basically: WxH+X+Y,...)
17623 Use "+WxH+X+Y" to append a single
17624 rectangle use "-WxH+X+Y" to delete one
17625 xinerama enable -xinerama mode. (if applicable)
17626 noxinerama disable -xinerama mode.
17627 xtrap enable -xtrap input mode(if applicable)
17628 noxtrap disable -xtrap input mode.
17629 xrandr enable -xrandr mode. (if applicable)
17630 noxrandr disable -xrandr mode.
17631 xrandr_mode:mode set the -xrandr mode to "mode".
17632 rotate:mode set the -rotate mode to "mode".
17633 padgeom:WxH set -padgeom to WxH (empty to disable)
17634 If WxH is "force" or "do" the padded
17635 geometry fb is immediately applied.
17636 quiet enable -quiet mode.
17637 noquiet disable -quiet mode.
17638 modtweak enable -modtweak mode.
17639 nomodtweak enable -nomodtweak mode.
17640 xkb enable -xkb modtweak mode.
17641 noxkb disable -xkb modtweak mode.
17642 capslock enable -capslock mode.
17643 nocapslock disable -capslock mode.
17644 skip_lockkeys enable -skip_lockkeys mode.
17645 noskip_lockkeys disable -skip_lockkeys mode.
17646 skip_keycodes:str enable -xkb -skip_keycodes "str".
17647 sloppy_keys enable -sloppy_keys mode.
17648 nosloppy_keys disable -sloppy_keys mode.
17649 skip_dups enable -skip_dups mode.
17650 noskip_dups disable -skip_dups mode.
17651 add_keysyms enable -add_keysyms mode.
17652 noadd_keysyms stop adding keysyms. those added will
17653 still be removed at exit.
17654 clear_mods enable -clear_mods mode and clear them.
17655 noclear_mods disable -clear_mods mode.
17656 clear_keys enable -clear_keys mode and clear them.
17657 noclear_keys disable -clear_keys mode.
17658 clear_locks do the clear_locks action.
17659 clear_all do the clear_all action.
17660 keystate have x11vnc print current keystate.
17661 remap:str set -remap "str" (empty to disable).
17662 See -remap for the form of "str"
17663 (basically: key1-key2,key3-key4,...)
17664 Use "+key1-key2" to append a single
17665 keymapping, use "-key1-key2" to delete.
17666 norepeat enable -norepeat mode.
17667 repeat disable -norepeat mode.
17668 nofb enable -nofb mode.
17669 fb disable -nofb mode.
17670 bell enable bell (if supported).
17671 nobell disable bell.
17672 sendbell ring the bell now.
17673 nosel enable -nosel mode.
17674 sel disable -nosel mode.
17675 noprimary enable -noprimary mode.
17676 primary disable -noprimary mode.
17677 nosetprimary enable -nosetprimary mode.
17678 setprimary disable -nosetprimary mode.
17679 noclipboard enable -noclipboard mode.
17680 clipboard disable -noclipboard mode.
17681 nosetclipboard enable -nosetclipboard mode.
17682 setclipboard disable -nosetclipboard mode.
17683 seldir:str set -seldir to "str"
17684 resend_cutbuffer resend the most recent CUTBUFFER0 copy
17685 resend_clipboard resend the most recent CLIPBOARD copy
17686 resend_primary resend the most recent PRIMARY copy
17687 cursor:mode enable -cursor "mode".
17688 show_cursor enable showing a cursor.
17689 noshow_cursor disable showing a cursor. (same as
17690 "nocursor")
17691 cursor_drag enable cursor changes during drag.
17692 nocursor_drag disable cursor changes during drag.
17693 arrow:n set -arrow to alternate n.
17694 xfixes enable xfixes cursor shape mode.
17695 noxfixes disable xfixes cursor shape mode.
17696 alphacut:n set -alphacut to n.
17697 alphafrac:f set -alphafrac to f.
17698 alpharemove enable -alpharemove mode.
17699 noalpharemove disable -alpharemove mode.
17700 alphablend disable -noalphablend mode.
17701 noalphablend enable -noalphablend mode.
17702 cursorshape disable -nocursorshape mode.
17703 nocursorshape enable -nocursorshape mode.
17704 cursorpos disable -nocursorpos mode.
17705 nocursorpos enable -nocursorpos mode.
17706 xwarp enable -xwarppointer mode.
17707 noxwarp disable -xwarppointer mode.
17708 always_inject enable -always_inject mode.
17709 noalways_inject disable -always_inject mode.
17710 buttonmap:str set -buttonmap "str", empty to disable
17711 dragging disable -nodragging mode.
17712 nodragging enable -nodragging mode.
17713 ncache reenable -ncache mode.
17714 noncache disable -ncache mode.
17715 ncache_size:n set -ncache size to n.
17716 ncache_cr enable -ncache_cr mode.
17717 noncache_cr disable -ncache_cr mode.
17718 ncache_no_moveraise enable no_moveraise mode.
17719 noncache_no_moveraise disable no_moveraise mode.
17720 ncache_no_dtchange enable ncache_no_dtchange mode.
17721 noncache_no_dtchange disable ncache_no_dtchange mode.
17722 ncache_old_wm enable ncache_old_wm mode.
17723 noncache_old_wm disable ncache_old_wm mode.
17724 ncache_no_rootpixmap enable ncache_no_rootpixmap.
17725 noncache_no_rootpixmap disable ncache_no_rootpixmap.
17726 ncache_reset_rootpixmap recheck the root pixmap, ncrp
17727 ncache_keep_anims enable ncache_keep_anims.
17728 noncache_keep_anims disable ncache_keep_anims.
17729 ncache_pad:n set -ncache_pad to n.
17730 wireframe enable -wireframe mode. same as "wf"
17731 nowireframe disable -wireframe mode. same as "nowf"
17732 wireframe:str enable -wireframe mode string.
17733 wireframe_mode:str enable -wireframe mode string.
17734 wireframelocal enable wireframelocal. same as "wfl"
17735 nowireframe disable wireframelocal. same as "nowfl"
17736 wirecopyrect:str set -wirecopyrect string. same as "wcr:
17737 "
17738 scrollcopyrect:str set -scrollcopyrect string. same "scr
17739 "
17740 noscrollcopyrect disable -scrollcopyrect mode. "noscr"
17741 scr_area:n set -scr_area to n
17742 scr_skip:list set -scr_skip to "list"
17743 scr_inc:list set -scr_inc to "list"
17744 scr_keys:list set -scr_keys to "list"
17745 scr_term:list set -scr_term to "list"
17746 scr_keyrepeat:str set -scr_keyrepeat to "str"
17747 scr_parms:str set -scr_parms parameters.
17748 fixscreen:str set -fixscreen to "str".
17749 noxrecord disable all use of RECORD extension.
17750 xrecord enable use of RECORD extension.
17751 reset_record reset RECORD extension (if avail.)
17752 pointer_mode:n set -pointer_mode to n. same as "pm"
17753 input_skip:n set -input_skip to n.
17754 allinput enable use of -allinput mode.
17755 noallinput disable use of -allinput mode.
17756 input_eagerly enable use of -input_eagerly mode.
17757 noinput_eagerly disable use of -input_eagerly mode.
17758 ssltimeout:n set -ssltimeout to n.
17759 speeds:str set -speeds to str.
17760 wmdt:str set -wmdt to str.
17761 debug_pointer enable -debug_pointer, same as "dp"
17762 nodebug_pointer disable -debug_pointer, same as "nodp"
17763 debug_keyboard enable -debug_keyboard, same as "dk"
17764 nodebug_keyboard disable -debug_keyboard, same as "nodk"
17765 keycode:n inject keystroke 'keycode' (xmodmap -pk)
17766 keycode:n,down inject 'keycode' (down=0,1)
17767 keysym:str inject keystroke 'keysym' (number/name)
17768 keysym:str,down inject 'keysym' (down=0,1)
17769 ptr:x,y,mask inject pointer event x, y, button-mask
17770 fakebuttonevent:button,down direct XTestFakeButtonEvent.
17771 sleep:t sleep floating point time t.
17772 get_xprop:p get X property named 'p'.
17773 set_xprop:p:val set X property named 'p' to 'val'.
17774 p -> id=NNN:p for hex/dec window id.
17775 wininfo:id get info about X window id. use 'root'
17776 for root window, use +id for children.
17777 grab_state get state of pointer and keyboard grab.
17778 pointer_pos print XQueryPointer x,y cursor position.
17779 pointer_x print XQueryPointer x cursor position.
17780 pointer_y print XQueryPointer y cursor position.
17781 pointer_same print XQueryPointer ptr on same screen.
17782 pointer_root print XQueryPointer curr ptr rootwin.
17783 pointer_mask print XQueryPointer button and mods mask
17784 mouse_x print x11vnc's idea of cursor position.
17785 mouse_y print x11vnc's idea of cursor position.
17786 noop do nothing.
17787 defer:n set -defer to n ms,same as deferupdate:n
17788 wait:n set -wait to n ms.
17789 extra_fbur:n set -extra_fbur to n.
17790 wait_ui:f set -wait_ui factor to f.
17791 setdefer:n set -setdefer to -2,-1,0,1, or 2.
17792 wait_bog disable -nowait_bog mode.
17793 nowait_bog enable -nowait_bog mode.
17794 slow_fb:f set -slow_fb to f seconds.
17795 xrefresh:f set -xrefresh to f seconds.
17796 readtimeout:n set read timeout to n seconds.
17797 nap enable -nap mode.
17798 nonap disable -nap mode.
17799 sb:n set -sb to n s, same as screen_blank:n
17800 fbpm disable -nofbpm mode.
17801 nofbpm enable -nofbpm mode.
17802 dpms disable -nodpms mode.
17803 nodpms enable -nodpms mode.
17804 forcedpms enable -forcedpms mode.
17805 noforcedpms disable -forcedpms mode.
17806 clientdpms enable -clientdpms mode.
17807 noclientdpms disable -clientdpms mode.
17808 noserverdpms enable -noserverdpms mode.
17809 serverdpms disable -noserverdpms mode.
17810 noultraext enable -noultraext mode.
17811 ultraext disable -noultraext mode.
17812 chatwindow enable local chatwindow mode.
17813 nochatwindow disable local chatwindow mode.
17814 chaton begin chat using local window.
17815 chatoff end chat using local window.
17816 xdamage enable xdamage polling hints.
17817 noxdamage disable xdamage polling hints.
17818 xd_area:A set -xd_area max pixel area to "A"
17819 xd_mem:f set -xd_mem remembrance to "f"
17820 fs:frac set -fs fraction to "frac", e.g. 0.5
17821 gaps:n set -gaps to n.
17822 grow:n set -grow to n.
17823 fuzz:n set -fuzz to n.
17824 snapfb enable -snapfb mode.
17825 nosnapfb disable -snapfb mode.
17826 rawfb:str set -rawfb mode to "str".
17827 uinput_accel:f set uinput_accel to f.
17828 uinput_thresh:n set uinput_thresh to n.
17829 uinput_reset:n set uinput_reset to n ms.
17830 uinput_always:n set uinput_always to 1/0.
17831 progressive:n set LibVNCServer -progressive slice
17832 height parameter to n.
17833 desktop:str set -desktop name to str for new clients
17834 .
17835 rfbport:n set -rfbport to n.
17836 macnosaver enable -macnosaver mode.
17837 macsaver disable -macnosaver mode.
17838 macnowait enable -macnowait mode.
17839 macwait disable -macnowait mode.
17840 macwheel:n set -macwheel to n.
17841 macnoswap enable -macnoswap mouse button mode.
17842 macswap disable -macnoswap mouse button mode.
17843 macnoresize enable -macnoresize mode.
17844 macresize disable -macnoresize mode.
17845 maciconanim:n set -maciconanim to n.
17846 macmenu enable -macmenu mode.
17847 macnomenu disable -macmenu mode.
17848 macuskbd enable -macuskbd mode.
17849 macnouskbd disable -macuskbd mode.
17850 httpport:n set -httpport to n.
17851 httpdir:dir set -httpdir to dir (and enable http).
17852 enablehttpproxy enable -enablehttpproxy mode.
17853 noenablehttpproxy disable -enablehttpproxy mode.
17854 alwaysshared enable -alwaysshared mode.
17855 noalwaysshared disable -alwaysshared mode.
17856 (may interfere with other options)
17857 nevershared enable -nevershared mode.
17858 nonevershared disable -nevershared mode.
17859 (may interfere with other options)
17860 dontdisconnect enable -dontdisconnect mode.
17861 nodontdisconnect disable -dontdisconnect mode.
17862 (may interfere with other options)
17863 debug_xevents enable debugging X events.
17864 nodebug_xevents disable debugging X events.
17865 debug_xdamage enable debugging X DAMAGE mechanism.
17866 nodebug_xdamage disable debugging X DAMAGE mechanism.
17867 debug_wireframe enable debugging wireframe mechanism.
17868 nodebug_wireframe disable debugging wireframe mechanism.
17869 debug_scroll enable debugging scrollcopy mechanism.
17870 nodebug_scroll disable debugging scrollcopy mechanism.
17871 debug_tiles enable -debug_tiles
17872 nodebug_tiles disable -debug_tiles
17873 debug_grabs enable -debug_grabs
17874 nodebug_grabs disable -debug_grabs
17875 debug_sel enable -debug_sel
17876 nodebug_sel disable -debug_sel
17877 debug_ncache enable -debug_ncache
17878 nodebug_ncache disable -debug_ncache
17879 dbg enable -dbg crash shell
17880 nodbg disable -dbg crash shell
17881
17882 noremote disable the -remote command processing,
17883 it cannot be turned back on.
17884
17885 bcx_xattach:str This remote control command is for
17886 use with the BARCO xattach program or the x2x program.
17887 Both of these programs are for 'pointer and keyboard'
17888 sharing between separate X displays. In general the
17889 two displays are usually nearby, e.g. on the same desk,
17890 and this allows the user to share a single pointer and
17891 keyboard between them. The user moves the mouse to
17892 an edge and then the mouse pointer appears to 'jump'
17893 to the other display screen. Thus it emulates what a
17894 single X server would do for two screens (e.g. :0.0 and
17895 :0.1) The illusion of a single Xserver with multiple
17896 screens is achieved by forwarding events to the 2nd
17897 one via the XTEST extension.
17898
17899 What the x11vnc bcx_xattach command does is to perform
17900 some pointer movements to try to INDUCE xattach/x2x
17901 to 'jump' to the other display. In what follows the
17902 'master' display refers to the one that when it has
17903 'focus' it is basically doing nothing besides watching
17904 for the mouse to go over an edge. The 'slave'
17905 display refers to the one to which the mouse and
17906 keyboard is redirected to once an edge in the master
17907 has been crossed. Note that the x11vnc executing the
17908 bcx_xattach command MUST be the one connected to the
17909 *master* display.
17910
17911 Also note that when input is being redirected (via
17912 XTEST) from the master display to the slave display,
17913 the master display's pointer and keyboard are *grabbed*
17914 by xattach/x2x. x11vnc can use this info to verify that
17915 the master/slave mode change has taken place correctly.
17916 If you specify the "ifneeded" option (see below)
17917 and the initial grab state is that of the desired
17918 final state, then no pointer movements are injected
17919 and "DONE,GRAB_OK" is returned.
17920
17921 "str" must contain one of "up", "down", "left",
17922 or "right" to indicate the direction of the 'jump'.
17923 "str" must also contain one of "master_to_slave"
17924 or "slave_to_master" to indicate the type of mode
17925 change induced by the jump. Use "M2S" and "S2M"
17926 as shorter aliases.
17927
17928 "str" may be a "+" separated list of additional
17929 tuning options. The "shift=n" option indicates an
17930 offset shift position away from (0,0) (default 20).
17931 "final=x+y" specifies the final position of the cursor
17932 at the end of the normal move sequence; default 30+30.
17933 "extra_move=x+y" means to do one more pointer move
17934 after "final" to x+y. "dt=n" sets the sleep time
17935 in milliseconds between pointer moves (default: 40ms)
17936 "retry=n" specifies the maximum number of retries if
17937 the grab state change fails. "ifneeded" means to not
17938 apply the pointer movements if the initial grab state is
17939 that of the desired final state. "nograbcheck" means
17940 to not check if the grab state changed as expected and
17941 only apply the pointer movements (default is to check
17942 the grab states.)
17943
17944 If you do not specify "up", etc., to bcx_xattach
17945 nothing will be attempted and the command returns
17946 the string FAIL,NO_DIRECTION_SPECIFIED. If you do
17947 not specify "master_to_slave" or "M2S", etc., to
17948 bcx_xattach nothing will be attempted and the command
17949 returns the string FAIL,NO_MODE_CHANGE_SPECIFIED.
17950
17951 Otherwise, the returned string will contain "DONE".
17952 It will be "DONE,GRAB_OK" if the grab state changed
17953 as expected (or if "ifneeded" was supplied and
17954 the initial grab state was already the desired
17955 one.) If the initial grab state was incorrect,
17956 but the final grab state was correct then it is
17957 "DONE,GRAB_FAIL_INIT". If the initial grab state
17958 was correct, but the final grab state was incorrect
17959 then it is "DONE,GRAB_FAIL_FINAL". If both are
17960 incorrect it will be "DONE,GRAB_FAIL". Under grab
17961 failure the string will be followed by ":p1,k1-p2,k2"
17962 where p1,k1 indicates the initial pointer and keyboard
17963 grab states and p2,k2 the final ones. If GRAB_FAIL or
17964 GRAB_FAIL_FINAL occurs, the action will be retried up
17965 to 3 times; trying to reset the state and sleeping a
17966 bit between each try. Set retry=n to adjust the number
17967 of retries, zero to disable retries.
17968
17969 Examples:
17970 -R bcx_xattach:down+M2S
17971 -R bcx_xattach:up+S2M
17972 -R bcx_xattach:up+S2M+nograbcheck+dt=30
17973 -R bcx_xattach:down+M2S+extra_move=100+100
17974
17975 or use -Q instead of -R to retrieve the result text.
17976
17977 End of the bcx_xattach:str description.
17978
17979 The vncconnect(1) command from standard VNC
17980 distributions may also be used if string is prefixed
17981 with "cmd=" E.g. 'vncconnect cmd=stop'. Under some
17982 circumstances xprop(1) can used if it supports -set
17983 (see the FAQ).
17984
17985 If "-connect /path/to/file" has been supplied to the
17986 running x11vnc server then that file can be used as a
17987 communication channel (this is the only way to remote
17988 control one of many x11vnc's polling the same X display)
17989 Simply run: 'x11vnc -connect /path/to/file -remote ...'
17990 or you can directly write to the file via something
17991 like: "echo cmd=stop > /path/to/file", etc.
17992
17993 -query variable Like -remote, except just query the value of
17994 "variable". "-Q" is an alias for "-query".
17995 Multiple queries can be done by separating variables
17996 by commas, e.g. -query var1,var2. The results come
17997 back in the form ans=var1:value1,ans=var2:value2,...
17998 to the standard output. If a variable is read-only,
17999 it comes back with prefix "aro=" instead of "ans=".
18000
18001 Some -remote commands are pure actions that do not make
18002 sense as variables, e.g. "stop" or "disconnect", in
18003 these cases the value returned is "N/A". To direct a
18004 query straight to the X11VNC_REMOTE property or connect
18005 file use "qry=..." instead of "cmd=..."
18006
18007 ans= stop quit exit shutdown ping resend_cutbuffer
18008 resend_clipboard resend_primary blacken zero refresh
18009 reset close disconnect id_cmd id sid waitmapped
18010 nowaitmapped clip flashcmap noflashcmap shiftcmap
18011 truecolor notruecolor overlay nooverlay overlay_cursor
18012 overlay_yescursor nooverlay_nocursor nooverlay_cursor
18013 nooverlay_yescursor overlay_nocursor 8to24 no8to24
18014 8to24_opts 24to32 no24to32 visual scale scale_cursor
18015 viewonly noviewonly shared noshared forever noforever
18016 once timeout tightfilexfer notightfilexfer ultrafilexfer
18017 noultrafilexfer rfbversion deny lock nodeny unlock avahi
18018 mdns zeroconf noavahi nomdns nozeroconf connect proxy
18019 allowonce allow noipv6 ipv6 noipv4 ipv4 no6 6 localhost
18020 nolocalhost listen lookup nolookup accept afteraccept
18021 gone shm noshm flipbyteorder noflipbyteorder onetile
18022 noonetile solid_color solid nosolid blackout xinerama
18023 noxinerama xtrap noxtrap xrandr noxrandr xrandr_mode
18024 rotate padgeom quiet q noquiet modtweak nomodtweak xkb
18025 noxkb capslock nocapslock skip_lockkeys noskip_lockkeys
18026 skip_keycodes sloppy_keys nosloppy_keys skip_dups
18027 noskip_dups add_keysyms noadd_keysyms clear_mods
18028 noclear_mods clear_keys noclear_keys clear_all
18029 clear_locks keystate remap repeat norepeat fb nofb bell
18030 nobell sendbell sel nosel primary noprimary setprimary
18031 nosetprimary clipboard noclipboard setclipboard
18032 nosetclipboard seldir cursorshape nocursorshape
18033 cursorpos nocursorpos cursor_drag nocursor_drag cursor
18034 show_cursor noshow_cursor nocursor arrow xfixes noxfixes
18035 xdamage noxdamage xd_area xd_mem alphacut alphafrac
18036 alpharemove noalpharemove alphablend noalphablend
18037 xwarppointer xwarp noxwarppointer noxwarp always_inject
18038 noalways_inject buttonmap dragging nodragging ncache_cr
18039 noncache_cr ncache_no_moveraise noncache_no_moveraise
18040 ncache_no_dtchange noncache_no_dtchange
18041 ncache_no_rootpixmap noncache_no_rootpixmap
18042 ncache_reset_rootpixmap ncrp ncache_keep_anims
18043 noncache_keep_anims ncache_old_wm noncache_old_wm
18044 ncache_pad ncache noncache ncache_size debug_ncache
18045 nodebug_ncache wireframe_mode wireframe wf nowireframe
18046 nowf wireframelocal wfl nowireframelocal nowfl
18047 wirecopyrect wcr nowirecopyrect nowcr scr_area
18048 scr_skip scr_inc scr_keys scr_term scr_keyrepeat
18049 scr_parms scrollcopyrect scr noscrollcopyrect
18050 noscr fixscreen noxrecord xrecord reset_record
18051 pointer_mode pm input_skip allinput noallinput
18052 input_eagerly noinput_eagerly input grabkbd nograbkbd
18053 grabptr nograbptr grabalways nograbalways grablocal
18054 client_input ssltimeout speeds wmdt debug_pointer dp
18055 nodebug_pointer nodp debug_keyboard dk nodebug_keyboard
18056 nodk keycode keysym ptr fakebuttonevent sleep get_xprop
18057 set_xprop wininfo bcx_xattach deferupdate defer
18058 setdefer extra_fbur wait_ui wait_bog nowait_bog
18059 slow_fb xrefresh wait readtimeout nap nonap sb
18060 screen_blank fbpm nofbpm dpms nodpms clientdpms
18061 noclientdpms forcedpms noforcedpms noserverdpms
18062 serverdpms noultraext ultraext chatwindow nochatwindow
18063 chaton chatoff fs gaps grow fuzz snapfb nosnapfb
18064 rawfb uinput_accel uinput_thresh uinput_reset
18065 uinput_always progressive rfbport http nohttp httpport
18066 httpdir enablehttpproxy noenablehttpproxy alwaysshared
18067 noalwaysshared nevershared noalwaysshared dontdisconnect
18068 nodontdisconnect desktop debug_xevents nodebug_xevents
18069 debug_xevents debug_xdamage nodebug_xdamage
18070 debug_xdamage debug_wireframe nodebug_wireframe
18071 debug_wireframe debug_scroll nodebug_scroll debug_scroll
18072 debug_tiles dbt nodebug_tiles nodbt debug_tiles
18073 debug_grabs nodebug_grabs debug_sel nodebug_sel dbg
18074 nodbg macnosaver macsaver nomacnosaver macnowait macwait
18075 nomacnowait macwheel macnoswap macswap nomacnoswap
18076 macnoresize macresize nomacnoresize maciconanim macmenu
18077 macnomenu nomacmenu macuskbd nomacuskbd noremote
18078
18079 aro= noop display vncdisplay icon_mode autoport
18080 loop loopbg desktopname guess_desktop guess_dbus
18081 http_url auth xauth users rootshift clipshift scale_str
18082 scaled_x scaled_y scale_numer scale_denom scale_fac_x
18083 scale_fac_y scaling_blend scaling_nomult4 scaling_pad
18084 scaling_interpolate inetd privremote unsafe safer nocmds
18085 passwdfile unixpw unixpw_nis unixpw_list ssl ssl_pem
18086 sslverify stunnel stunnel_pem https httpsredir usepw
18087 using_shm logfile o flag rmflag rc norc h help V version
18088 lastmod bg sigpipe threads readrate netrate netlatency
18089 pipeinput clients client_count pid ext_xtest ext_xtrap
18090 ext_xrecord ext_xkb ext_xshm ext_xinerama ext_overlay
18091 ext_xfixes ext_xdamage ext_xrandr rootwin num_buttons
18092 button_mask mouse_x mouse_y grab_state pointer_pos
18093 pointer_x pointer_y pointer_same pointer_root
18094 pointer_mask bpp depth indexed_color dpy_x dpy_y wdpy_x
18095 wdpy_y off_x off_y cdpy_x cdpy_y coff_x coff_y rfbauth
18096 passwd viewpasswd
18097
18098 -QD variable Just like -query variable, but returns the default
18099 value for that parameter (no running x11vnc server
18100 is consulted)
18101
18102 -sync By default -remote commands are run asynchronously, that
18103 is, the request is posted and the program immediately
18104 exits. Use -sync to have the program wait for an
18105 acknowledgement from the x11vnc server that command was
18106 processed (somehow). On the other hand -query requests
18107 are always processed synchronously because they have
18108 to wait for the answer.
18109
18110 Also note that if both -remote and -query requests are
18111 supplied on the command line, the -remote is processed
18112 first (synchronously: no need for -sync), and then
18113 the -query request is processed in the normal way.
18114 This allows for a reliable way to see if the -remote
18115 command was processed by querying for any new settings.
18116 Note however that there is timeout of a few seconds
18117 (see the next paragraph) so if the x11vnc takes longer
18118 than that to process the requests the requester will
18119 think that a failure has taken place.
18120
18121 The default is to wait 3.5 seconds. Or if cmd=stop
18122 only 1.0 seconds. If cmd matches 'script:' then it
18123 will wait up to 10.0 seconds. Set X11VNC_SYNC_TIMEOUT
18124 to the number of seconds you want it to wait.
18125
18126 -query_retries str If a query fails to get a response from an x11vnc
18127 server, retry up to n times. "str" is specified as
18128 n[:t][/match] Optionally the delay between tries may
18129 be specified by "t" a floating point time (default
18130 0.5 seconds.) Note: the response is not checked for
18131 validity or whether it corresponds to the query sent.
18132 The query "ping:mystring" may be used to help uniquely
18133 identify the query. Optionally, a matching string after
18134 a "/" will be used to check the result text. Up to
18135 n retries will take place until the matching string is
18136 found in the output text. If the match string is never
18137 found the program's exit code is 1; if the match is
18138 found it exits with 0. Note that there may be stdout
18139 printed for each retry (i.e. multiple lines printed
18140 out to stdout.)
18141 Example: -query_retries 4:1.5/grab_state
18142
18143 -remote_prefix str Enable a remote-control communication channel for
18144 connected VNC clients. str is a non-empty string. If a
18145 VNC client sends rfbCutText having the prefix "str"
18146 then the part after it is processed as though it were
18147 sent via 'x11vnc -remote ...'. If it begins with
18148 neither 'cmd=' nor 'qry=' then 'qry=' is assumed.
18149 Any corresponding output text for that remote control
18150 command is sent back to all client as rfbCutText.
18151 The returned output is also prefixed with "str".
18152 Example: -remote_prefix DO_THIS:
18153
18154 Note that enabling -remote_prefix allows the remote
18155 VNC viewers to run x11vnc -remote commands. Do not
18156 use this option if they are not to be trusted.
18157
18158 -noremote Do not process any remote control commands or queries.
18159 -yesremote Do process remote control commands or queries.
18160 Default: -yesremote
18161
18162 A note about security wrt remote control commands.
18163 If someone can connect to the X display and change
18164 the property X11VNC_REMOTE, then they can remotely
18165 control x11vnc. Normally access to the X display is
18166 protected. Note that if they can modify X11VNC_REMOTE
18167 on the X server, they have enough permissions to also
18168 run their own x11vnc and thus have complete control
18169 of the desktop. If the "-connect /path/to/file"
18170 channel is being used, obviously anyone who can write
18171 to /path/to/file can remotely control x11vnc. So be
18172 sure to protect the X display and that file's write
18173 permissions. See -privremote below.
18174
18175 If you are paranoid and do not think -noremote is
18176 enough, to disable the X11VNC_REMOTE property channel
18177 completely use -novncconnect, or use the -safer option
18178 that shuts many things off.
18179
18180 -unsafe A few remote commands are disabled by default
18181 (currently: id:pick, accept:<cmd>, gone:<cmd>, and
18182 rawfb:setup:<cmd>) because they are associated with
18183 running external programs. If you specify -unsafe, then
18184 these remote-control commands are allowed. Note that
18185 you can still specify these parameters on the command
18186 line, they just cannot be invoked via remote-control.
18187 -safer Equivalent to: -novncconnect -noremote and prohibiting
18188 -gui and the -connect file. Shuts off communcation
18189 channels.
18190 -privremote Perform some sanity checks and disable remote-control
18191 commands if it appears that the X DISPLAY and/or
18192 connectfile can be accessed by other users. Once
18193 remote-control is disabled it cannot be turned back on.
18194 -nocmds No external commands (e.g. system(3), popen(3), exec(3))
18195 will be run at all.
18196 -allowedcmds list "list" contains a comma separated list of the only
18197 external commands that can be run. The full list of
18198 associated options is:
18199
18200 stunnel, ssl, unixpw, WAIT, zeroconf, id, accept,
18201 afteraccept, gone, pipeinput, v4l-info, rawfb-setup,
18202 dt, gui, ssh, storepasswd, passwdfile, custom_passwd,
18203 findauth, crash.
18204
18205 See each option's help to learn the associated external
18206 command. Note that the -nocmds option takes precedence
18207 and disables all external commands.
18208
18209 -deny_all For use with -remote nodeny: start out denying all
18210 incoming clients until "-remote nodeny" is used to
18211 let them in.
18212
18213
18214
18215 These options are passed to LibVNCServer:
18216
18217 -rfbport port TCP port for RFB protocol
18218 -rfbwait time max time in ms to wait for RFB client
18219 -rfbauth passwd-file use authentication on RFB protocol
18220 (use 'storepasswd' to create a password file)
18221 -rfbversion 3.x Set the version of the RFB we choose to advertise
18222 -permitfiletransfer permit file transfer support
18223 -passwd plain-password use authentication
18224 (use plain-password as password, USE AT YOUR RISK)
18225 -deferupdate time time in ms to defer updates (default 40)
18226 -deferptrupdate time time in ms to defer pointer updates (default none)
18227 -desktop name VNC desktop name (default "LibVNCServer")
18228 -alwaysshared always treat new clients as shared
18229 -nevershared never treat new clients as shared
18230 -dontdisconnect don't disconnect existing clients when a new non-shared
18231 connection comes in (refuse new connection instead)
18232 -httpdir dir-path enable http server using dir-path home
18233 -httpport portnum use portnum for http connection
18234 -enablehttpproxy enable http proxy support
18235 -progressive height enable progressive updating for slow links
18236 -listen ipaddr listen for connections only on network interface with
18237 addr ipaddr. '-listen localhost' and hostname work too.
18238
18239 libvncserver-tight-extension options:
18240 -disablefiletransfer disable file transfer
18241 -ftproot string set ftp root
18242
18243 Pretty wild huh? Contact me if you have any questions or problems.
18244
18245 Personally, I use:
18246 x11vnc -rfbauth $HOME/.vnc/passwd -solid
18247