XRDP es un servidor del protocolo RDP (Remote Desktop Protocol) para Linux. Permite conectarse al escritorio gráfico de un servidor con el cliente de Escritorio remoto que ya incluye Windows, con Windows App en macOS o con Remmina en Linux. En este tutorial instalarás el entorno de escritorio ligero XFCE y XRDP en un servidor Ubuntu 24.04, te conectarás desde tu equipo y limitarás el acceso para que el puerto RDP no quede expuesto 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 y 10 GB libres en disco. Cada sesión gráfica consume entre 300 y 500 MB de RAM.
  • Un usuario no root con privilegios sudo (en la guía, your_user) que tenga contraseña: XRDP autentica con la contraseña del sistema, no con claves SSH.
  • Acceso SSH al servidor desde tu equipo.
  • Un cliente RDP: Conexión a Escritorio remoto (mstsc) en Windows, Windows App en macOS o Remmina en Linux.

Los mismos pasos sirven para Debian 12; los paquetes tienen el mismo nombre.

Si tu usuario solo entra con clave SSH y no tiene contraseña, asígnale una:

sudo passwd your_user

Paso 1: Instalar el entorno de escritorio XFCE

XRDP solo transmite la pantalla; necesita un entorno de escritorio que dibujar. XFCE es ligero y funciona bien con XRDP, a diferencia de GNOME, que consume más recursos y da más problemas en sesiones remotas.

sudo apt update
sudo apt install xfce4 xfce4-terminal dbus-x11

El paquete dbus-x11 evita errores al iniciar la sesión de XFCE desde XRDP. La instalación descarga varios cientos de megas y puede tardar unos minutos.

Si durante la instalación se ha instalado un gestor de inicio de sesión gráfico como LightDM, no lo necesitas en un servidor sin monitor. Comprueba si existe y desactívalo:

systemctl list-unit-files lightdm.service
sudo systemctl disable --now lightdm

Si el primer comando muestra 0 unit files listed, no hay nada que desactivar.

Paso 2: Instalar XRDP

Instala XRDP desde los repositorios de Ubuntu. El paquete incluye xorgxrdp, el módulo que permite a Xorg funcionar como servidor gráfico de la sesión remota:

sudo apt install xrdp

XRDP usa por defecto el certificado autofirmado del sistema (ssl-cert-snakeoil), cuya clave privada solo puede leer el grupo ssl-cert. Añade el usuario xrdp a ese grupo y reinicia el servicio:

sudo adduser xrdp ssl-cert
sudo systemctl restart xrdp

Comprueba que el servicio está activo y escuchando en el puerto 3389:

sudo systemctl status xrdp --no-pager
sudo ss -tlnp | grep 3389
● xrdp.service - xrdp daemon
     Loaded: loaded (/usr/lib/systemd/system/xrdp.service; enabled; preset: enabled)
     Active: active (running) since Thu 2026-09-25 10:20:14 UTC; 5s ago
...
LISTEN 0      2                  *:3389            *:*    users:(("xrdp",pid=4321,fd=11))

El servicio xrdp-sesman, que crea las sesiones de escritorio, se arranca automáticamente junto a xrdp.

Paso 3: Indicar a XRDP qué escritorio iniciar

Al iniciar sesión, XRDP ejecuta /etc/xrdp/startwm.sh, que a su vez usa el archivo ~/.xsession del usuario si existe. Crea ese archivo para que siempre arranque XFCE:

echo "xfce4-session" > ~/.xsession

Para que los usuarios que crees en el futuro tengan la misma configuración, cópialo también a /etc/skel:

echo "xfce4-session" | sudo tee /etc/skel/.xsession

Reinicia XRDP para aplicar los cambios:

sudo systemctl restart xrdp

Paso 4: Restringir XRDP a localhost

Exponer el puerto 3389 a Internet atrae escaneos y ataques de fuerza bruta constantes contra las contraseñas. La opción más segura es que XRDP solo escuche en 127.0.0.1 y acceder a través de un túnel SSH, que ya está autenticado con tu clave.

Edita la configuración principal:

sudo nano /etc/xrdp/xrdp.ini

En la sección [Globals], busca la línea port=3389 y cámbiala por:

port=tcp://127.0.0.1:3389

Reinicia el servicio y comprueba que ya solo escucha en localhost:

sudo systemctl restart xrdp
sudo ss -tlnp | grep 3389
LISTEN 0      2          127.0.0.1:3389      0.0.0.0:*    users:(("xrdp",pid=4410,fd=11))

No necesitas abrir ningún puerto adicional en UFW: el acceso entra por SSH, que ya tienes permitido.

Paso 5: Conectarte a través de un túnel SSH

