LibVNCServer: una biblioteca para una fácil implementación de un servidor VNC. Copyright (C) 2001-2003 Johannes E. Schindelin
Si tienes una pregunta general, lo mejor es preguntar en el chat de la comunidad. Si su inquietud es sobre un error o una solicitud de función, utilice el rastreador de problemas.
Si ya usó LibVNCServer, probablemente quiera leer NOTICIAS.
VNC es un conjunto de programas que utilizan el protocolo RFB (Remote Frame Buffer). Están diseñados para "exportar" un frame buffer a través de la red: usted configura un servidor y puede conectarse a él a través de visores VNC. Si el servidor admite WebSockets (lo que hace LibVNCServer), también puede conectarse utilizando un visor VNC en el navegador como noVNC.
Ya se utiliza ampliamente para la administración, pero no es tan fácil programar un servidor usted mismo.
Esto ha sido cambiado por LibVNCServer.
La página de inicio tiene una lista provisional de todos los proyectos que utilizan LibVNCServer, LibVNCClient o ambos.
Nombre | Número | ServidorLibVNC | LibVNCCliente |
---|---|---|---|
Ninguno | 1 | ✔ | ✔ |
Autenticación VNC | 2 | ✔ | ✔ |
SASL | 20 | ✔ | |
MSInicio de sesión | 0xfffffffa | ✔ | |
manzana ARD | 30 | ✔ | |
TLS | 18 | ✔ | |
VeNCrypt | 19 | ✔ | |
UltraVNC MSLogon II | 113 | ✔ |
Nombre | Número | ServidorLibVNC | LibVNCCliente |
---|---|---|---|
Crudo | 1 | ✔ | ✔ |
CopiarRect | 2 | ✔ | ✔ |
RRE | 3 | ✔ | ✔ |
CORRE | 4 | ✔ | ✔ |
hextil | 5 | ✔ | ✔ |
Zlib | 6 | ✔ | ✔ |
Ajustado | 7 | ✔ | ✔ |
Ultra | 9 | ✔ | ✔ |
TRLE | 15 | ✔ | |
ZRLE | 16 | ✔ | ✔ |
ZYWRLE | 17 | ✔ | ✔ |
ApretadoPNG | -260 | ✔ |
Nombre | ServidorLibVNC | LibVNCCliente |
---|---|---|
RFB | ✔ | ✔ |
RFB cifrado a través de VeNCrypt | ✔ | |
RFB cifrado a través de AnonTLS | ✔ | |
enchufes web | ✔ | |
Websockets cifrados | ✔ |
LibVNCServer usa CMake, que puedes descargar aquí o, mejor aún, instalar usando el administrador de paquetes de tu plataforma (apt, yum, brew, macports, chocolatey, etc.).
Luego puedes construir a través de:
mkdir build
cd build
cmake ..
cmake --build .
El soporte criptográfico en LibVNCClient y LibVNCServer puede usar diferentes backends:
-DWITH_OPENSSL=ON -DWITH_GCRYPT=OFF
)-DWITH_OPENSSL=OFF -DWITH_GCRYPT=ON
)-DWITH_OPENSSL=OFF -DWITH_GCRYPT=OFF
)El soporte de Transport Layer Security en LibVNCClient y LibVNCServer puede usar:
-DWITH_OPENSSL=ON -DWITH_GNUTLS=OFF
)-DWITH_OPENSSL=OFF -DWITH_GNUTLS=ON
)Para ver algunos ejemplos más completos que incluyen la instalación de dependencias, consulte las configuraciones de compilación de Unix CI y Windows CI.
Consulte https://developer.android.com/ndk/guides/cmake.html como referencia, pero básicamente se reduce a:
mkdir build
cd build
cmake .. -DANDROID_NDK= -DCMAKE_TOOLCHAIN_FILE= -DANDROID_NATIVE_API_LEVEL=
cmake --build .
Probado con MinGW-w64 en Debian, que debe instalar mediante sudo apt install mingw-w64
. Puede utilizar el archivo de cadena de herramientas proporcionado. Configura CMake para que espere dependencias win32 (opcionales) como libjpeg y amigos en el directorio deps
. Tenga en cuenta que necesita paquetes de desarrollo (probablemente de construcción propia) para win32; los paquetes -dev
que vienen con su distribución no funcionarán. También tenga en cuenta que deberá colocar libwinpthread-1.dll
en el directorio de compilación para ejecutar los ejemplos. Puede encontrar esta DLL en su máquina de compilación Linux mediante locate libwinpthread-1.dll
.
mkdir build
cd build
cmake -DCMAKE_TOOLCHAIN_FILE=../cmake/Toolchain-cross-mingw32-linux.cmake ..
cmake --build .
Consulte la documentación de introducción a la API LibVNCServer para saber cómo crear una instancia de servidor, conectar controladores de entrada y manejar cursores.
En caso de que prefiera aprender LibVNCServer con el ejemplo, eche un vistazo a los servidores en el directorio ejemplos/servidor.
Para LibVNCClient, se pueden encontrar ejemplos en ejemplos/cliente.
El proceso de instalación instala archivos pkg-config .pc para LibVNCServer así como LibVNCClient que puede usar en su sistema de compilación a través del habitual pkg-config --cflags libvncserver
et al.
Si usa CMake, las versiones de LibVNCServer > 0.9.13 proporcionan archivos de configuración de CMake, por lo que en el CMakeLists.txt de su proyecto, puede decir:
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 ()
Puede probar la compatibilidad con websockets integrada iniciando el servidor de ejemplo desde el directorio webclients a través de ../examples/example
. Es importante no comenzar desde el directorio examples
porque, de lo contrario, el programa del servidor no encontrará su archivo de índice HTTP. El programa del servidor le indicará una URL a la que dirigir su navegador web. Allí, puede hacer clic en el botón noVNC para conectarse utilizando el submódulo git del visor noVNC (instalable mediante git submodule update --init
).
Si aún no tiene un certificado SSL en el que su navegador confíe, la forma más cómoda de crear uno es usando minica. En distribuciones basadas en Debian, puede instalarlo mediante sudo apt install minica
, en MacOS mediante brew install minica
.
Vaya al directorio de clientes web y cree certificados de host y CA a través de:
cd webclients
minica -org "LibVNC" $(hostname)
Confíe en el certificado en su navegador importando el cacert.crt
creado, por ejemplo, para Firefox, vaya a Opciones->Privacidad y seguridad->Ver certificados->Autoridades e importe el cacert.crt
creado, marque la casilla de verificación para usarlo en sitios web de confianza. Para otros navegadores, el proceso es similar.
Luego, finalmente puede iniciar el servidor de ejemplo, proporcionándole la clave de host y el certificado creados:
../examples/example -sslkeyfile $(hostname).key -sslcertfile $(hostname).crt
El programa del servidor le indicará una URL a la que dirigir su navegador web. Allí, puede hacer clic en el botón de conexión cifrada noVNC para conectarse utilizando el visor noVNC incluido mediante una conexión Websockets cifrada.
Si su conexión cliente-servidor es lenta porque el enlace es "lento", hay algunas cosas a considerar.
En primer lugar, debe investigar si su enlace tiene un rendimiento bajo, una latencia alta o ambas cosas.
En un enlace de alta latencia, intente solicitar actualizaciones de framebuffer continuamente, ya que RFB es de extracción del cliente de forma predeterminada, no de inserción del servidor. Puede encontrar un ejemplo de implementación aquí y definitivamente mejora la capacidad de respuesta.
También existe la extensión RFB de Actualizaciones Continuas, pero LibVNC no la admite (todavía).
Si su enlace tiene un rendimiento bajo, básicamente debe reducir la cantidad de bytes que se envían por actualización del framebuffer:
Al comienzo de este proyecto, a Dscho, el autor original, le hubiera gustado convertirlo en una licencia BSD. Sin embargo, se basa en una gran cantidad de código GPL, por lo que tiene que ser una GPL.
La gente de AT&T trabajó muy bien para producir algo tan limpio y sencillo como VNC. Los directivos decidieron que, por su fama, lanzarían el programa de forma gratuita. ¡Pero no sólo eso! Se dieron cuenta de que al publicar también el código de forma gratuita, VNC se convertiría en un niño pequeño en evolución, conquistando nuevos mundos, enorgulleciendo a sus padres. ¡Qué bien pueden serlo! Para proteger esta innovación, decidieron convertirla en GPL, no en BSD. La principal diferencia es: puedes crear programas de código cerrado que deriven de BSD, no de GPL. Tienes que dar el crédito adecuado a ambos.
Nuestro producto comercial quiere utilizar LibVNCServer para crear nuestro propio servidor VNC y distribuirlo. ¿Se considerará esto un trabajo derivado en el contexto de GPLv2?
Sí. Tenga en cuenta que, si bien tendría que ceñirse a la GPL para su programa si se vincula a LibVNCServer/LibVNCClient, no tiene que hacer público su código en caso de que utilice el trabajo derivado internamente en su organización, consulte https://www. .gnu.org/licenses/gpl-faq.html#GPLRequireSourcePostedPublic
¿Modificar o no el código de LibVNCServer hace alguna diferencia a la hora de determinar si nuestro servidor VNC se considerará trabajo derivado?
No. Simplemente vinculándolo a LibVNCServer/LibVNCClient, su programa se convierte en un trabajo derivado.
Este programa es software gratuito; puede redistribuirlo y/o modificarlo según los términos de la Licencia Pública General GNU publicada por la Free Software Foundation; ya sea la versión 2 de la Licencia o (a su elección) cualquier versión posterior.
Este programa se distribuye con la esperanza de que sea de utilidad, pero SIN NINGUNA GARANTÍA; sin siquiera la garantía implícita de COMERCIABILIDAD o IDONEIDAD PARA UN PROPÓSITO PARTICULAR. Consulte la Licencia pública general de GNU para obtener más detalles.
Debería haber recibido una copia de la Licencia Pública General GNU junto con este programa; en caso contrario, escriba a Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, EE. UU.