LibVNCServer/LibVNCClient are cross-platform C libraries that allow you to easily implement VNC server or client functionality in your program. If you don't know VNC and what it's good for, read about it here.
See the documentation for an API reference, the build howto for info on how to compile the libraries on your platform and the project newsfor a list of recent changes.php
To give an example, the simplest server looks like this:
html
#include <rfb/rfb.h> int main(int argc,char** argv) { rfbScreenInfoPtr server=rfbGetScreen(&argc,argv,400,300,8,3,4); server->frameBuffer=malloc(400*300*4); rfbInitServer(server); rfbRunEventLoop(server,-1,FALSE); return(0); }
This sample creates a 400x300 frame buffer in true colour. There are 4 bytes per pixel, because 3 (which are only used instead of all 4) is such an odd number. Then the server is initialized and a blocking event loop is started.linux
Of course, this program only shows rubbish (whatever is in the frame buffer you malloc'd) and does not do any error checking at all, but it proves that writing a server can be very easy.android
For more in-depth information (especially if you want to write a real server or client) look into the provided examples and into the documentation for LibVNCServer and LibVNCClient.c++
LibVNCServer and LibVNCClient are free software licensed under the GPL. If you use them, you must adhere to the terms of th GPL.git
Looking for help or want to participate in the active development of LibVNCServer/LibVNCClient? Subscribe to the libvncserver-common mailing list.github
LibVNCServer/LibVNCClient now have a new website (inspired by the FFmpeg one) including API documentation.web
LibVNCServer now sports a brand new method to extend the protocol, thanks to Rohit Kumar! He also extended the library to support RFB 3.7. Furthermore, he contributed TightVNC file transfer protocol support to LibVNCServer!session
LibVNCClient now features ZRLE decoding!app
Another round of valgrinding completed. This time it is augmented by changes instigated by using Linus' sparse. In the course, the complete sources were converted to ANSI C.
The member socketInitDone was renamed to socketState, and no longer contains a bool value. This allows us to quit a server cleanly from the event loop via rfbShutdownServer(), so that the structures can be cleaned up properly. This is demonstrated in examples/example.c.
The function rfbMakeMaskFromAlphaSource() applies a Floyd-Steinberg dither to approximate a binary mask from a cursor with alpha channel. A demonstration can be found in test/cursortest.c.
Renamed this page to reflect that LibVNCClient is actually very usable.
Karl Runge has done awesome work to support cursors with alpha blending! You can try it with x11vnc as in CVS, or wait a few more days for x11vnc to be released officially!
Happy new year! It begins with a new macro recorder based on LibVNCServer/LibVNCClient using perl as script language. The macro recorder is itself written in perl, and writes out perl scripts, acting as a VNC proxy, so that you can connect a vncviewer to it, and it records all your input, possibly looking for a certain button, image, word, etc. before continuing. I called it VisualNaCro, and it's in CVS.
Just before christmas, a new release! Version 0.7 brings you the first non-beta of LibVNCServer...
Finally MinGW32 support. I only had problems with a vncviewer which wouldn't connect to localhost: I use SDLvncviewer...
LibVNCClient is getting better and better... Expect a very powerful client soon!
LibVNCServer has automated test, thanks to LibVNCClient (included). It doesn't do ZRLE yet, and exposed some bugs, the only remaining of these is CoRRE (not sure yet if it's a bug in the client or the server).
Added Success stories.
The API was cleaned up. The structures and functions now have a prefix (mostly "rfb", sometimes "zrle" or "sra") in order not to clutter the namespace, while the structure's members don't need such a prefix.
I finally came around to fix mouse behaviour in QEMU's VNC frontend for Windows 98. Please find the patch here. If mouse behaves strangely, try to wiggle the pointer to a free spot on the desktop, hit Ctrl+Shift and release them. After that, the mouse should behave nicely.
After silently being added almost a year ago, libvncclient's API was modified for real use, and three examples were added: ppmtest (a very simple demo), SDLvncviewer, and vnc2mpg (which lets you record your VNC session to a movie). Automated regression tests of the libraries are planned.
x11vnc-0.6.1 was released! This reflects the long way the original, small example has gone, improved in many possible ways and having a broad user base.
Some patches were created for QEMU, a FAST! emulator by Fabrice Bellard, to control those sessions with a vncviewer.
LibVNCServer is listed as a project using Valgrind!
Version 0.6 is out! x11vnc performance boosts! You no longer need a c++ compiler in order to have ZRLE coding! LinuxVNC was added (This is to the text console what x11vnc is to X11)!
rdp2vnc is in rdesktop's CVS.
A preliminary patch for rdesktop (CVS) to make rdp2vnc, a translator from Windows Terminal Server's protocol to VNC's protocol, is available. It needs a new version of libvncserver; try CVS until I release 0.6.
Version 0.5 is out! Features include autoconf based configure, rpm package (YMMV), cleanup of directory structure, NEW x11vnc! ZRLE encoding! HTTP tunnelling through LibVNCServer's HTTP support! Many bug fixes!
Version 0.4 is out! Biggest feature: NewFB encoding. Quite a few bugfixes also (Thanks to all!).
A new version of rdesktop+vnc is available! (Includes support for other platforms keyboard mapping with plain rdesktop!)
Added a link to my homepage at the end.
I released the rdp2vnc extensions as well as patches for general keyboard handling, working inside Xvnc and process_text2 (the famous "font:" error) to rdesktop. Please find it on the download page.
A snapshot of LibVNCServer and RDP2VNC is now available. You can also download the diff against rdesktop-1.1.0. rdp2vnc also contains the patches for keyboards other than PC keyboards, and you can specify "-k fr" again.
On Unix/Linux platforms, just the usual:
./configure
If crosscompiling for Windows using MinGW (The WINVER define 'unlocks' some newer features of the Win32 TCP/IP stack. The LDFLAGS setting allows building of DLLs provided you have ws2_32.dll available in your linker path.):
CPPFLAGS=-DWINVER=0x0501 ./configure \ --build=<your build system type> --host=i586-mingw32msvc --with-sdl-config=<your win32 sdl-config> \ --with-zlib=<path to your win32 zlib> --with-jepg=<path to your win32 libjpeg> \ --with-gnutls=<path to your win32 gnutls or 'no'> \ --with-gcrypt=<path to your win32 libgcrypt or 'no'>
If building for Android:
./configure --host=arm-eabi CC=arm-linux-androideabi-gcc
As always, it's done by typing:
make
That's it....