VNC

Cicle formatiu: CFGM Sistemes Microinformàtics i Xarxes (SMX) / CFGS Administració de sistemes informàtics en xarxa (ASIX)

Sistema operatiu: Ubuntu Server 26.04 LTS


1. Introducció

VNC (Virtual Network Computing) és un protocol de codi obert que permet accedir de forma gràfica a l’escriptori d’un ordinador remot. A diferència de X11 Forwarding (que reenvia finestres individuals), VNC transmet un framebuffer complet: tot el que es veuria a la pantalla del servidor, incloent-hi la sessió d’escriptori, que a més persisteix encara que el client es desconnecti.

En un entorn de servidor sense escriptori gràfic instal·lat (headless), VNC és útil per:

2. Conceptes previs

En una instal·lació Ubuntu Server (sense entorn gràfic), aquest conflicte no existeix perquè no hi ha ni Wayland ni Xwayland en marxa: TigerVNC crea el seu propi display X11 net.

3. Instal·lació

Es recomana TigerVNC, ja que és la implementació que substitueix TightVNC als dipòsits moderns, ofereix millor rendiment i suport de xifratge.

3.1. Actualitza el sistema i instal·la el servidor

Actualitza la llista de paquets

sudo apt update

Instal·la el servidor

sudo apt install tigervnc-standalone-server tigervnc-common

3.2. Instal·la un entorn d’escriptori

Un servidor VNC no proporciona per si mateix cap escriptori: cal instal·lar-ne un. Per a un ús remot lleuger es recomana Xfce:

sudo apt install xfce4 xfce4-goodies

Alternatives:

# MATE (pes mitjà)
sudo apt install ubuntu-mate-desktop

# GNOME complet (més pesat, no recomanat per VNC en servidor)
sudo apt install ubuntu-desktop
📌
Important

Si el procés d’instal·lació demana triar gestor de sessions per defecte (gdm3 o lightdm), en un servidor sense ús gràfic local qualsevol opció és vàlida; manteniu la que ja teniu configurada per evitar sorpreses en pròximes actualitzacions.

4. Configuració del servidor

4.1. Estableix la contrasenya VNC

Cal executar-ho amb l’usuari que utilitzarà la sessió (no cal ser root):

vncpasswd

Es demanarà una contrasenya (i opcionalment una de només lectura). Es desa xifrada a ~/.vnc/passwd.

4.2. Crea l’script d’inici de sessió (xstartup)

Aquest fitxer determina quin escriptori es carrega cada vegada que s’inicia una sessió VNC nova:

mkdir -p ~/.vnc
nano ~/.vnc/xstartup

Contingut per a Xfce:

#!/bin/sh
unset SESSION_MANAGER
unset DBUS_SESSION_BUS_ADDRESS
startxfce4 &

Donar-li permisos d’execució:

chmod +x ~/.vnc/xstartup

4.3. Arrenca el servidor manualment (prova)

vncserver :1 -geometry 1920x1080 -depth 24 -xstartup ~/.vnc/xstartup -localhost no

Paràmetres habituals:

Opció Descripció
-geometry AMPLExALT Resolució de la sessió virtual (p. ex. 1920x1080)
-depth Profunditat de color en bits (16, 24…)
-localhost yes/no Si yes, només accepta connexions des del mateix equip (necessari per túnel SSH)
-xstartup Ruta a l’script d’inici de sessió
-alwaysshared Permet diverses connexions simultànies a la mateixa sessió
-SecurityTypes Tipus d’autenticació/xifratge acceptats (p. ex. VncAuth,TLSVnc)

Per aturar la sessió de prova:

vncserver -kill :1

4.4. Converteix en un servei systemd

Crear una unitat plantilla que permeti gestionar qualsevol display amb systemctl:

sudo nano /etc/systemd/system/vncserver@.service
[Unit]
Description=TigerVNC server per al display %i
After=syslog.target network.target

[Service]
Type=forking
User=ramon
Group=ramon
WorkingDirectory=/home/ramon

ExecStartPre=/bin/sh -c '/usr/bin/vncserver -kill %i > /dev/null 2>&1 || :'
ExecStart=/usr/bin/vncserver %i -geometry 1920x1080 -depth 24 -localhost yes
ExecStop=/usr/bin/vncserver -kill %i

Restart=on-failure
RestartSec=10

[Install]
WantedBy=multi-user.target