Desde tu equipo, abre un túnel que reenvíe el puerto local 3390 al puerto 3389 del servidor. Se usa 3390 porque en Windows el 3389 local puede estar ocupado por el propio servicio de Escritorio remoto.

En Windows (PowerShell, con el cliente OpenSSH incluido en el sistema), macOS o Linux:

ssh -N -L 3390:127.0.0.1:3389 your_user@your_server_ip

El comando no muestra nada y se queda abierto mientras dure el túnel. Déjalo así y, en otra ventana, abre el cliente RDP:

  • Windows: ejecuta mstsc, escribe localhost:3390 en Equipo y pulsa Conectar.
  • macOS: en Windows App, añade un PC con el nombre localhost:3390.
  • Linux: en Remmina, crea una conexión RDP a localhost:3390.

El cliente avisará de que el certificado no es de confianza, porque es autofirmado; acéptalo. Aparecerá la pantalla de inicio de sesión de XRDP con la sesión Xorg seleccionada. Introduce your_user y su contraseña y, tras unos segundos, verás el escritorio de XFCE.

Cuando termines, cierra la sesión desde el menú de XFCE (Log Out) y detén el túnel con Ctrl+C.

Paso 6: Limitar quién puede conectarse y gestionar las sesiones

Por defecto, cualquier usuario del sistema con contraseña puede iniciar sesión por XRDP. Limítalo a un grupo concreto. Crea el grupo tsusers y añade a tu usuario:

sudo groupadd tsusers
sudo usermod -aG tsusers your_user

Edita la configuración del gestor de sesiones:

sudo nano /etc/xrdp/sesman.ini

En la sección [Security], deja estos valores (algunos ya existen; cámbialos en lugar de duplicarlos):

[Security]
AllowRootLogin=false
MaxLoginRetry=4
TerminalServerUsers=tsusers
AlwaysGroupCheck=true

Con AlwaysGroupCheck=true, solo los miembros de tsusers pueden entrar. AllowRootLogin=false impide iniciar sesión gráfica como root.

En el mismo archivo, la sección [Sessions] controla qué pasa con las sesiones. Si cierras la ventana del cliente sin cerrar sesión, la sesión sigue abierta en el servidor y te reconectas a ella la próxima vez. Para que las sesiones abandonadas no consuman memoria indefinidamente, ciérralas tras una hora desconectadas:

[Sessions]
KillDisconnected=true
DisconnectedTimeLimit=3600

Reinicia XRDP para aplicar los cambios:

sudo systemctl restart xrdp

Para ver las sesiones gráficas activas, lista los procesos Xorg que ha lanzado XRDP (uno por sesión):

pgrep -a Xorg
5120 /usr/lib/xorg/Xorg :10 -auth .Xauthority -config xrdp/xorg.conf -noreset -nolisten tcp -logfile .xorgxrdp.%s.log

Solución de problemas

La conexión se cierra justo después de introducir la contraseña. Revisa los logs del gestor de sesiones:

sudo tail -n 50 /var/log/xrdp-sesman.log

Si aparece un error de autenticación, comprueba la contraseña y que el usuario pertenece a tsusers. Si el problema es la sesión gráfica, revisa ~/.xsession-errors y ~/.xorgxrdp.10.log en el directorio del usuario.

Pantalla negra tras iniciar sesión. Suele deberse a que el usuario tiene una sesión abierta de otro escritorio o a un ~/.xsession incorrecto. Comprueba el contenido del archivo:

cat ~/.xsession

Debe contener solo xfce4-session. Si el problema persiste, cierra las sesiones colgadas del usuario con sudo pkill -u your_user Xorg y vuelve a conectar.

El cliente RDP no conecta al túnel. Comprueba que el comando ssh -L sigue abierto y que en el servidor XRDP escucha en 127.0.0.1:3389 (sudo ss -tlnp | grep 3389).

Error de certificado al arrancar XRDP en /var/log/xrdp.log. El usuario xrdp no puede leer la clave privada. Confirma que está en el grupo ssl-cert con id xrdp y reinicia el servicio.

La sesión va lenta. En el cliente RDP, reduce la profundidad de color a 16 bits y desactiva el fondo de escritorio. En XFCE, desactiva el compositor en Configuración > Ajustes del gestor de ventanas > Compositor.

Conclusión

Has instalado XFCE y XRDP en Ubuntu 24.04, te has conectado con un cliente RDP estándar a través de un túnel SSH y has limitado el acceso a un grupo de usuarios con limpieza automática de sesiones abandonadas. Como siguientes pasos, crea usuarios sin privilegios sudo para el trabajo gráfico diario, instala solo las aplicaciones de escritorio que necesites y, si varias personas deben acceder a distintos servidores, centraliza el acceso con Apache Guacamole.