VNC ( Virtual Network Computing )
Versión original inglesa mantenida por: GeraldClark y PJWelsh
VNC se usa para mostrar una sesión de X window corriendo en otra computadora. Al contrario que en una conexión X remota, el servidor X (xserver) corre en la computadora remota, no en la estación de trabajo local. Su estación (Linux o Windows) solamente muestra una copia del display (real o virtual) que está corriendo en la máquina remota.
Hay varias maneras de configurar el servidor VNC. Este HOWTO describe cómo configurar VNC usando el servicio vncserver provisto por CentOS.
Contents
1. Instalando los paquetes necesarios
El paquete servidor se llama 'vnc-server'. Corra el comando rpm -q vnc-server. El resultado será, o bien package vnc-server is not installed (el paquete no está instalado) o algo como vnc-server-4.0-11.el4.
Si el servidor no está instalado, instálelo con el comando yum install vnc-server.
El programa cliente es 'vnc'. Si el comando rpm -q vnc muestra que no se encuentra instalado, puede usar el comando yum install vnc para instalar el cliente.
Debe tener instalado un gestor de ventanas para obtener un escritorio gráfico normal. Puede usar el comando yum groupinstall "GNOME Desktop Environment" para instalar el escritorio Gnome y sus requerimientos. Otros ambientes de escritorio populares son KDE y XFCE-4.4. XFCE es más liviano que Gnome o KDE, y está disponible en el repositorio extras.
|
Nota: Si corre CentOS 5, el comando yum groupinstall "GNOME Desktop Environment" puede emitir mensajes de que falta libgaim.so.0. Este es un bug conocido. Para detalles por favor diríjase a la FAQ de CentOS5. |
2. Configuración de VNC sin encriptación
Prepararemos VNC para tres usuarios. Se llamarán 'larry', 'moe', y 'curly'.
Usted ejecutará los siguientes pasos para configurar su servidor VNC:
- Crear sus usuarios VNC.
- Fijar las passwords de sus usuarios.
- Editar la configuración del servidor.
- Crear y adaptar los scripts de xstartup.
- Arrancar el servicio VNC.
- Probar los usuarios VNC.
- Preparar el servicio VNC para que arranque al inicio.
- Otras mejoras opcionales.
2.1. Crear los usuarios VNC
Como root:
$ su - # useradd larry # useradd moe # useradd curly # passwd larry # passwd moe # passwd curly
2.2. Fijar las passwords de sus usuarios VNC
Inicie sesión como un usuario, y corra vncpasswd. Esto creará un directorio .vnc.
[~]$ cd .vnc [.vnc]$ ls passwd
2.3. Editar la configuración del servidor
Edite el archivo /etc/sysconfig/vncservers, y agregue lo siguiente al final del archivo:
VNCSERVERS="1:larry 2:moe 3:curly" VNCSERVERARGS[1]="-geometry 640x480" VNCSERVERARGS[2]="-geometry 640x480" VNCSERVERARGS[3]="-geometry 800x600"
Larry tendrá una pantalla de 640 x 480, lo mismo que Moe. Curly tendrá una pantalla de 800 x 600.
2.4. Crear scripts para xstartup
Crearemos los scripts de xstartup arrancando y deteniendo el servidor vncserver como root.
# /sbin/service vncserver start # /sbin/service vncserver stop
Inicie sesión como cada usuario y edite el script xstartup. Utilizando a Larry como ejemplo, primero ingrese como larry:
[~]$ cd .vnc [.vnc] ls mymachine.localnet:1.log passwd xstartup
Edite xstartup. El original debe verse así:
# Uncomment the following two lines for normal desktop: # unset SESSION_MANAGER # exec /etc/X11/xinit/xinitrc [ -x /etc/vnc/xstartup ] && exec /etc/vnc/xstartup [ -r $HOME/.Xresources ] && xrdb $HOME/.Xresources xsetroot -solid grey vncconfig -iconic & xterm -geometry 80x24+10+10 -ls -title "$VNCDESKTOP Desktop" & twm &
Agregue la línea indicada debajo para asegurar que siempre esté presente un xterm, y descomente las dos líneas como se indica si desea correr el gestor de ventanas normal del usuario en el VNC. Note que en la resolución y profundidad de color, probablemente reducidas, de una ventana VNC, el escritorio completo se verá más bien apretado y lucirá un poco raro. Si no descomenta las dos líneas obtendrá un fondo con lluvia gris en la ventana VNC.
# Add the following line to ensure you always have an xterm available. ( while true ; do xterm ; done ) & # Uncomment the following two lines for normal desktop: unset SESSION_MANAGER exec /etc/X11/xinit/xinitrc [ -x /etc/vnc/xstartup ] && exec /etc/vnc/xstartup [ -r $HOME/.Xresources ] && xrdb $HOME/.Xresources xsetroot -solid grey vncconfig -iconic & xterm -geometry 80x24+10+10 -ls -title "$VNCDESKTOP Desktop" & twm &
2.5. Arrancar el servidor VNC
Arranque el vncserver como root.
# /sbin/service vncserver start
2.6. Probar los usuarios VNC
2.6.1. Probando con un navegador con Java habilitado
Supongamos que mi_maquina tiene una dirección IP 192.168.0.10. El URL para conectarse a cada usuario será:
Larry : http://192.168.0.10:5801 Moe : http://192.168.0.10:5802 Curly : http://192.168.0.10:5803
Conéctese a http://192.168.0.10:5801. Aparecerá una ventana de applet Java mostrando una conexión a su máquina en el puerto 1. Haga click en el botón [OK]. Ingrese la password de larry, y deberá abrirse una ventana de 640x480 usando el gestor de ventanas por defecto seleccionado por larry. Los puertos de arriba, 5801, 5802 y 5803, deben estar abiertos en el firewall para las direcciones IP o subredes de un cliente dado.
2.6.2. Probando con un cliente VNC
Para Larry: vncviewer 192.168.0.10:1 Para Moe: vncviewer 192.168.0.10:2 Para Curly: vncviewer 192.168.0.10:3
Para probar el usuario larry usando vncviewer, use el comando vncviewer 192.168.0.10:1. Ingrese la password de VNC de larry, y deberá abrirse una ventana de 640x480 usando el gestor de ventanas por defecto seleccionado por larry. El vncviewer se conectará al puerto 590X, donde X es 1, 2, o 3 para larry, moe, o curly, respectivamente. Por lo tanto estos puertos deben estar abiertos en el firewall para las direcciones IP o subredes de los clientes.
2.6.3. Arrancando vncserver al inicio
Para arrancar vncserver al inicio, ingrese el comando /sbin/chkconfig vncserver on.
El procedimiento para configuración básica de VNC ya está completo. Las siguientes secciones son refinamientos opcionales para mejorar la seguridad y la funcionalidad.
3. VNC encriptado a través de un túnel SSH
Usted se conectará a través de un túnel SSH. Necesitará ser capaz de establecer sesión SSH como usuario de la máquina. Para este ejemplo, el usuario en la máquina servidora VNC es larry.
Edite /etc/sysconfig/vncservers, y agregue la opción -localhost.
VNCSERVERS="1:larry 2:moe 3:curly" VNCSERVERARGS[1]="-geometry 640x480 -localhost" VNCSERVERARGS[2]="-geometry 640x480 -localhost" VNCSERVERARGS[1]="-geometry 800x600 -localhost"
/sbin/service vncserver restart
Desde otra máquina con vncviewer (visor VNC), pruebe el VNC.
vncviewer -via larry@192.168.0.10 localhost:1
vncviewer -via moe@192.168.0.10 localhost:2
vncviewer -via curly@192.168.0.10 localhost:3
Por defecto, muchos visores VNC deshabilitarán las opciones de compresión para lo que creen ser una conexión "local". Recuerde verificar con la página man del vncviewer para habilitar o forzar la compresión. De lo contrario, la performance puede ser muy mala.
4. Recuperación luego de salida de sesión
Si sale de la sesión del gestor de escritorio (logout), todo se acabó!
- Agregamos una línea al xstartup para darnos un xterm desde donde podamos reiniciar nuestro gestor de ventanas.
Para Gnome, escriba gnome-session.
Para KDE, startkde.
5. Login remoto con vnc-ltsp-config
Para permitir acceso de login remoto a través de un cliente VNC al sistema CentOS, se pueden instalar los paquetes RPM llamados vnc-ltsp-config y xinetd. Cuando un cliente VNC se conecta a uno de los puertos configurados, el usuario recibirá una pantalla de login. Las sesiones no serán persistentes. Cuando el usuario se desconecta, la sesión se acaba.
El paquete RPM vnc-ltsp-config se instala muy fácilmente mediante el repositorio EPEL, que figura cerca del pie de Repositorios Disponibles.
|
Nota: No hay dependencias importantes para el paquete, de manera que el RPM vnc-ltsp-config*.rpm podría fácilmente ser descargado e instalado sin necesidad de habilitar el repositorio EPEL. |
Instale como root mediante:
# yum install xinetd vnc-ltsp-config # /sbin/chkconfig xinetd on # /sbin/chkconfig vncts on # /sbin/service xinetd restart
Luego, como root, edite el archivo /etc/gdm/custom.conf.
En la línea en blanco siguiente debajo de [security] agregue DisallowTCP=false
En la línea en blanco siguiente debajo de [xdmcp] agregue Enable=true
Compruebe que sea posible correr gdm-restart para las instalaciones Gnome por defecto, o reiniciar el sistema CentOS.
Esto añadirá la capacidad de obtener las siguientes conexiones de cliente VNC:
resolución |
color |
puerto |
1024x768 |
16 |
5900/tcp |
800x600 |
16 |
5901/tcp |
640x480 |
16 |
5902/tcp |
1024x768 |
8 |
5903/tcp |
800x600 |
8 |
5904/tcp |
640x480 |
8 |
5905/tcp |
Una gran ventaja de usar la configuración de vnc-ltsp-config es la reducción de la utilización de los recursos del sistema, comparado con la configuración estándar "por usuario". No habrá procesos de usuario iniciándose ni memoria consumida hasta que un usuario efectivamente ingrese al sistema. Además, no hace falta planear ninguna configuración de usuario (es decir, se saltea toda la configuración individual de usuarios de vnc-server). La desventaja es que cualquier usuario con capacidad de ingresar al sistema tendrá la posibilidad de ingresar desde un cliente VNC con interfaz gráfica completa, a menos que se tomen medidas para limitar ese tipo de acceso. Además, no hay persistencia de sesiones. Una vez que se cierra el cliente VNC, la sesión vnc-ltsp-config, por defecto, se termina y todos los procesos corriendo serán matados.
Esta opción puede ser combinada con el tunneling SSH usando una versión ligeramente modificada del comando vncviewer -via como se detalla más abajo.
vncviewer -via remoteUser@remoteHost localhost:vncSinglePortNumber
En la instalación por defecto de vnc-ltsp-config, el vncSinglePortNumber es solamente el último dígito del número de puerto. El puerto 5900 (1024x768 16bit) sería sólo "0", por ejemplo.
|
Nota: Deberá ser consciente de los posibles problemas de interacción si habilita ya sea selinux o iptables. |
6. VNC-Server para una sesión en GUI ya establecida, dos opciones
A veces necesitará acceso remoto a una sesión gráfica ya establecida en una consola "real". O bien, querrá ayudar a otro usuario remotamente con un problema de visualización o de GUI. Necesitará, o bien vnc-server, o x11vnc. La opción de vnc-server será un módulo agregado a X11 para tener soporte VNC "siempre encendido", mientras que x11vnc le brindará soporte VNC ad hoc.
La instalación de vnc-server no requerirá repositorios de terceros ni compilación de fuentes.
X11vnc es una forma de "visualizar e interactuar remotamente con displays X reales (es decir, un display correspondiente a un monitor, teclado y mouse físicos) con cualquier visualizador VNC. De esta forma, juega el rol para Unix/X11 que juega WinVNC para Windows".
6.1. Opción x11vnc ad hoc
Karl Runge ha ofrecido generosamente una excepcional cantidad de información sobre x11vnc en http://www.karlrunge.com/x11vnc. Hay información sobre segurización de la conexión y también un visualizador TightVNC mejorado, o Enhanced TightVNC Viewer (ssvnc). Para facilitar las cosas, siga estos pasos:
1. Descargue el último RPM para instalar desde http://dag.wieers.com/rpm/packages/x11vnc/ al host al cual quiere conectarse con el cliente:
wget http://dag.wieers.com/rpm/packages/x11vnc/x11vnc-0.9.3-1.el5.rf.i386.rpm
2. Instale, como root, por medio de yum o rpm, en el host al cual quiere conectarse con el cliente:
yum install x11vnc-0.9.3-1.el5.rf.i386.rpm
3. Inicie el proceso x11vnc en el host al cual quiere conectarse con el cliente. Por favor, tómese un tiempo para considerar las posibles opciones del sitio web de x11vnc. Un ejemplo muy simple e inseguro, diseñado para una red confiable (red local o VPN), es hacer que el usuario con la consola gráfica emita el comando:
[user@helpme_host ~$] x11vnc -nopw -display :0.0
Y luego conectarse (sin password) con un cliente VNC a la dirección IP, o nombre del equipo, y puerto, señalados por el comando x11vnc. Por defecto, x11vnc permite conexiones por todas las interfaces. Puede ser necesario modificar los ajustes de los firewalls locales.
Esto se puede combinar con tunneling SSH:
ssh -C -t -L 5900:localhost:5900 [remote ip] 'x11vnc -usepw -localhost -display :0'
Note que la opción -C es para compresión, así que quizás no se la requiera.
6.2. Opción "always on" de vnc-server X11
1. En el sistema donde quiere correr vnc-server, instale vnc-server como se indicó anteriormente.
2. Edite /etc/X11/xorg.conf como root; agregue o cree una sección Module, y añada allí Load "vnc":
Section "Module" Load "vnc" EndSection
3. Para autenticar VNC en forma estándar, edite /etc/X11/xorg.conf, como root, y agregue a la sección Screen:
Option "SecurityTypes" "VncAuth" Option "UserPasswdVerifier" "VncAuth" Option "PasswordFile" "/root/.vnc/passwd"
4. Como root, corra vncpasswd para crear la password indicada arriba.
5. Reinicie X11 (<Ctrl>+<Alt>+<BS> funcionará si ya está en la consola)
6. Debería poder conectarse con un cliente vncviewer normalmente.
7. Si hay problemas, compruebe si hay mensajes de error en /var/log/Xorg.0.log o verifique que ni iptables ni selinux estén interfiriendo con las conexiones remotas. Hay más información en http://www.realvnc.com/products/free/4.1/x0.html
Algunos usuarios han encontrado útil este Tutorial de Fedora.