Substituïu ramon per l’usuari real que farà servir la sessió gràfica.

Activar-lo:

sudo systemctl daemon-reload
sudo systemctl enable --now vncserver@:1.service
sudo systemctl status vncserver@:1.service

Verificar que escolta al port esperat:

ss -tlnp | grep 5901

5. Seguretat: túnel SSH

El trànsit VNC no va xifrat per defecte. La pràctica recomanada és no exposar mai el port 5901 directament a internet, sinó vincular el servidor a localhost (-localhost yes) i accedir-hi mitjançant un túnel SSH.

Des del client:

ssh -L 5901:localhost:5901 -N ramon@192.168.2.10

Aquesta ordre reenvia el port local 5901 fins al port 5901 de localhost dins del servidor remot, xifrat pel canal SSH. Cal deixar el terminal obert (o executar-ho en segon pla amb -f) i, després, connectar el visor VNC a:

localhost:5901

Altres mesures de seguretat

6. Connexió des del client

Client TigerVNC (Linux/Windows/macOS)

sudo apt install tigervnc-viewer
vncviewer localhost:5901

Remmina (recomanat en escriptoris Linux amb interfície gràfica)

sudo apt install remmina remmina-plugin-vnc

Crear una connexió nova de tipus VNC apuntant a localhost:5901 (si s’usa túnel SSH) o directament a la IP del servidor i el port corresponent (si la xarxa és de confiança i no s’usa túnel).

7. Funcionalitats i variants

Funcionalitat Descripció
Sessió persistent La sessió Xfce segueix activa encara que es tanqui el client; en reconnectar es recupera l’estat
Múltiples displays Es poden mantenir diverses sessions simultànies (:1, :2…) per a diferents usuaris o propòsits
Compartició d’escriptori físic Amb x11vnc es pot compartir la sessió gràfica real d’un equip (no una sessió virtual nova)
Porta-retalls compartit Amb autocutsel es pot sincronitzar el porta-retalls entre client i servidor
Compressió i qualitat El protocol permet ajustar compressió JPEG i profunditat de color per optimitzar l’amplada de banda
Multiplataforma El protocol és obert; existeixen clients per a pràcticament qualsevol sistema operatiu

x11vnc: compartir una sessió gràfica ja existent

A diferència de vncserver, que crea un display X11 nou i virtual, x11vnc comparteix la pantalla física/real d’un equip que ja té sessió gràfica activa (útil en equips d’escriptori, no tant en servidors headless):

sudo apt install x11vnc
x11vnc -display :0 -auth guess -forever -loop -rfbauth ~/.vnc/passwd -rfbport 5900 -shared

8. Resolució de problemes habituals

Símptoma Causa probable Solució
Pantalla en blanc en connectar xstartup sense permisos d’execució o buit chmod +x ~/.vnc/xstartup; revisar el contingut
El servei no arrenca Sessió :1 ja bloquejada per un procés anterior vncserver -kill :1 i tornar a arrencar; revisar ~/.vnc/*.log
No es pot connectar des del client Port no obert / servidor vinculat a localhost sense túnel actiu Comprovar ss -tlnp \| grep 590x; obrir túnel SSH o ajustar -localhost
Falla chmod/no troba xstartup El fitxer no existeix o té un altre nom ls -la ~/.vnc/xstartup
Components d’Xfce fan crash (només rellevant si hi ha entorn gràfic local) Variables de Wayland filtrant-se a la sessió VNC Assegurar-se que la instal·lació és headless o desactivar Wayland a /etc/gdm3/custom.conf

Ordres útils de diagnòstic:

vncserver -list
sudo systemctl status vncserver@:1.service
sudo journalctl -u vncserver@:1.service -n 50
cat ~/.vnc/*.log

9. Resum d’ordres

# Instal·lació
sudo apt install tigervnc-standalone-server tigervnc-common xfce4 xfce4-goodies -y

# Contrasenya
vncpasswd

# xstartup
chmod +x ~/.vnc/xstartup

# Arrencar / aturar manualment
vncserver :1 -geometry 1920x1080 -depth 24 -localhost yes
vncserver -kill :1

# Servei
sudo systemctl enable --now vncserver@:1.service
sudo systemctl status vncserver@:1.service

# Túnel SSH des del client
ssh -L 5901:localhost:5901 -N usuari@192.168.2.10

Versions d’aquest document

Domini Públic (CC0)