|
|
|
#
|
|
|
|
# This work has been (or is hereby) released into the public domain by
|
|
|
|
# its author, Karl J. Runge <runge@karlrunge.com>. This applies worldwide.
|
|
|
|
#
|
|
|
|
# In case this is not legally possible: Karl J. Runge grants anyone the
|
|
|
|
# right to use this work for any purpose, without any conditions, unless
|
|
|
|
# such conditions are required by law.
|
|
|
|
#
|
|
|
|
|
|
|
|
INTRO:
|
|
|
|
------
|
|
|
|
|
|
|
|
This is a "patch" to make x11vnc/libvncserver work with TurboVNC:
|
|
|
|
|
|
|
|
http://www.virtualgl.org/About/TurboVNC
|
|
|
|
http://www.karlrunge.com/x11vnc/faq.html#faq-turbovnc
|
|
|
|
|
|
|
|
It is very experimental/kludgy. Not all TurboVNC features may be enabled.
|
|
|
|
We are currently evaluating whether TurboVNC support should be officially
|
|
|
|
put into x11vnc/libvncserver.
|
|
|
|
|
|
|
|
TurboVNC is an optimized VNC for fast refresh rates on fast networks.
|
|
|
|
|
|
|
|
It does pretty well on good broadband as well. But it is not as fast
|
|
|
|
as regular TightVNC on slow links.
|
|
|
|
|
|
|
|
|
|
|
|
TURBOJPEG:
|
|
|
|
---------
|
|
|
|
|
|
|
|
TurboVNC uses the TurboJPEG library based on a fast proprietary JPEG
|
|
|
|
implementation. You will need to download it from the VirtualGL
|
|
|
|
sourceforge site:
|
|
|
|
|
|
|
|
http://sourceforge.net/project/showfiles.php?group_id=117509&package_id=166100
|
|
|
|
|
|
|
|
Either install it or simply unpack the .deb or .rpm file into a directory.
|
|
|
|
|
|
|
|
N.B. you can unpack a .deb via 'ar x package.deb' and the extracting
|
|
|
|
from the data.tar.gz file. rpm2cpio can be used to unpack .rpm's.
|
|
|
|
|
|
|
|
|
|
|
|
QUICK-START:
|
|
|
|
------------
|
|
|
|
|
|
|
|
For those in a hurry:
|
|
|
|
|
|
|
|
cd x11vnc-x.y.z/x11vnc/misc/turbovnc
|
|
|
|
./apply_turbovnc
|
|
|
|
cd ../../..
|
|
|
|
env LDFLAGS='-L/DIR -Xlinker --rpath=/DIR' ./configure
|
|
|
|
make AM_LDFLAGS='-lturbojpeg'
|
|
|
|
|
|
|
|
where you replace /DIR with your directory containing libturbojpeg.so.
|
|
|
|
|
|
|
|
|
|
|
|
PATCHING AND BUILDING:
|
|
|
|
----------------------
|
|
|
|
|
|
|
|
After unpacking your x11vnc-x.y.z.tar.gz tarball cd to the
|
|
|
|
x11vnc-x.y.z/x11vnc/misc/turbovnc (where this README file is) and from
|
|
|
|
that directory run:
|
|
|
|
|
|
|
|
./apply_turbovnc
|
|
|
|
|
|
|
|
that will modify files in the libvncserver and x11vnc directories above
|
|
|
|
this directory. (To undo these changes run: ./undo_turbovnc) The input
|
|
|
|
sources, tight.c and turbojpeg.h are from the TurboVNC source package.
|
|
|
|
|
|
|
|
After applying, go back to the top level source directory and run:
|
|
|
|
|
|
|
|
env LDFLAGS='-L/path/to/turbojpeg -Xlinker --rpath=/path/to/turbojpeg' ./configure
|
|
|
|
|
|
|
|
where the turbojpeg library is:
|
|
|
|
|
|
|
|
/path/to/turbojpeg/libturbojpeg.so
|
|
|
|
|
|
|
|
(change /path/to/turbojpeg to the directory where you installed or
|
|
|
|
unpacked it.)
|
|
|
|
|
|
|
|
If you are not using gnu gcc and gnu linker the options may be a little
|
|
|
|
different (e.g. -R instead of -Xlinker --rpath).
|
|
|
|
|
|
|
|
If you need additional ./configure options or env. var. settings,
|
|
|
|
add them too.
|
|
|
|
|
|
|
|
|
|
|
|
Next, run this make command:
|
|
|
|
|
|
|
|
make AM_LDFLAGS='-lturbojpeg'
|
|
|
|
|
|
|
|
This is a hack and may not always work, if it doesn't edit x11vnc/Makefile
|
|
|
|
and add '-lturbojpeg' to the LIBS variable.
|
|
|
|
|
|
|
|
This should create a binary:
|
|
|
|
|
|
|
|
./x11vnc/x11vnc
|
|
|
|
|
|
|
|
that supports VirtualGL's TurboVNC.
|
|
|
|
|
|
|
|
You will need a TurboVNC viewer, you can get one here:
|
|
|
|
|
|
|
|
http://sourceforge.net/project/showfiles.php?group_id=117509&package_id=128130
|
|
|
|
|
|
|
|
Let us know how it goes.
|
|
|
|
|
|
|
|
|
|
|
|
PERFORMANCE:
|
|
|
|
------------
|
|
|
|
|
|
|
|
Note that x11vnc has to read the display's screen pixels from the
|
|
|
|
graphics card memory. This can be slow, e.g. 10 MB/sec.
|
|
|
|
|
|
|
|
There is not a big need for graphics card manufacturers to optimize the
|
|
|
|
read rate; the write rate is the one they optimize greatly.
|
|
|
|
|
|
|
|
http://www.karlrunge.com/x11vnc/#limitations
|
|
|
|
|
|
|
|
If you run x11vnc and see lines like this:
|
|
|
|
|
|
|
|
28/02/2009 00:52:07 Autoprobing selected port 5900
|
|
|
|
28/02/2009 00:52:07 fb read rate: 10 MB/sec
|
|
|
|
28/02/2009 00:52:07 screen setup finished.
|
|
|
|
|
|
|
|
you have a typical slow one.
|
|
|
|
|
|
|
|
Whereas if you see this:
|
|
|
|
|
|
|
|
28/02/2009 00:54:46 Autoprobing selected port 5900
|
|
|
|
28/02/2009 00:54:46 fb read rate: 321 MB/sec
|
|
|
|
28/02/2009 00:54:46 fast read: reset wait ms to: 10
|
|
|
|
28/02/2009 00:54:46 fast read: reset defer ms to: 10
|
|
|
|
28/02/2009 00:54:46 screen setup finished.
|
|
|
|
|
|
|
|
that is very fast. In such a situation you may want to dial down
|
|
|
|
x11vnc's delay, e.g.: -wait 5 -defer 5, or even smaller to push things
|
|
|
|
out more quickly.
|
|
|
|
|
|
|
|
We have only seen it this fast on Linux by using the nvidia proprietary
|
|
|
|
graphics drivers. The Xorg drivers are typically slow 10 MB/sec.
|
|
|
|
|
|
|
|
It will also be fast if the X server is virtual: Xvfb or Xdummy
|
|
|
|
since the screen pixels are stored in RAM:
|
|
|
|
|
|
|
|
http://www.karlrunge.com/x11vnc/faq.html#faq-xvfb
|
|
|
|
|
|
|
|
And it will be fast if the ShadowFB xorg.conf option is enabled (if the
|
|
|
|
card supports it.)
|
|
|
|
|
|
|
|
|
|
|
|
The point we are trying to make is that even though TurboVNC uses a
|
|
|
|
wicked fast JPEG implementation, and cuts out overhead in its attempt to
|
|
|
|
pump out as many frames per second as it can, if it is slow for x11vnc
|
|
|
|
to read the screen pixels in the first place then you might not even
|
|
|
|
notice the TurboVNC speedup.
|
|
|
|
|
|
|
|
So TurboVNC+x11vnc will be faster than TightVNC+x11vnc, but if there is
|
|
|
|
a large overhead/bottleneck from reading the graphics card framebuffer,
|
|
|
|
then the speedup will be marginal.
|