x11vnc es un programa servidor de Computación en Red Virtual (VNC). Permite el acceso remoto desde un cliente remoto a una computadora que aloja una sesión de X Window y el software x11vnc, sondeando continuamente [4] el búfer de cuadros del servidor X en busca de cambios. Esto permite al usuario controlar su escritorio X11 ( KDE , GNOME , Xfce , etc.) desde una computadora remota ya sea en la propia red del usuario o desde Internet como si el usuario estuviera sentado frente a él. x11vnc también puede sondear dispositivos con búfer de cuadros que no sean X11, como cámaras web o tarjetas sintonizadoras de TV , iPAQ , Neuros OSD , la consola Linux y la pantalla gráfica de Mac OS X. x11vnc es parte del proyecto LibVNCServer [1] y es software libre disponible bajo la Licencia Pública General de GNU . x11vnc fue escrito por Karl Runge.
x11vnc no crea una pantalla adicional (o escritorio X) para el control remoto. En su lugar, utiliza la pantalla X11 existente que se muestra en el monitor de una computadora tipo Unix en tiempo real, a diferencia de otras alternativas de Linux como TightVNC Server. Sin embargo, es posible utilizar Xvnc o Xvfb para crear una pantalla adicional "virtual" y hacer que x11vnc se conecte a ella, lo que permite el acceso X-11 a servidores sin interfaz gráfica . [5]
x11vnc tiene funciones de seguridad que permiten al usuario establecer una contraseña de acceso o utilizar nombres de usuario y contraseñas Unix . También tiene opciones para conectarse a través de un enlace SSL seguro . [4] Se proporciona un subprograma de visor SSL Java VNC que permite conexiones seguras desde un navegador web . También se admite el tipo de seguridad VNC SSL/TLS VeNCrypt.
Muchas de las extensiones de UltraVNC para VNC son compatibles con x11vnc, incluida la transferencia de archivos. [6]
x11vnc mantiene una copia del búfer de trama del servidor X en la RAM . La interfaz de programación X11XShmGetImage
se utiliza para recuperar los datos de píxeles del búfer de trama . x11vnc compara el búfer de trama del servidor X con su copia para ver qué regiones de píxeles han cambiado (y, por lo tanto, deben enviarse a los visores VNC). La lectura de datos de píxeles del búfer de trama físico puede ser mucho más lenta que la escritura en él (porque los dispositivos gráficos no están optimizados para la lectura) y, por lo tanto, una verificación secuencial píxel por píxel a menudo sería demasiado lenta.
Para mejorar la situación, x11vnc lee filas completas de píxeles separados por 32 píxeles verticalmente. Una vez que llega a la parte inferior de la pantalla, comienza de nuevo cerca de la parte superior con un desplazamiento ligeramente diferente. Después de 32 pasadas de este modo, ha cubierto toda la pantalla. Este método permite a x11vnc detectar cambios en la pantalla aproximadamente 32 veces más rápido que una comprobación secuencial (a menos que los cambios sean muy pequeños, digamos de solo 1 píxel de alto). Si la extensión X11 DAMAGE está presente, x11vnc la utiliza para proporcionar sugerencias sobre dónde centrar su sondeo, lo que permite encontrar cambios incluso más rápidamente y también reducir la carga del sistema.
Cuando x11vnc recibe eventos de entrada del usuario (pulsaciones de teclas, movimiento del puntero y clics del botón del puntero) desde un visor VNC, debe inyectarlos sintéticamente en el servidor X. Para lograr esto se utilizan las interfaces de programación X11XTestFakeKeyEvent
, XTestFakeMotionEvent
, y XTestFakeButtonEvent
de la extensión XTEST.
Para dispositivos no administrados por X11 (como la pantalla gráfica de Mac OS X ) se deben utilizar diferentes interfaces de programación. x11vnc también proporciona una interfaz donde el usuario puede suministrar su propio programa de inyección de entrada.
A menudo, los sistemas de propósito especial se construyen utilizando el sistema X Window para administrar la pantalla gráfica. x11vnc se puede utilizar para exportar la pantalla del sistema para el acceso remoto a VNC. Esto permite la supervisión, el control y la resolución de problemas remotos del sistema de propósito especial. A veces, esto ahorra el envío de un técnico a un sitio remoto o permite a los usuarios controlar el equipo desde su estación de trabajo o computadora portátil. Se sabe que x11vnc se ha ejecutado en los siguientes tipos de sistemas: microscopio electrónico , sistema de análisis de imágenes de resonancia magnética y radiología , consolas de gestión de plantas de energía y plataformas petrolíferas , control de distribución de materiales, prueba del sistema de autodefensa de barcos, sistemas de RMN , microscopio de análisis de obleas de silicio y control de iluminación de teatros y conciertos. x11vnc se utiliza para exportar las pantallas X11 en sistemas integrados como PDA basados en Linux y PC de cine en casa .
Si no se puede ejecutar x11vnc en el sistema de propósito especial, a veces se puede ejecutar en una computadora cercana y sondear el búfer de trama del servidor X a través de la red. Así es como se puede acceder a los dispositivos terminales X propietarios a través de x11vnc.
Aunque el uso principal de x11vnc es para servidores X asociados con hardware de gráficos físicos, también puede conectarse a servidores X virtuales (cuyos búferes de cuadros existen solo en RAM) como Xvfb o una sesión de Sun Ray . x11vnc tiene opciones ( -create
y -svc
) para iniciar Xvfb automáticamente, posiblemente como el usuario de Unix que inició sesión. La respuesta interactiva de x11vnc y Xvfb puede no ser tan rápida como la de Xvnc , sin embargo, este modo habilita funciones que Xvnc no tiene, como el cifrado SSL y los nombres de usuario y contraseñas de Unix.
El protocolo RFB (VNC) es extraño en comparación con otros protocolos de gráficos de red, como X11 y RDP , ya que no hay ninguna disposición para el almacenamiento en caché de los datos de píxeles del lado del espectador. Si bien esto hace que el cliente sea más fácil de implementar, hay un precio que pagar en términos de respuesta interactiva. Por ejemplo, cada vez que se vuelve a exponer una ventana o una región de fondo, es necesario volver a enviar los datos de píxeles (comprimidos) a través de la red. Este efecto es particularmente notable en el caso de ventanas con regiones complejas o con fotografías (como una ventana de navegador web) que se iconizan y desiconifican o se vuelven a exponer con frecuencia.
x11vnc tiene una implementación experimental y algo forzada del almacenamiento en caché del lado del cliente. Se habilita a través de la -ncache
opción. Al crear el búfer de trama RFB en este modo, x11vnc asigna una región de borrador muy grande debajo de la porción superior utilizada para los datos de píxeles reales (en pantalla). x11vnc puede usar el comando RFB CopyRect para indicarle al visor que mueva rectángulos de datos de píxeles dentro y fuera de la región de borrador. Estos movimientos se realizan localmente en el lado del visor. De esta manera, x11vnc puede administrar la región de borrador para almacenar y recuperar datos de píxeles sin tener que reenviarlos a través de la red.
El modo de almacenamiento en caché del lado del cliente de x11vnc puede brindar mejoras notables en la respuesta interactiva para muchas actividades.
Dado que utiliza el comando RFB CopyRect existente, el esquema funcionará con cualquier visor VNC (es decir, sin modificar). Sin embargo, existen algunas desventajas. La primera es que consume una gran cantidad de memoria. Para un buen rendimiento, se debe utilizar una región de borrador de 10 a 20 veces más grande que la pantalla real. Por lo tanto, en lugar de utilizar 5 MB para un búfer de cuadros de color verdadero de 1280x1024, se utilizarán cerca de 100 MB (tanto en el lado del cliente como del servidor VNC). [7] Esto no es un gran problema en las computadoras modernas, pero no sería posible en un dispositivo con poca memoria. En segundo lugar, el visor VNC puede tratar la región de borrador de formas que confundan al usuario, por ejemplo, mostrándola al usuario o haciendo una panorámica automática hacia abajo si el mouse llega al final de la pantalla real. El visor VNC de Unix en SSVNC oculta automáticamente la región de borrador. Por último, las heurísticas de x11vnc para almacenar en caché y reutilizar los datos de píxeles de la ventana no son perfectas y pueden provocar un parpadeo inesperado del contenido de una ventana y otros efectos no deseados.