VNC basado en xinetd con XDMP y GDM

A veces necesitamos tener acceso a alguna de nuestras máquinas  de forma remota y porqué no en modo gráfico. 

Entre varias de las opciones disponibles en el mundo linux, una de las más usadas y más veteranas es sin duda VNC. En la wikipedia podemos encontrar una explicación detallada de este sistema de compartición de escritorios.

En este tutorial explicaré como configurar vnc para que se levante de forma dinámica haciendo uso del daemon xinetd y de XDMP en un entorno linux y más concretamente Red Hat Enterprise 5 ( también aplicable a Centos y Fedora ) .

Lo primero de todo es tener instalados los paquetes gdm, vnc, vnc-server y xinetd:

[djlongo@djlongo ~]$ yum install gdm vnc vnc-server xinetd

Debemos de preparar xinetd para que se ejecute siempre al inicio:

[djlongo@djlongo ~]$ chkconfig xinetd on

Debemos de asegurarnos de que el runlevel en el que se ejecuta el sistema es el 5. Lo comprobamos en el archivo /etc/inittab.

El siguiente paso sería configurar GDM para habilitar XDMCP. En RHEL 3 o 4 , el archivo de configuración se encuentra en /etc/X11/gdm/gdm.conf. En RHEL 5 el archivo de configuración se encuentra en /etc/gdm/custom.conf.

    [xdmcp]
    Enable=true 

Si nuestra distribución es una fedora el archivo a editar es /etc/gdm/gdm.schemas. Cambiamos de false a true lo siguiente:

  <schema>
             <key>xdmcp/Enable</key>
             <signature>b</signature>
            <default>true</default>
  </schema>

Ahora debemos de crear el fichero /etc/xinetd.d/xvncserver con el siguiente contenido:


service vnc-server800x600 { 
    disable = no
    protocol = tcp   
    socket_type = stream    
    wait = no    
    user = nobody   
    server = /usr/bin/Xvnc  
    server_args = -inetd -query localhost -once -geometry 800x600 -depth 16 securitytypes=none 
}

Con los parámetros -geometry y -depth estamos indicando la resolución y profundidad de pantalla respectivamente. Escoge la más adecuada a tu tipo de conexión y a tus preferencias personales.

El siguiente paso que nos queda es habilitar el servicio en el fichero /etc/services. Editamos ese fichero añadiendo al final:

# VNC xinetd GDM 
vnc-server800x600 5908/tcp

Asegúrate de que el puerto esté libre y de que el nombre que le das al servicio es el mismo que indicaste en el fichero /etc/xinetd.d/xvncserver.

Para asegurarnos de que los cambios tomen efecto reiniciamos la máquina. Desde la misma máquina o desde cualquier otra que tenga un visor vnc instalados probamos que funciona correctamente, por ejemplo con el siguiente comando:

[djlongo@djlongo ~]$ vncviewer localhost:5908 &

Nos aparecerá la pantalla GDM lista para recibir las credenciales de cualquier usuario del sistema.

Vnc gdm

 

Nota 1: Por defecto, Gdm no dejará logearse al usuario root. Para permitirlo, debemos editar el fichero /etc/gdm/custom.conf o /etc/gdm/gdm.schemas según el caso y añadir en la sección security lo siguiente:

[security]
DisallowTCP=false
AllowRemoteRoot=true

Nota 2: Una vez logeados en una sesión vnc algunas de las aplicaciones administrativas del tipo system-config-* no funcionarán correctamente. Para que lo hagan añade en el .bash_profile del usuario la orden xhost +localhost