LibVNCServer : Une bibliothèque pour une implémentation facile d'un serveur VNC. Copyright (C) 2001-2003 Johannes E. Schindelin
Si vous avez une question d'ordre général, il est préférable de la poser dans le chat communautaire. Si votre préoccupation concerne plutôt un bug ou une demande de fonctionnalité, veuillez utiliser l'outil de suivi des problèmes.
Si vous avez déjà utilisé LibVNCServer, vous souhaiterez probablement lire NEWS.
VNC est un ensemble de programmes utilisant le protocole RFB (Remote Frame Buffer). Ils sont conçus pour « exporter » un frame buffer via net : vous configurez un serveur et pouvez vous y connecter via des visionneuses VNC. Si le serveur prend en charge WebSockets (ce que fait LibVNCServer), vous pouvez également vous connecter à l'aide d'un visualiseur VNC intégré au navigateur comme noVNC.
Il est déjà largement utilisé pour l’administration, mais il n’est pas si simple de programmer soi-même un serveur.
Cela a été modifié par LibVNCServer.
La page d'accueil contient une liste provisoire de tous les projets utilisant LibVNCServer ou LibVNCClient ou les deux.
Nom | Nombre | Serveur LibVNC | LibVNCClient |
---|---|---|---|
Aucun | 1 | ✔ | ✔ |
Authentification VNC | 2 | ✔ | ✔ |
SASL | 20 | ✔ | |
Connexion MS | 0xfffffffa | ✔ | |
Pomme ARD | 30 | ✔ | |
TLS | 18 | ✔ | |
VeNCrypte | 19 | ✔ | |
UltraVNC MSLogonII | 113 | ✔ |
Nom | Nombre | Serveur LibVNC | LibVNCClient |
---|---|---|---|
Brut | 1 | ✔ | ✔ |
CopierRect | 2 | ✔ | ✔ |
RR | 3 | ✔ | ✔ |
CoRRE | 4 | ✔ | ✔ |
Hextile | 5 | ✔ | ✔ |
Zlib | 6 | ✔ | ✔ |
Serré | 7 | ✔ | ✔ |
Ultra | 9 | ✔ | ✔ |
TRLE | 15 | ✔ | |
ZRLE | 16 | ✔ | ✔ |
ZYWRLE | 17 | ✔ | ✔ |
SerréPNG | -260 | ✔ |
Nom | Serveur LibVNC | LibVNCClient |
---|---|---|
RFB | ✔ | ✔ |
RFB crypté via VeNCrypt | ✔ | |
RFB crypté via AnonTLS | ✔ | |
Prises Web | ✔ | |
Websockets cryptés | ✔ |
LibVNCServer utilise CMake, que vous pouvez télécharger ici ou, mieux encore, installer à l'aide du gestionnaire de packages de votre plateforme (apt, yum, Brew, Macports, Chocolatey, etc.).
Vous pouvez ensuite construire via :
mkdir build
cd build
cmake ..
cmake --build .
La prise en charge du chiffrement dans LibVNCClient et LibVNCServer peut utiliser différents backends :
-DWITH_OPENSSL=ON -DWITH_GCRYPT=OFF
)-DWITH_OPENSSL=OFF -DWITH_GCRYPT=ON
)-DWITH_OPENSSL=OFF -DWITH_GCRYPT=OFF
)La prise en charge de Transport Layer Security dans LibVNCClient et LibVNCServer peut utiliser :
-DWITH_OPENSSL=ON -DWITH_GNUTLS=OFF
)-DWITH_OPENSSL=OFF -DWITH_GNUTLS=ON
)Pour obtenir des exemples plus complets incluant l’installation de dépendances, consultez les configurations de build Unix CI et Windows CI.
Voir https://developer.android.com/ndk/guides/cmake.html comme référence, mais en gros, cela se résume à :
mkdir build
cd build
cmake .. -DANDROID_NDK= -DCMAKE_TOOLCHAIN_FILE= -DANDROID_NATIVE_API_LEVEL=
cmake --build .
Testé avec MinGW-w64 sur Debian, que vous devez installer via sudo apt install mingw-w64
. Vous pouvez utiliser le fichier de chaîne d'outils fourni. Il définit CMake pour qu'il s'attende (facultatif) à des dépendances win32 comme libjpeg et amis dans le répertoire deps
. Notez que vous avez besoin de packages de développement (probablement auto-construits) pour win32, les packages -dev
fournis avec votre distribution ne fonctionneront pas. Notez également que vous devrez mettre libwinpthread-1.dll
dans le répertoire de construction pour exécuter les exemples. Vous pouvez trouver cette DLL sur votre machine de build Linux via locate libwinpthread-1.dll
.
mkdir build
cd build
cmake -DCMAKE_TOOLCHAIN_FILE=../cmake/Toolchain-cross-mingw32-linux.cmake ..
cmake --build .
Consultez la documentation d'introduction de l'API LibVNCServer pour savoir comment créer une instance de serveur, connecter les gestionnaires d'entrée et gérer les curseurs.
Si vous préférez apprendre LibVNCServer par exemple, jetez un œil aux serveurs dans le répertoire examples/server.
Pour LibVNCClient, des exemples peuvent être trouvés dans examples/client.
Le processus d'installation installe les fichiers pkg-config .pc pour LibVNCServer ainsi que LibVNCClient que vous pouvez utiliser dans votre système de build via l'habituel pkg-config --cflags libvncserver
et al.
Si vous utilisez CMake, les versions de LibVNCServer > 0.9.13 fournissent des fichiers de configuration CMake. Ainsi, dans le fichier CMakeLists.txt de votre projet, vous pouvez dire :
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 ()
Vous pouvez essayer la prise en charge intégrée des websockets en démarrant l'exemple de serveur à partir du répertoire webclients via ../examples/example
. Il est important de ne pas démarrer depuis le répertoire examples
, sinon le programme serveur ne trouvera pas son fichier d'index HTTP. Le programme serveur vous indiquera une URL vers laquelle pointer votre navigateur Web. Là, vous pouvez cliquer sur le bouton noVNC pour vous connecter à l'aide du sous-module git du visualiseur noVNC (installable via git submodule update --init
).
Si vous ne disposez pas déjà d'un certificat SSL approuvé par votre navigateur, le moyen le plus confortable d'en créer un consiste à utiliser minica. Sur les distributions basées sur Debian, vous pouvez l'installer via sudo apt install minica
, sur MacOS via brew install minica
.
Accédez au répertoire webclients et créez les certificats d'hôte et d'autorité de certification via :
cd webclients
minica -org "LibVNC" $(hostname)
Faites confiance au certificat dans votre navigateur en important le cacert.crt
créé, par exemple pour Firefox, allez dans Options->Confidentialité et sécurité->Afficher les certificats->Autorités et importez le cacert.crt
créé, cochez la case pour l'utiliser pour faire confiance aux sites Web. Pour les autres navigateurs, le processus est similaire.
Ensuite, vous pouvez enfin démarrer l'exemple de serveur, en lui donnant la clé d'hôte et le certificat créés :
../examples/example -sslkeyfile $(hostname).key -sslcertfile $(hostname).crt
Le programme serveur vous indiquera une URL vers laquelle pointer votre navigateur Web. Là, vous pouvez cliquer sur le bouton de connexion cryptée noVNC pour vous connecter à l'aide de la visionneuse noVNC fournie à l'aide d'une connexion Websockets cryptée.
Si votre connexion client-serveur est lente parce que le lien est « lent », il y a quelques éléments à prendre en compte.
Tout d’abord, vous devez déterminer si votre lien a un faible débit, une latence élevée ou les deux.
Sur une liaison à latence élevée, essayez de demander des mises à jour continues du framebuffer, car RFB est pull-client par défaut, et non push-serveur. Un exemple d’implémentation peut être trouvé ici et il améliore définitivement la réactivité.
Il existe également l'extension RFB ContinuousUpdates, mais celle-ci n'est pas (encore) prise en charge par LibVNC.
Si votre lien est à faible débit, vous devez essentiellement réduire le nombre d'octets envoyés par mise à jour du framebuffer :
Au début de ce projet, Dscho, l'auteur original, aurait souhaité en faire une licence BSD. Cependant, il est basé sur de nombreux codes sous GPL, il doit donc s'agir d'une GPL.
Les gens d'AT&T ont très bien travaillé pour produire quelque chose d'aussi propre et simple que VNC. Les managers ont décidé que, pour leur renommée, ils publieraient le programme gratuitement. Mais pas seulement ! Ils ont réalisé qu'en publiant également le code gratuitement, VNC deviendrait un petit enfant en évolution, conquérant de nouveaux mondes, rendant ses parents très fiers. Aussi bien qu’ils peuvent l’être ! Pour protéger cette innovation, ils ont décidé de la rendre GPL et non BSD. La principale différence est la suivante : vous pouvez créer des programmes fermés dérivés de BSD, pas de GPL. Vous devez accorder un crédit approprié aux deux.
Notre produit commercial souhaite utiliser LibVNCServer pour créer notre propre serveur VNC et le distribuer. Cela sera-t-il considéré comme un travail dérivé dans le contexte GPLv2 ?
Oui. Veuillez noter que même si vous devrez vous en tenir à la GPL pour votre programme si vous créez un lien vers LibVNCServer/LibVNCClient, vous n'êtes pas obligé de rendre votre code public si vous utilisez le travail dérivé en interne dans votre organisation, voir https://www .gnu.org/licenses/gpl-faq.html#GPLRequireSourcePostedPublic
La modification du code LibVNCServer ne fait-elle aucune différence pour déterminer si notre serveur VNC sera considéré comme un travail dérivé ?
Non. En créant simplement un lien vers LibVNCServer/LibVNCClient, votre programme devient une œuvre dérivée.
Ce programme est un logiciel gratuit ; vous pouvez le redistribuer et/ou le modifier selon les termes de la licence publique générale GNU telle que publiée par la Free Software Foundation ; soit la version 2 de la Licence, soit (à votre choix) toute version ultérieure.
Ce programme est distribué dans l'espoir qu'il sera utile, mais SANS AUCUNE GARANTIE ; sans même la garantie implicite de QUALITÉ MARCHANDE ou d’ADAPTATION À UN USAGE PARTICULIER. Consultez la licence publique générale GNU pour plus de détails.
Vous devriez avoir reçu une copie de la licence publique générale GNU avec ce programme ; sinon, écrivez à la Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.