Repara Escritorio Remoto RDP en Ubuntu tras instalar VNC o XRDP
La funcionalidad de Escritorio Remoto en Ubuntu, que se basa en el protocolo RDP de GNOME, se presenta como una opción eficaz y rápida para quienes trabajan de manera remota entre un ordenador de escritorio y una laptop. Sin embargo, es común encontrar problemas en esta configuración tras la instalación de servidores adicionales como VNC o XRDP. Este artículo abordará los motivos detrás de estos problemas y ofrecerá un script de Bash que permite reparar el sistema automáticamente en menos de un minuto.
Problemas Comunes tras la Instalación de VNC o XRDP
Al añadir herramientas de escritorio remoto adicionales en Ubuntu, pueden surgir dos problemas principales:
Secuestro del Puerto 3389
Tanto el servicio de GNOME Remote Desktop como el paquete XRDP utilizan el puerto 3389. Cuando se intenta establecer una conexión desde otro dispositivo, es posible que el servicio equivocado responda, provocando que las credenciales sean rechazadas.
Certificados SSL/TLS Corruptos
GNOME Remote Desktop requiere conexiones cifradas mediante TLS. Si los archivos de certificado ubicados en ~/.local/share/gnome-remote-desktop/ se corrompen o malconfiguran, el servidor inmediatamente interrumpe la conexión por razones de seguridad.
Lee también
Solución: Script Automático de Reparación
Para simplificar el proceso de diagnóstico y reparación cada vez que ocurran conflictos como estos, se ha desarrollado un script en Bash que realiza las siguientes acciones:
- Libera el puerto 3389 deteniendo los servicios en conflicto.
- Configura correctamente el cortafuegos (ufw).
- Genera un certificado SSL/TLS adecuado (RSA de 2048 bits) utilizando OpenSSL.
- Registra las rutas de los certificados y credenciales en grdctl con rutas absolutas.
- Reinicia el daemon del usuario actual.
Código del Script: reparar_rdp_ubuntu.sh
Para implementar la reparación, es necesario crear un archivo en el equipo de escritorio y pegar el siguiente código:
#!/bin/bash
# ==============================================================================
# Script de Reparación para Escritorio Remoto (GNOME RDP) - Ubuntu
# ==============================================================================
GREEN='\033[0;32m'
CYAN='\033[0;36m'
YELLOW='\033[1;33m'
RED='\033[0;31m'
NC='\033[0m'
echo -e "${CYAN}====================================================${NC}"
echo -e "${CYAN} Reparador Automático de Escritorio Remoto RDP ${NC}"
echo -e "${CYAN}====================================================${NC}\n"
# 1. Comprobación de ejecución (No ejecutar directamente con sudo)
if [ "$EUID" -eq 0 ]; then
echo -e "${RED}[ERROR] No ejecutes este script directamente con 'sudo'.${NC}"
echo -e "Ejecútalo con tu usuario normal: ${YELLOW}./reparar_rdp_ubuntu.sh${NC}"
exit 1
fi
CURRENT_USER=$USER
echo -e "${GREEN}[+] Usuario detectado:${NC} $CURRENT_USER"
# 2. Solicitar la contraseña de acceso remoto
read -s -p "Ingresa la CONTRASEÑA para la conexión RDP: " RDP_PASS
echo ""
if [ -z "$RDP_PASS" ]; then
echo -e "${RED}[!] La contraseña no puede estar vacía.${NC}"
exit 1
fi
echo -e "\n${YELLOW}[1/5] Liberando puerto 3389 (desactivando servicios en conflicto)...${NC}"
sudo systemctl stop gnome-remote-desktop 2>/dev/null
sudo systemctl disable gnome-remote-desktop 2>/dev/null
sudo systemctl stop xrdp 2>/dev/null
sudo systemctl disable xrdp 2>/dev/null
echo -e "${YELLOW}[2/5] Configurando el Firewall (UFW)...${NC}"
sudo ufw allow 3389/tcp > /dev/null
echo -e "${YELLOW}[3/5] Generando certificado SSL/TLS (RSA 2048)...${NC}"
CERT_DIR="$HOME/.local/share/gnome-remote-desktop"
rm -rf "$CERT_DIR"
mkdir -p "$CERT_DIR"
openssl req -new -x509 -days 365 -nodes -newkey rsa:2048 \
-out "$CERT_DIR/tls.crt" \
-keyout "$CERT_DIR/tls.key" \
-subj "/CN=$(hostname)" &>/dev/null
echo -e "${YELLOW}[4/5] Aplicando claves y credenciales en grdctl...${NC}"
grdctl rdp set-tls-cert "$CERT_DIR/tls.crt"
grdctl rdp set-tls-key "$CERT_DIR/tls.key"
grdctl rdp set-credentials "$CURRENT_USER" "$RDP_PASS"
grdctl rdp enable
echo -e "${YELLOW}[5/5] Reiniciando servicio de usuario...${NC}"
systemctl --user daemon-reload
systemctl --user restart gnome-remote-desktop
sleep 2
# Información Final
IP_ADDR=$(hostname -I | awk '{print $1}')
echo -e "\n${CYAN}====================================================${NC}"
echo -e "${GREEN} ¡REPARACIÓN COMPLETADA EXITOSAMENTE! ${NC}"
echo -e "${CYAN}====================================================${NC}"
echo -e "Configuración para Remmina / xfreerdp:"
echo -e " - ${YELLOW}Servidor/IP:${NC} $IP_ADDR"
echo -e " - ${YELLOW}Puerto:${NC} 3389"
echo -e " - ${YELLOW}Usuario:${NC} $CURRENT_USER"
echo -e " - ${YELLOW}Protocolo:${NC} RDP"
echo -e "${CYAN}====================================================${NC}\n"Cómo Utilizar el Script
- Guarda el código anterior en un archivo denominado reparar_rdp_ubuntu.sh.
- Otorga permisos de ejecución desde la terminal con el siguiente comando:
chmod +x reparar_rdp_ubuntu.sh
- Ejecútalo como un usuario normal utilizando:
./reparar_rdp_ubuntu.sh
El script solicitará la contraseña para el acceso remoto y se encargará de restaurar la funcionalidad del Escritorio Remoto.
Lee también
Cómo Probar la Conexión desde tu Laptop
Después de ejecutar el script en tu equipo de escritorio, abre la terminal en tu laptop para realizar una rápida prueba utilizando xfreerdp o configura un perfil en Remmina seleccionando el protocolo RDP:
xfreerdp /v:192.168.X.X /u:tu_usuario /p:tu_contraseña /cert:ignore
Asegúrese de reemplazar 192.168.X.X con la dirección IP local de tu ordenador de escritorio.
Con estos pasos, se habrá restaurado el control completo sobre el Escritorio Remoto en Ubuntu, sin la necesidad de reiniciar el sistema o reinstalar la interfaz gráfica.
Para más tutoriales y soluciones sobre temas relacionados, no dudes en seguir leyendo en el blog. ¡Hasta la próxima!



