All Projects → LibVNC → Libvncserver

LibVNC / Libvncserver

Licence: gpl-2.0
LibVNCServer/LibVNCClient are cross-platform C libraries that allow you to easily implement VNC server or client functionality in your program.

Programming Languages

c
50402 projects - #5 most used programming language

Projects that are alternatives of or similar to Libvncserver

docker-chromium
Docker container with Chromium desktop and a Web VNC client allowing you to run Chromium on any server you have
Stars: ✭ 64 (-90.79%)
Mutual labels:  remote-desktop, vnc
Premotem
Personal Remote Manager
Stars: ✭ 161 (-76.83%)
Mutual labels:  remote-desktop, vnc
Headmore
Top geek’s VNC client that runs in Linux terminal (Linux VT console, xterm, and more)
Stars: ✭ 82 (-88.2%)
Mutual labels:  remote-desktop, vnc
Wayvnc
A VNC server for wlroots based Wayland compositors
Stars: ✭ 273 (-60.72%)
Mutual labels:  remote-desktop, vnc
easy-novnc
Single-binary noVNC instance, web UI, and multi-host proxy.
Stars: ✭ 142 (-79.57%)
Mutual labels:  remote-desktop, vnc
RabbitRemoteControl
Remote control. Support VNC, RDP, Terminal, SSH, TELNET etc
Stars: ✭ 82 (-88.2%)
Mutual labels:  remote-desktop, vnc
Multivnc
MultiVNC is a cross-platform Multicast-enabled VNC viewer using wxWidgets and libvncclient . It runs on Unix, Mac OS X and Windows. Features include support for most encodings, ZeroConf service discovery and a seamless edge control mode á la x2vnc. There also is a mobile (Android) version with a different feature set available.
Stars: ✭ 134 (-80.72%)
Mutual labels:  remote-desktop, vnc
vernacular-vnc
A pure Java VNC client library
Stars: ✭ 55 (-92.09%)
Mutual labels:  remote-desktop, vnc
avnc
VNC Client for Android
Stars: ✭ 207 (-70.22%)
Mutual labels:  remote-desktop, vnc
Freerdp
FreeRDP is a free remote desktop protocol library and clients
Stars: ✭ 5,858 (+742.88%)
Mutual labels:  library, remote-desktop
Rein
Database constraints made easy for ActiveRecord.
Stars: ✭ 657 (-5.47%)
Mutual labels:  library
Rando.js
The world's easiest, most powerful random function.
Stars: ✭ 659 (-5.18%)
Mutual labels:  library
Instacapture
Android library to capture screenshot from your app
Stars: ✭ 681 (-2.01%)
Mutual labels:  library
Python Progressbar
Progressbar 2 - A progress bar for Python 2 and Python 3 - "pip install progressbar2"
Stars: ✭ 682 (-1.87%)
Mutual labels:  library
Ipban
IPBan Monitors failed logins and bad behavior and bans ip addresses on Windows and Linux. Highly configurable, lean and powerful. Learn more at -->
Stars: ✭ 652 (-6.19%)
Mutual labels:  remote-desktop
Argparse
Argument Parser for Modern C++
Stars: ✭ 680 (-2.16%)
Mutual labels:  library
Lambdacd
a library to define a continuous delivery pipeline in code
Stars: ✭ 655 (-5.76%)
Mutual labels:  library
Angular Pipes
Useful pipes for Angular
Stars: ✭ 652 (-6.19%)
Mutual labels:  library
Pinview
A pinview library for android. ✨
Stars: ✭ 650 (-6.47%)
Mutual labels:  library
Tiramisu
A polyhedral compiler for expressing fast and portable data parallel algorithms
Stars: ✭ 685 (-1.44%)
Mutual labels:  library

Build Status Build status Help making this possible Join the chat at https://gitter.im/LibVNC/libvncserver

LibVNCServer: A library for easy implementation of a VNC server. Copyright (C) 2001-2003 Johannes E. Schindelin

If you already used LibVNCServer, you probably want to read NEWS.

What is it?

VNC is a set of programs using the RFB (Remote Frame Buffer) protocol. They are designed to "export" a frame buffer via net: you set up a server and can connect to it via VNC viewers. If the server supports WebSockets (which LibVNCServer does), you can also connect using an in-browser VNC viewer like noVNC.

It is already in wide use for administration, but it is not that easy to program a server yourself.

This has been changed by LibVNCServer.

Projects using it

The homepage has a tentative list of all the projects using either LibVNCServer or LibVNCClient or both.

RFB Protocol Support Status

Security Types

Name Number LibVNCServer LibVNCClient
None 1
VNC Authentication 2
SASL 20
MSLogon 0xfffffffa
Apple ARD 30
TLS 18
VeNCrypt 19

Encodings

Name Number LibVNCServer LibVNCClient
Raw 1
CopyRect 2
RRE 3
CoRRE 4
Hextile 5
Zlib 6
Tight 7
Zlibhex 8
Ultra 9
TRLE 15
ZRLE 16
ZYWRLE 17
TightPNG -260

