--- title: "Cómo instalar un servidor VNC con TigerVNC en Ubuntu 24.04" description: "Instala TigerVNC y el escritorio XFCE en Ubuntu 24.04, arranca la sesión con systemd y conéctate de forma segura a través de un túnel SSH desde tu equipo." category: "Acceso Remoto" language: es source: https://cubepath.com/es/docs/acceso-remoto/instalacion-de-servidor-vnc-en-linux updated: 2026-09-25 --- # Cómo instalar un servidor VNC con TigerVNC en Ubuntu 24.04 VNC (Virtual Network Computing) permite ver y controlar un escritorio gráfico remoto desde cualquier sistema operativo con un visor VNC. En este tutorial instalarás TigerVNC y el entorno de escritorio XFCE en un servidor Ubuntu 24.04, configurarás la sesión como servicio de systemd y te conectarás a ella a través de un túnel SSH, sin exponer el puerto VNC a Internet. ## Requisitos previos Para seguir esta guía necesitas: - Un servidor con Ubuntu 24.04 LTS, por ejemplo un VPS de CubePath, con al menos 2 GB de RAM (el escritorio consume memoria aunque nadie esté conectado). - Un usuario no root con privilegios `sudo`. En esta guía se llama `your_user`; sustitúyelo por el tuyo. - Acceso SSH al servidor y el puerto 22 permitido en el firewall. - Un visor VNC en tu equipo local: TigerVNC Viewer (Windows, macOS y Linux), Remmina (Linux) o el cliente VNC integrado de macOS. ## Paso 1: Instalar el entorno de escritorio XFCE Un servidor Ubuntu no trae interfaz gráfica. XFCE es ligero y funciona bien sobre VNC, a diferencia de GNOME, que depende de aceleración gráfica. Instala el escritorio y `dbus-x11`, que las aplicaciones de XFCE necesitan para arrancar dentro de la sesión VNC: ```bash sudo apt update sudo apt install xfce4 xfce4-goodies dbus-x11 ``` Si durante la instalación aparece la pregunta sobre el gestor de pantalla (`gdm3` o `lightdm`), elige `lightdm`. No lo vas a usar para VNC, pero es el más ligero. Comprueba que el lanzador de XFCE está disponible: ```bash which startxfce4 ``` ```output /usr/bin/startxfce4 ``` ## Paso 2: Instalar TigerVNC TigerVNC está en los repositorios oficiales de Ubuntu. El paquete `tigervnc-standalone-server` contiene el servidor `Xvnc` y el script `vncserver`, y `tigervnc-tools` incluye `vncpasswd`: ```bash sudo apt install tigervnc-standalone-server tigervnc-tools ``` Verifica que el paquete está instalado: ```bash dpkg -l tigervnc-standalone-server | tail -n 1 ``` ```output ii tigervnc-standalone-server 1.13.1+dfsg-2build2 amd64 Standalone virtual network computing server ``` ## Paso 3: Establecer la contraseña VNC Los pasos siguientes se ejecutan como el usuario que va a usar el escritorio, no como root. Define la contraseña que pedirá el visor al conectar: ```bash vncpasswd ``` ```output Password: Verify: Would you like to enter a view-only password (y/n)? n ``` > Importante: la autenticación VNC clásica solo usa los primeros 8 caracteres de la contraseña. Por eso en esta guía el servidor solo escuchará en `localhost` y el acceso real estará protegido por SSH. La contraseña se guarda cifrada en `~/.vnc/passwd`. ## Paso 4: Configurar el arranque del escritorio Cuando arranca una sesión, `vncserver` ejecuta el script `~/.vnc/xstartup`. Créalo para que lance XFCE: ```bash nano ~/.vnc/xstartup ``` ```bash #!/bin/sh unset SESSION_MANAGER unset DBUS_SESSION_BUS_ADDRESS exec startxfce4 ``` Las dos líneas `unset` evitan que XFCE intente reutilizar el bus D-Bus de tu sesión SSH, lo que provoca una pantalla gris o que el escritorio se cierre al instante. Haz el script ejecutable: ```bash chmod +x ~/.vnc/xstartup ``` ## Paso 5: Probar la sesión manualmente Antes de crear el servicio, arranca una sesión en el display `:1`. Cada display N escucha en el puerto 5900 + N, así que `:1` usa el puerto 5901. La opción `-localhost yes` hace que solo acepte conexiones desde el propio servidor, y `-geometry` fija la resolución del escritorio: ```bash vncserver :1 -localhost yes -geometry 1920x1080 -depth 24 ``` Comprueba que la sesión está activa y que solo escucha en `127.0.0.1`: ```bash vncserver -list ss -tln | grep 5901 ``` ```output TigerVNC server sessions: X DISPLAY # RFB PORT # RFB UNIX PATH PROCESS ID # SERVER :1 5901 12345 Xtigervnc LISTEN 0 5 127.0.0.1:5901 0.0.0.0:* ``` Si en lugar de `127.0.0.1:5901` ves `0.0.0.0:5901`, comprueba que has pasado `-localhost yes`. Detén la sesión de prueba, porque a partir de ahora la gestionará systemd: ```bash vncserver -kill :1 ``` ## Paso 6: Crear un servicio de systemd Un servicio de systemd arranca la sesión VNC al iniciar el servidor y la reinicia si falla. Crea una unidad con plantilla, donde el número tras `@` es el display: ```bash sudo nano /etc/systemd/system/vncserver@.service ``` ```ini [Unit] Description=TigerVNC server en el display %i After=network.target [Service] Type=forking User=your_user Group=your_user WorkingDirectory=/home/your_user ExecStartPre=-/usr/bin/vncserver -kill :%i ExecStart=/usr/bin/vncserver :%i -localhost yes -geometry 1920x1080 -depth 24 ExecStop=/usr/bin/vncserver -kill :%i Restart=on-failure RestartSec=5 [Install] WantedBy=multi-user.target ``` Sustituye `your_user` en las tres líneas por tu usuario. La opción `-kill` de `ExecStartPre` lleva el prefijo `-` para que un fallo (no había sesión previa) no impida el arranque. Recarga systemd y activa el servicio para el display 1: ```bash sudo systemctl daemon-reload sudo systemctl enable --now vncserver@1.service ``` Comprueba el estado: ```bash sudo systemctl status vncserver@1.service ``` ```output ● vncserver@1.service - TigerVNC server en el display 1 Loaded: loaded (/etc/systemd/system/vncserver@.service; enabled; preset: enabled) Active: active (running) since ... ``` ## Paso 7: Conectarse a través de un túnel SSH VNC no cifra el tráfico por sí mismo, así que no abras el puerto 5901 en el firewall. En su lugar, crea un túnel SSH desde tu equipo local que redirija el puerto 5901 local al 5901 del servidor. Sustituye `your_server_ip` por la IP de tu servidor: ```bash ssh -L 5901:localhost:5901 -N your_user@your_server_ip ``` El comando se queda en primer plano sin mostrar nada: el túnel está abierto mientras siga en ejecución. En Windows puedes usar el mismo comando en PowerShell, que incluye OpenSSH. Con el túnel abierto, abre tu visor VNC y conéctate a `localhost:5901`. En macOS también puedes abrir Finder y usar **Ir > Conectarse al servidor** con la dirección `vnc://localhost:5901`. Introduce la contraseña del paso 3 y verás el escritorio XFCE. Asegúrate de que en el firewall solo está permitido SSH: ```bash sudo ufw allow OpenSSH sudo ufw enable sudo ufw status ``` ```output Status: active To Action From -- ------ ---- OpenSSH ALLOW Anywhere OpenSSH (v6) ALLOW Anywhere (v6) ``` ## Varios usuarios Cada usuario necesita su propio display, su contraseña (`vncpasswd`) y su `~/.vnc/xstartup`. Como la unidad anterior fija `User=your_user`, copia el archivo con otro nombre para cada usuario adicional, por ejemplo `/etc/systemd/system/vncserver-ana@.service` con `User=ana`, y actívalo en un display libre: ```bash sudo systemctl daemon-reload sudo systemctl enable --now vncserver-ana@2.service ``` Ese usuario se conectará con un túnel al puerto 5902. ## Solución de problemas **Pantalla gris o negra al conectar.** Casi siempre es el script de arranque. Comprueba que `~/.vnc/xstartup` es ejecutable, que contiene las líneas `unset` y que `dbus-x11` está instalado. Revisa el log de la sesión: ```bash cat ~/.vnc/*:1.log ``` **El servicio no arranca.** Consulta el journal. Un error habitual es que el display ya esté en uso por una sesión iniciada a mano: ```bash sudo journalctl -u vncserver@1.service -n 50 vncserver -list ``` **"Connection refused" en el visor.** Verifica que el túnel SSH sigue abierto y que la sesión escucha en el puerto 5901 del servidor con `ss -tln | grep 5901`. **La sesión va lenta.** Reduce la resolución en la línea `ExecStart` de la unidad (por ejemplo `-geometry 1280x720`), ejecuta `sudo systemctl daemon-reload` y reinicia el servicio con `sudo systemctl restart vncserver@1.service`. En el visor, elige compresión Tight con calidad JPEG media. ## Conclusión Ya tienes un escritorio XFCE accesible por VNC en Ubuntu 24.04, gestionado por systemd y protegido por un túnel SSH en lugar de un puerto expuesto. Como siguientes pasos, puedes configurar el acceso SSH solo con claves y desactivar la autenticación por contraseña, restringir SSH a una VPN privada como Tailscale o WireGuard, o evaluar Apache Guacamole si necesitas dar acceso gráfico desde el navegador a varios usuarios.