La conexión a un servidor VNC utilizando noVNC en un entorno web es una técnica poderosa que permite el acceso remoto a una interfaz gráfica de usuario (GUI) a través de un navegador web. El uso de noVNC en combinación con JavaScript facilita la creación de aplicaciones que no solo sean accesibles desde cualquier dispositivo, sino también sin la necesidad de instalar software adicional. En este artículo, exploraremos cómo configurar y conectar a un servidor VNC utilizando noVNC en JavaScript.
VNC (Virtual Network Computing) es un protocolo que permite controlar de manera remota otro equipo a través de una conexión de red. Mediante VNC, los usuarios pueden ver el escritorio de la máquina remota y controlar su ratón y teclado como si estuvieran físicamente presentes. VNC funciona basado en el protocolo RFB (Remote Frame Buffer), lo que facilita la interacción remota con entornos gráficos.
noVNC es una implementación cliente de VNC en JavaScript que permite interactuar con servidores VNC directamente desde un navegador. Utiliza WebSockets para comunicarse con el servidor VNC, haciendo posible acceder a una máquina remota sin tener que instalar ningún software cliente específico.
Ventajas de usar noVNC:
Antes de comenzar a configurar noVNC para conectar a un servidor VNC con JavaScript, es importante tener en cuenta los siguientes requisitos:
1. Servidor VNC en ejecución: Necesitas un servidor VNC activo y accesible en la red. Existen varias implementaciones de servidores VNC como TightVNC, RealVNC, y TigerVNC.
2. Servidor proxy WebSockets: noVNC se comunica utilizando WebSockets, pero los servidores VNC típicamente usan el protocolo RFB, por lo que necesitarás un proxy para traducir estas conexiones. Uno de los proxies más utilizados para este fin es websockify.
3. Servidor web: El cliente noVNC debe ser servido por un servidor web. Esto puede lograrse con servidores simples como nginx, Apache, o utilizando el servidor interno de websockify
.
A continuación, te mostramos cómo conectar a un servidor VNC desde un navegador usando noVNC y JavaScript.
Lo primero es obtener noVNC. Puedes clonar el repositorio oficial desde GitHub o descargar el archivo comprimido:
git clone https://github.com/novnc/noVNC.git
cd noVNC
Esto descargará el código fuente de noVNC en tu máquina.
Si no tienes un servidor VNC en ejecución, puedes configurar uno en la máquina remota. Por ejemplo, en una distribución de Linux con TightVNC:
sudo apt update
sudo apt install tightvncserver
tightvncserver :1
Esto iniciará un servidor VNC en el puerto 5901. Puedes cambiar la resolución o la profundidad de color ajustando los parámetros.
El siguiente paso es instalar y configurar websockify, que actuará como un puente entre el navegador (que usa WebSockets) y el servidor VNC (que utiliza el protocolo RFB):
sudo apt install python3-pip
pip3 install websockify
websockify --web ./ 5901 localhost:5901
Este comando inicia el proxy que redirige las conexiones WebSockets al puerto VNC 5901, y además sirve la aplicación noVNC desde el directorio actual (--web ./
).
noVNC ya incluye un cliente completamente funcional en su carpeta vnc_lite.html
o vnc_auto.html
, pero si deseas personalizar la conexión en tu propio archivo JavaScript, puedes hacerlo de la siguiente manera:
<!DOCTYPE html>
<html>
<head>
<title>Conexión noVNC</title>
<script src="path_to_noVNC/core/rfb.js"></script>
</head>
<body>
<h1>Conectar a un servidor VNC con noVNC</h1>
<canvas id="vnc_canvas" width="800" height="600"></canvas>
<script>
// Crear una nueva instancia de RFB (Remote Frame Buffer)
var rfb = new RFB({
target: document.getElementById('vnc_canvas'),
encrypt: false, // Usar true si tu conexión soporta TLS
repeaterID: '',
wsProtocols: ['binary'],
});
// Conectarse al servidor VNC a través del proxy WebSocket
rfb.connect('ws://localhost:5901', 'vnc_password', '');
</script>
</body>
</html>
1. Instancia de RFB: rfb
es el objeto que representa la conexión al servidor VNC. Este se configura apuntando a un elemento <canvas>
donde se renderizará la pantalla del servidor.
2. Conexión WebSocket: rfb.connect
abre una conexión WebSocket al proxy websockify
en el puerto 5901. El segundo argumento es la contraseña del servidor VNC, y el tercero es un identificador de sesión (si es necesario).
Finalmente, sirve el archivo HTML utilizando cualquier servidor web. Por ejemplo, puedes hacerlo con Python:
python3 -m http.server
Abre tu navegador y accede a http://localhost:8000
. Deberías poder ver la pantalla del servidor VNC y controlar la máquina remota desde tu navegador.
Conectar a un servidor VNC usando noVNC en JavaScript es una forma efectiva y sencilla de habilitar acceso remoto desde cualquier navegador web moderno. Al combinar tecnologías como WebSockets y VNC, es posible crear soluciones robustas para soporte remoto, administración de servidores o cualquier tarea que requiera interactuar con una interfaz gráfica de forma remota. Con la ayuda de noVNC y websockify, se pueden crear aplicaciones web eficientes y fáciles de usar, mejorando la accesibilidad sin comprometer la seguridad ni la funcionalidad.
Jorge García
Fullstack developer