How to build

LibVNCServer uses CMake, which you can download here or, better yet, install using your platform's package manager (apt, yum, brew, macports, chocolatey, etc.).

You can then build via:

mkdir build
cd build
cmake ..
cmake --build .

Crypto support in LibVNCClient and LibVNCServer can use different backends:

  • OpenSSL (-DWITH_OPENSSL=ON -DWITH_GCRYPT=OFF)
    • Supports all authentication methods in LibVNCClient and LibVNCServer.
    • Supports WebSockets in LibVNCServer.
  • Libgcrypt (-DWITH_OPENSSL=OFF -DWITH_GCRYPT=ON)
    • Supports all authentication methods in LibVNCClient and LibVNCServer.
    • Supports WebSockets in LibVNCServer.
  • Included (-DWITH_OPENSSL=OFF -DWITH_GCRYPT=OFF)
    • Supports only VNC authentication in LibVNCClient and LibVNCServer.
    • Supports WebSockets in LibVNCServer.

Transport Layer Security support in LibVNCClient and LibVNCServer can use:

  • OpenSSL (-DWITH_OPENSSL=ON -DWITH_GNUTLS=OFF)
  • GnuTLS (-DWITH_OPENSSL=OFF -DWITH_GNUTLS=ON)

For some more comprehensive examples that include installation of dependencies, see the Unix CI and Windows CI build setups.

Crosscompiling from Unix to Android

See https://developer.android.com/ndk/guides/cmake.html as a reference, but basically it boils down to:

mkdir build
cd build
cmake .. -DANDROID_NDK=<path> -DCMAKE_TOOLCHAIN_FILE=<path> -DANDROID_NATIVE_API_LEVEL=<API level you want>
cmake --build .

Crosscompiling from Linux to Windows

Tested with MinGW-w64 on Debian, which you should install via sudo apt install mingw-w64. You can make use of the provided toolchainfile. It sets CMake to expect (optional) win32 dependencies like libjpeg and friends in the deps directory. Note that you need (probably self-built) development packages for win32, the -dev packages coming with your distribution won't work.

mkdir build
cd build
cmake -DCMAKE_TOOLCHAIN_FILE=../cmake/Toolchain-cross-mingw32-linux.cmake ..
cmake --build .

How to use

See the LibVNCServer API intro documentation for how to create a server instance, wire up input handlers and handle cursors.

In case you prefer to learn LibVNCServer by example, have a look at the servers in the examples directory.

For LibVNCClient, examples can be found in client_examples.

Using Websockets

You can try out the built-in websockets support by starting the example server from the webclients directory via ../examples/example. It's important to not start from within the examples directory as otherwise the server program won't find its HTTP index file. The server program will tell you a URL to point your web browser to. There, you can click on the noVNC-Button to connect using the noVNC viewer git submodule (installable via git submodule update --init).

Using Secure Websockets

If you don't already have an SSL cert that's trusted by your browser, the most comfortable way to create one is using minica. On Debian-based distros, you can install it via sudo apt install minica, on MacOS via brew install minica.

Go to the webclients directory and create host and CA certs via:

cd webclients
minica -org "LibVNC" $(hostname)

Trust the cert in your browser by importing the created cacert.crt, e.g. for Firefox go to Options->Privacy & Security->View Certificates->Authorities and import the created cacert.crt, tick the checkbox to use it for trusting websites. For other browsers, the process is similar.

Then, you can finally start the example server, giving it the created host key and cert:

../examples/example -sslkeyfile $(hostname).key -sslcertfile $(hostname).crt

The server program will tell you a URL to point your web browser to. There, you can click on the noVNC-encrypted-connection-button to connect using the bundled noVNC viewer using an encrypted Websockets connection.

Commercial Use

At the beginning of this project Dscho, the original author, would have liked to make it a BSD license. However, it is based on plenty of GPL'ed code, so it has to be a GPL.

The people at AT&T worked really well to produce something as clean and lean as VNC. The managers decided that for their fame, they would release the program for free. But not only that! They realized that by releasing also the code for free, VNC would become an evolving little child, conquering new worlds, making its parents very proud. As well they can be! To protect this innovation, they decided to make it GPL, not BSD. The principal difference is: You can make closed source programs deriving from BSD, not from GPL. You have to give proper credit with both.

Now, why not BSD? Well, imagine your child being some famous actor. Along comes a manager who exploits your child exclusively, that is: nobody else can profit from the child, it itself included. Got it?

What reason do you have now to use this library commercially?

Several: You don't have to give away your product. Then you have effectively circumvented the GPL, because you have the benefits of other's work and you don't give back anything. Not good.

Better: Use a concept like MySQL. This is free software, however, they make money with it. If you want something implemented, you have the choice: Ask them to do it (and pay a fair price), or do it yourself, normally giving back your enhancements to the free world of computing.

License

This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version.

This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.

You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.

Contact

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].