在阿里云 ECS(或者腾讯云、华为云等同构的云服务器)上跑 Ubuntu 并通过 Xrdp 实现 Windows 远程桌面连接,这确实是很多从 Linux 转过来或者需要偶尔图形化操作服务器的用户会遇到的场景。
这里有个核心认知要先对齐:Xrdp 并不是原生的 RDP 协议栈,它是一个中间件。它把 VNC 的图形界面“翻译”成 RDP 信号发给 Windows 的远程桌面客户端。所以,体验上会比直接连 Windows 差一些,会有延迟感,且不支持某些高级特性(如音频重定向、剪贴板双向同步有时不稳定)。但如果是为了管理服务器、运行轻量级 GUI 工具(如 gedit, firefox, xterm),它是完全够用的。
下面是实操步骤,按顺序来,别跳步。
1. 前置条件检查
- 安全组/防火墙放行:这是国内云厂商最容易卡住人的地方。
- 确保你的 ECS 实例所在的安全组规则中,放行了 TCP 3389 端口(源 IP 建议限制为你的固定 IP,不要开 0.0.0.0/0,安全第一)。
- 如果本地服务器内部还有
ufw或iptables,也要确认放行 3389。
- 系统版本:Ubuntu 20.04 / 22.04 LTS 均可。
2. 安装基础环境
登录到你的 Ubuntu 实例(通过 SSH 即可),执行以下命令更新源并安装必要组件:
sudo apt update
sudo apt upgrade -y
3. 安装 Xrdp
Ubuntu 官方仓库里有 xrdp,直接装就行:
sudo apt install xrdp -y
安装完成后,服务通常会自动启动。你可以用 systemctl status xrdp 检查一下状态,确保是 active (running)。
4. 关键配置:解决黑屏或闪退问题
这是最坑的一步。默认情况下,Xrdp 可能会尝试使用默认的 X session,导致连接后黑屏或者立即断开。我们需要让它使用一个更稳定的会话管理器。
步骤 A:创建配置文件指向正确的会话
编辑 /etc/xrdp/startwm.sh 文件:
sudo nano /etc/xrdp/startwm.sh
在文件末尾(exit 0 之前),添加以下内容:
# 强制使用 xfce4 会话,如果没装 xfce4 可以跳过这一步,直接用默认
# 注意:不同版本的 Ubuntu 默认桌面环境可能不同,这里以通用方式处理
unset DBUS_SESSION_BUS_ADDRESS
unset XDG_RUNTIME_DIR
/usr/bin/startxfce4 &
注意:如果你希望保持原有的 GNOME 桌面(比如你在 ECS 上装了桌面版 Ubuntu),上面的写法可能会导致冲突。更稳妥的做法是保留原有内容,但在开头加上环境变量清理。不过对于大多数纯 CLI 安装的 Ubuntu,安装 XFCE4 是最稳定、资源占用最低的方案。
步骤 B:安装轻量级桌面环境(推荐)
如果你之前没装过图形界面,强烈建议装一个轻量级的 XFCE4,而不是沉重的 GNOME。XFCE4 对 Xrdp 兼容性极好,且省内存。
sudo apt install xfce4 xfce4-goodies -y
安装完后,确保 /etc/xrdp/startwm.sh 里的最后一行是调用 startxfce4。
5. 重启 Xrdp 服务
修改配置后,重启服务生效:
sudo systemctl restart xrdp
6. 从 Windows 连接
- 在 Windows 上打开 “远程桌面连接” (mstsc)。
- 输入你的 ECS 实例的 公网 IP。
- 点击连接。
- 在弹出的 Xrdp 登录窗口中:
- Session: 选择
Xorg(这是目前兼容性最好的选项)。 - Username: 你的 Linux 用户名(例如
ubuntu或root)。 - Password: 对应的 Linux 密码。
- Session: 选择
- 点击 OK。
常见问题排查
Q1: 连接成功但黑屏?
- 原因:通常是权限问题或会话冲突。
- 解决:
- 确保你只登录了一个用户。Xrdp 不允许同一用户同时本地和远程登录。
- 检查
/var/log/xrdp-sesman.log和/var/log/xrdp.log,看有没有报错。 - 尝试在
startwm.sh中注释掉所有原有内容,只保留startxfce4 &。
Q2: 连接后分辨率很低,无法调整?
- 原因:Xrdp 默认协商分辨率有限。
- 解决:在 Windows 的远程桌面客户端连接前,点击“显示选项”,手动设置分辨率为 1920×1080 或其他你想要的值。
Q3: 剪贴板不能复制粘贴?
- 现状:Xrdp 对剪贴板的支持一直不太完美。
- 替代方案:建议使用
rdesktop或FreeRDP(xfreerdp) 作为客户端,它们在剪贴板同步上比微软自带的 mstsc 稍好一些。命令示例:xfreerdp /v:<ECS_IP> /u:<username> /p:<password> /clipboard
Q4: 性能卡顿严重?
- 优化:
- 在 Windows 远程桌面设置中,取消勾选“网络音频”、“打印”、“驱动器映射”等不需要的功能,减少带宽消耗。
- 将远程桌面的颜色深度改为“最高质量 32位”反而可能更占带宽,尝试降低到“16位高彩色”。
- 确保 ECS 实例的网络带宽足够,如果是低配带宽,GUI 操作会很慢。
总结
通过 Xrdp 在 Ubuntu ECS 上实现 Windows 远程桌面,核心在于 安装 Xrdp + 安装轻量级桌面(如 XFCE4)+ 正确配置 startwm.sh + 安全组放行 3389。
虽然体验不如原生 Windows 远程桌面流畅,但对于日常运维、调试脚本、运行简单 GUI 应用来说,这是一个低成本、高效率的解决方案。如果你需要更专业的图形化支持,可以考虑 TeamViewer 或 AnyDesk 这类第三方软件,它们基于不同的协议,在某些网络环境下表现更好。
云技术博客