LibVNCServer: Eine Bibliothek zur einfachen Implementierung eines VNC-Servers. Copyright (C) 2001-2003 Johannes E. Schindelin
Wenn Sie eine allgemeine Frage haben, stellen Sie diese am besten im Community-Chat. Wenn Ihr Anliegen stattdessen einen Fehler oder eine Funktionsanfrage betrifft, verwenden Sie bitte den Issue-Tracker.
Wenn Sie LibVNCServer bereits verwendet haben, möchten Sie wahrscheinlich NEWS lesen.
VNC ist eine Reihe von Programmen, die das RFB-Protokoll (Remote Frame Buffer) verwenden. Sie dienen dazu, einen Framebuffer über das Netz zu „exportieren“: Sie richten einen Server ein und können über VNC-Viewer eine Verbindung zu ihm herstellen. Wenn der Server WebSockets unterstützt (was LibVNCServer tut), können Sie auch eine Verbindung mit einem browserinternen VNC-Viewer wie noVNC herstellen.
Für die Verwaltung ist es bereits weit verbreitet, allerdings ist es gar nicht so einfach, einen Server selbst zu programmieren.
Dies wurde von LibVNCServer geändert.
Auf der Homepage finden Sie eine vorläufige Liste aller Projekte, die entweder LibVNCServer oder LibVNCClient oder beide verwenden.
Name | Nummer | LibVNCServer | LibVNCClient |
---|---|---|---|
Keiner | 1 | ✔ | ✔ |
VNC-Authentifizierung | 2 | ✔ | ✔ |
SASL | 20 | ✔ | |
MSLogon | 0xfffffffa | ✔ | |
Apple ARD | 30 | ✔ | |
TLS | 18 | ✔ | |
VenCrypt | 19 | ✔ | |
UltraVNC MSLogonII | 113 | ✔ |
Name | Nummer | LibVNCServer | LibVNCClient |
---|---|---|---|
Roh | 1 | ✔ | ✔ |
CopyRect | 2 | ✔ | ✔ |
RRE | 3 | ✔ | ✔ |
CoRRE | 4 | ✔ | ✔ |
Hextil | 5 | ✔ | ✔ |
Zlib | 6 | ✔ | ✔ |
Eng | 7 | ✔ | ✔ |
Ultra | 9 | ✔ | ✔ |
TRLE | 15 | ✔ | |
ZRLE | 16 | ✔ | ✔ |
ZYWRLE | 17 | ✔ | ✔ |
TightPNG | -260 | ✔ |
Name | LibVNCServer | LibVNCClient |
---|---|---|
RFB | ✔ | ✔ |
Verschlüsselter RFB über VeNCrypt | ✔ | |
Verschlüsselter RFB über AnonTLS | ✔ | |
Websockets | ✔ | |
Verschlüsselte Websockets | ✔ |
LibVNCServer verwendet CMake, das Sie hier herunterladen oder, noch besser, mit dem Paketmanager Ihrer Plattform (apt, yum, brew, macports, Chocolatey usw.) installieren können.
Sie können dann wie folgt bauen:
mkdir build
cd build
cmake ..
cmake --build .
Die Kryptounterstützung in LibVNCClient und LibVNCServer kann unterschiedliche Backends verwenden:
-DWITH_OPENSSL=ON -DWITH_GCRYPT=OFF
)-DWITH_OPENSSL=OFF -DWITH_GCRYPT=ON
)-DWITH_OPENSSL=OFF -DWITH_GCRYPT=OFF
)Die Transport Layer Security-Unterstützung in LibVNCClient und LibVNCServer kann Folgendes verwenden:
-DWITH_OPENSSL=ON -DWITH_GNUTLS=OFF
)-DWITH_OPENSSL=OFF -DWITH_GNUTLS=ON
)Weitere umfassende Beispiele, die die Installation von Abhängigkeiten umfassen, finden Sie in den Build-Setups für Unix CI und Windows CI.
Siehe https://developer.android.com/ndk/guides/cmake.html als Referenz, aber im Grunde läuft es auf Folgendes hinaus:
mkdir build
cd build
cmake .. -DANDROID_NDK= -DCMAKE_TOOLCHAIN_FILE= -DANDROID_NATIVE_API_LEVEL=
cmake --build .
Getestet mit MinGW-w64 unter Debian, das Sie über sudo apt install mingw-w64
installieren sollten. Sie können die bereitgestellte Toolchain-Datei verwenden. Es stellt CMake so ein, dass (optionale) Win32-Abhängigkeiten wie libjpeg und Friends im deps
-Verzeichnis erwartet werden. Beachten Sie, dass Sie (wahrscheinlich selbst erstellte) Entwicklungspakete für Win32 benötigen. Die mit Ihrer Distribution gelieferten -dev
Pakete funktionieren nicht. Beachten Sie außerdem, dass Sie libwinpthread-1.dll
im Build-Verzeichnis ablegen müssen, um die Beispiele auszuführen. Sie finden diese DLL auf Ihrem Linux-Build-Rechner über locate libwinpthread-1.dll
.
mkdir build
cd build
cmake -DCMAKE_TOOLCHAIN_FILE=../cmake/Toolchain-cross-mingw32-linux.cmake ..
cmake --build .
Informationen zum Erstellen einer Serverinstanz, zum Verknüpfen von Eingabehandlern und zum Umgang mit Cursorn finden Sie in der Einführungsdokumentation zur LibVNCServer-API.
Wenn Sie LibVNCServer lieber anhand eines Beispiels erlernen möchten, werfen Sie einen Blick auf die Server im Verzeichnis examples/server.
Für LibVNCClient finden Sie Beispiele in examples/client.
Der Installationsprozess installiert pkg-config .pc-Dateien für LibVNCServer sowie LibVNCClient, die Sie in Ihrem Build-System über die üblichen pkg-config --cflags libvncserver
et al. verwenden können.
Wenn Sie CMake verwenden, stellen LibVNCServer-Versionen > 0.9.13 CMake-Konfigurationsdateien bereit, sodass Sie in der CMakeLists.txt Ihres Projekts Folgendes sagen können:
find_package (LibVNCServer)
if (LibVNCServer_FOUND)
# libs and headers location are now accessible via properties, but you only
# need to add the respective export target to your project's target_link_libraries,
# cmake will automatically add libs and headers
# eg: add client (YOUR_PROJECT_TARGET being a placeholder for your real target -
# it must be defined by add_executable or add_library):
target_link_libraries (YOUR_PROJECT_TARGET LibVNCServer::vncclient)
# add server:
target_link_libraries (YOUR_PROJECT_TARGET LibVNCServer::vncserver)
endif ()
Sie können die integrierte WebSockets-Unterstützung ausprobieren, indem Sie den Beispielserver aus dem Webclients-Verzeichnis über ../examples/example
starten. Es ist wichtig, nicht aus dem examples
heraus zu beginnen, da das Serverprogramm sonst seine HTTP-Indexdatei nicht findet. Das Serverprogramm teilt Ihnen eine URL mit, auf die Ihr Webbrowser verweisen soll. Dort können Sie auf den noVNC-Button klicken, um eine Verbindung mit dem noVNC-Viewer-Git-Submodul herzustellen (installierbar über git submodule update --init
).
Wenn Sie noch kein SSL-Zertifikat haben, dem Ihr Browser vertraut, können Sie es am bequemsten mit minica erstellen. Auf Debian-basierten Distributionen können Sie es über sudo apt install minica
installieren, auf MacOS über brew install minica
.
Gehen Sie zum Webclients-Verzeichnis und erstellen Sie Host- und CA-Zertifikate über:
cd webclients
minica -org "LibVNC" $(hostname)
Vertrauen Sie dem Zertifikat in Ihrem Browser, indem Sie das erstellte cacert.crt
importieren. Gehen Sie für Firefox beispielsweise zu Optionen->Datenschutz und Sicherheit->Zertifikate anzeigen->Autoritäten und importieren Sie das erstellte cacert.crt
. Aktivieren Sie das Kontrollkästchen, um es für vertrauenswürdige Websites zu verwenden. Bei anderen Browsern ist der Vorgang ähnlich.
Dann können Sie endlich den Beispielserver starten und ihm den erstellten Hostschlüssel und das Zertifikat geben:
../examples/example -sslkeyfile $(hostname).key -sslcertfile $(hostname).crt
Das Serverprogramm teilt Ihnen eine URL mit, auf die Ihr Webbrowser verweisen soll. Dort können Sie auf die Schaltfläche „noVNC-encrypted-connection“ klicken, um eine Verbindung mit dem mitgelieferten noVNC-Viewer über eine verschlüsselte Websockets-Verbindung herzustellen.
Wenn Ihre Client-Server-Verbindung träge ist, weil die Verbindung „langsam“ ist, müssen Sie einige Dinge beachten.
Zunächst müssen Sie untersuchen, ob Ihre Verbindung einen geringen Durchsatz oder eine hohe Latenz oder beides aufweist.
Versuchen Sie bei einer Verbindung mit hoher Latenz, kontinuierlich nach Framebuffer-Updates zu fragen, da RFB standardmäßig Client-Pull und nicht Server-Push ist. Eine Beispielimplementierung finden Sie hier und sie verbessert definitiv die Reaktionsfähigkeit.
Es gibt auch die RFB-Erweiterung ContinuousUpdates, diese wird jedoch von LibVNC (noch) nicht unterstützt.
Wenn Ihr Link einen geringen Durchsatz aufweist, müssen Sie grundsätzlich die Anzahl der Bytes reduzieren, die pro Framebuffer-Update gesendet werden:
Zu Beginn dieses Projekts hätte Dscho, der ursprüngliche Autor, gerne eine BSD-Lizenz daraus gemacht. Allerdings basiert es auf reichlich GPL-Code, es muss also eine GPL sein.
Die Leute bei AT&T haben wirklich gut daran gearbeitet, etwas so Sauberes und Schlankes wie VNC zu produzieren. Die Manager beschlossen, das Programm für ihren Ruhm kostenlos zu veröffentlichen. Aber nicht nur das! Sie erkannten, dass VNC durch die kostenlose Veröffentlichung des Codes zu einem sich weiterentwickelnden kleinen Kind werden würde, das neue Welten erobert und seine Eltern sehr stolz machen würde. Das können sie auch sein! Um diese Innovation zu schützen, beschlossen sie, sie zur GPL und nicht zu BSD zu machen. Der Hauptunterschied besteht darin: Sie können Closed-Source-Programme erstellen, die von BSD abgeleitet sind, nicht von der GPL. Man muss beides angemessen würdigen.
Unser kommerzielles Produkt möchte LibVNCServer nutzen, um unseren eigenen VNC-Server zu erstellen und zu verteilen. Wird dies im GPLv2-Kontext als abgeleitete Arbeit betrachtet?
Ja. Bitte beachten Sie, dass Sie sich zwar an die GPL für Ihr Programm halten müssen, wenn Sie auf LibVNCServer/LibVNCClient verlinken, Sie Ihren Code jedoch nicht veröffentlichen müssen, falls Sie das abgeleitete Werk intern in Ihrer Organisation verwenden, siehe https://www .gnu.org/licenses/gpl-faq.html#GPLRequireSourcePostedPublic
Macht die Änderung des LibVNCServer-Codes einen Unterschied bei der Bestimmung, ob unser VNC-Server als abgeleitetes Werk betrachtet wird?
Nein. Durch die einfache Verknüpfung mit LibVNCServer/LibVNCClient wird Ihr Programm zu einem abgeleiteten Werk.
Dieses Programm ist freie Software; Sie können es unter den Bedingungen der GNU General Public License, wie von der Free Software Foundation veröffentlicht, weiterverbreiten und/oder ändern; entweder Version 2 der Lizenz oder (nach Ihrer Wahl) eine spätere Version.
Dieses Programm wird in der Hoffnung verbreitet, dass es nützlich ist, jedoch OHNE JEGLICHE GARANTIE; ohne die stillschweigende Garantie der MARKTGÄNGIGKEIT oder EIGNUNG FÜR EINEN BESTIMMTEN ZWECK. Weitere Einzelheiten finden Sie in der GNU General Public License.
Sie sollten zusammen mit diesem Programm eine Kopie der GNU General Public License erhalten haben; Wenn nicht, schreiben Sie an die Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.