如何在 Ubuntu 22.04 上安装和配置 XRDP
XRDP 是 Microsoft 远程桌面协议 (RDP) 服务器的开源 Linux 实现。它使任何兼容 RDP 的客户端——包括 Windows 远程桌面连接、Remmina 和 FreeRDP——能够在远程 Linux 机器上建立完整的图形桌面会话。在 Ubuntu 22.04 上,XRDP 充当 RDP 客户端与底层 X11 或 Xorg 显示会话之间的桥梁,无需 VNC 或专有软件即可提供响应迅速、加密的远程桌面体验。
本指南涵盖了在 Ubuntu 22.04 LTS 上安装 XRDP 的完整流程,包括 SSL 证书配置、防火墙加固、桌面环境集成和连接步骤——以及大多数教程忽略的边缘情况和安装后的常见问题。
什么是 XRDP 及其工作原理
XRDP 采用客户端-服务器模型运行。xrdp 守护进程监听 TCP 端口 3389,并通过 TLS 处理 RDP 握手、会话协商和传输加密。在内部,它会生成一个 xrdp-sesman 会话管理器,通过 PAM(可插拔认证模块)对用户进行身份验证,并通过可配置的后端启动 X11 会话——通常是 Xvfb(虚拟帧缓冲区)或直接的 Xorg 会话。
关键架构组件包括:
- xrdp 守护进程 — 处理 RDP 协议协商和 TLS 终止
- xrdp-sesman — 管理用户会话生命周期和 PAM 身份验证
- X11 后端 — 提供图形帧缓冲区(Xvfb、Xorg 或 X11rdp)
- chansrv — 处理剪贴板共享、音频重定向和驱动器映射
这种架构意味着 XRDP 不会替换您的显示管理器——它与显示管理器并行运行,为每个经过身份验证的用户创建独立的图形会话。
XRDP 与其他方案对比:协议和功能比较
| 功能 | XRDP (RDP) | x11vnc (VNC) | NoMachine (NX) | TeamViewer |
|---|---|---|---|---|
| 协议 | RDP(Microsoft 标准) | VNC/RFB | NX 协议 | 专有协议 |
| 原生 Windows 客户端 | 是(内置 MSTSC) | 否(需要客户端) | 否(需要客户端) | 否(需要客户端) |
| TLS 加密 | 是(原生) | 可选(通过 stunnel) | 是 | 是 |
| 多会话支持 | 是 | 否(单显示器) | 是 | 是 |
| 剪贴板共享 | 是 | 是 | 是 | 是 |
| 音频重定向 | 是(通过 PulseAudio) | 有限 | 是 | 是 |
| WAN 性能 | 良好 | 较差 | 优秀 | 良好 |
| 开源 | 是(Apache 2.0) | 是 | 部分开源 | 否 |
| 端口 | 3389 | 5900 | 4000 | 5938 |
对于已使用 Windows 基础设施的团队而言,XRDP 是运营效率最高的选择,因为它无需在 Windows 机器上安装任何额外的客户端软件。
前提条件
在继续之前,请确保以下条件已满足:
- 一台运行中的 Ubuntu 22.04 LTS 服务器或桌面实例
- 具有
sudo权限的用户账户 - 已安装桌面环境(GNOME、XFCE 或 MATE——详见下文)
- 可通过 SSH 访问服务器以进行初始配置
- 可使用 UFW 或 iptables 进行防火墙管理
如果您运行的是未预装桌面环境的无头 VPS,则必须在 XRDP 能够提供图形会话之前先安装一个桌面环境。由于内存占用低,强烈建议为远程桌面使用安装最小化的 XFCE。
第 1 步 — 更新系统软件包
在安装新软件之前,请务必同步软件包索引并应用待处理的升级。这可以防止依赖冲突,并确保您获得最新的 XRDP 补丁版本。
sudo apt update && sudo apt upgrade -y如果应用了内核更新,请重启:
sudo reboot第 2 步 — 安装桌面环境(仅限无头服务器)
如果您的 Ubuntu 22.04 实例没有 GUI,请安装轻量级桌面环境。XFCE4 是无头服务器上 XRDP 最可靠的选择——Ubuntu 22.04 上通过 XRDP 使用 GNOME 会话存在与 Wayland/GDM3 冲突相关的已知渲染问题。
sudo apt install xfce4 xfce4-goodies -y或者,使用 MATE:
sudo apt install ubuntu-mate-desktop -yGNOME 用户注意事项:Ubuntu 22.04 默认使用 Wayland 会话。XRDP 不原生支持 Wayland。如果您打算使用 GNOME,必须通过编辑 /etc/gdm3/custom.conf 并取消注释 WaylandEnable=false 来强制使用 Xorg 会话。即便如此,在 22.04 上通过 XRDP 使用 GNOME 登录时仍经常出现黑屏问题——使用 XFCE 可以完全避免此类问题。
第 3 步 — 安装 XRDP
从 Ubuntu 官方软件源安装 XRDP:
sudo apt install xrdp -y软件包管理器将安装 xrdp 及其依赖项 xorgxrdp,后者提供基于 Xorg 的显示驱动后端。在具有稳定网络连接的标准 带 cPanel 的 VPS 或裸机服务器上,安装通常在两分钟内完成。
第 4 步 — 启用并启动 XRDP 服务
启用 XRDP 在启动时自动运行,然后立即启动它:
sudo systemctl enable xrdp
sudo systemctl start xrdp验证服务是否处于活动状态并正在监听:
sudo systemctl status xrdp预期输出包含 Active: active (running) 以及确认进程正在监听的行。要明确确认端口绑定:
sudo ss -tlnp | grep 3389您应该看到类似以下的输出:
LISTEN 0 10 0.0.0.0:3389 0.0.0.0:* users:(("xrdp",pid=XXXX,fd=12))如果端口未绑定,请在继续之前检查 /var/log/xrdp.log 中的启动错误。
第 5 步 — 配置 SSL 证书权限
安装期间,XRDP 会创建一个名为 xrdp 的专用系统用户。守护进程使用 /etc/ssl/private/ssl-cert-snakeoil.key 处的证书密钥进行 TLS 会话加密。默认情况下,此文件归 ssl-cert 组所有,而 xrdp 用户不属于该组——这会导致 TLS 握手失败或回退到未加密会话。
将 xrdp 用户添加到 ssl-cert 组:
sudo usermod -a -G ssl-cert xrdp重启 XRDP 以应用组成员变更:
sudo systemctl restart xrdp生产环境注意事项:ssl-cert-snakeoil 证书是由 ssl-cert 软件包生成的自签名证书。对于生产环境或任何暴露在互联网上的服务器,请将其替换为来自受信任 CA 的有效证书。如果您的服务器有公共域名,可以使用来自您的 SSL 证书提供商的证书,并通过 /etc/xrdp/xrdp.ini 中的 certificate 和 key_file 指令配置 XRDP 引用该证书。
使用自定义证书:
sudo nano /etc/xrdp/xrdp.ini找到并更新以下行:
certificate=/etc/ssl/certs/your-domain.crt
key_file=/etc/ssl/private/your-domain.key第 6 步 — 为 XRDP 配置桌面会话
XRDP 读取 ~/.xsession 或 ~/.Xclients 处的每用户会话配置文件,以确定要启动哪个桌面环境。如果没有此文件,许多 Ubuntu 22.04 配置在身份验证后会出现灰屏或黑屏。
对于 XFCE,为您的用户创建会话文件:
echo "xfce4-session" > ~/.xsession
chmod +x ~/.xsession对于 MATE:
echo "mate-session" > ~/.xsession
chmod +x ~/.xsession如果您在独立服务器上为多个用户进行配置,请使用 shell 循环或 Ansible 等配置管理工具自动执行此步骤。
第 7 步 — 配置防火墙
XRDP 监听 TCP 端口 3389。您必须通过 UFW 明确允许此端口。但是,将 RDP 直接暴露在 0.0.0.0 的互联网上存在重大安全风险——RDP 是互联网上遭受暴力破解攻击最多的服务之一。
推荐方法:将访问限制为特定 IP 范围或 VPN 子网。
仅允许来自特定受信任子网的访问:
sudo ufw allow from 192.168.1.0/24 to any port 3389如果您从单个已知 IP 地址连接:
sudo ufw allow from YOUR.IP.ADDRESS to any port 3389如果您必须临时允许更广泛的访问(不建议用于生产环境):
sudo ufw allow 3389/tcp重新加载并验证防火墙规则:
sudo ufw reload
sudo ufw status verbose安全加固建议:
- 更改默认端口:编辑
/etc/xrdp/xrdp.ini并设置port=33890(或任何非标准端口),然后相应更新您的 UFW 规则。这可以显著减少自动扫描噪音。 - 使用 fail2ban:安装并配置带有
xrdp监狱的fail2ban,以在多次身份验证失败后封锁 IP。 - 通过 SSH 隧道:为了最大安全性,将 XRDP 绑定到仅
127.0.0.1,并通过 SSH 隧道访问。这完全消除了直接互联网暴露。
将 XRDP 仅绑定到本地主机:
sudo nano /etc/xrdp/xrdp.ini设置:
address=127.0.0.1然后从您的客户端通过 SSH 隧道连接:
ssh -L 3389:127.0.0.1:3389 user@your-server-ip -N将您的 RDP 客户端指向 127.0.0.1:3389。
第 8 步 — 连接到 XRDP 远程桌面
从 Windows 连接
- 按
Win + R,输入mstsc,然后按 Enter 打开远程桌面连接。 - 在计算机字段中,输入您的 Ubuntu 服务器的 IP 地址(例如
203.0.113.45)。 - 点击连接。
- 在 XRDP 登录界面,选择会话类型(通常为
Xvnc或Xorg),输入您的 Ubuntu 用户名和密码,然后点击确定。
从 Linux(Remmina)连接
- 打开 Remmina 并创建新的连接配置文件。
- 将协议设置为 RDP。
- 输入服务器 IP、用户名和密码。
- 将色深设置为真彩色(32 bpp)以获得最佳视觉质量。
- 连接。
从 macOS 连接
使用 Mac App Store 中的 Microsoft Remote Desktop——它原生支持 RDP,并与 XRDP 无缝配合使用。
Ubuntu 22.04 上 XRDP 常见问题排查
登录后黑屏
这是 Ubuntu 22.04 上最常见的问题。原因及解决方法:
- 缺少
~/.xsession文件:按第 6 步所示创建该文件。 - Wayland 会话冲突:在
/etc/gdm3/custom.conf中禁用 Wayland。 - X 锁文件残留:删除
/tmp/.X*-lock文件并重启 XRDP。
凭据正确但身份验证失败
- 验证 PAM 是否未阻止
xrdp-sesman进程:检查/var/log/xrdp-sesman.log。 - 确保用户账户未被锁定:
sudo passwd -S username。 - 确认用户在下次登录时不需要更改密码。
性能差或延迟高
- 在 RDP 客户端设置中降低色深(使用 16 位而非 32 位)。
- 如果您的客户端支持,在
/etc/xrdp/xrdp.ini中启用 RemoteFX 或 H.264 编解码器。 - 在 XRDP 会话选择器中从
Xvnc切换到Xorg后端,以在支持硬件加速的服务器上获得更好性能。
端口 3389 无法访问
- 确认 XRDP 正在运行:
sudo systemctl status xrdp - 确认 UFW 未阻止:
sudo ufw status - 检查云提供商安全组或网络 ACL——许多 VPS 提供商在虚拟机管理程序层面有独立于 UFW 的额外防火墙层。
高级配置选项
启用剪贴板共享
RDP 客户端与远程桌面之间的剪贴板重定向需要 xrdp-chansrv 通道服务。它会随会话自动启动,但如果剪贴板不工作,请验证进程是否正在运行:
ps aux | grep xrdp-chansrv如果未运行,请检查用户主目录中 ~/.xrdp/ 日志文件中的错误。
启用音频重定向
安装 PulseAudio RDP 模块:
sudo apt install pulseaudio-module-xrdp -y注销并重新连接。远程桌面的音频输出将被重定向到您的本地客户端扬声器。
多用户并发会话
XRDP 开箱即支持多个同时会话。每个经过身份验证的用户都会获得一个独立的 X11 会话。要验证活动会话:
sudo xrdp-seslist对于有大量并发用户的环境——例如开发者工作站或培训环境——独立服务器提供了维持多个图形会话所需的 CPU 和 RAM 余量,不会产生资源争用。
关键要点与决策清单
在生产环境中部署 XRDP 之前,请验证以下每一项:
- 已安装桌面环境并为每个用户配置了
~/.xsession(推荐 XFCE) xrdp用户已添加到ssl-cert组——跳过此步骤会导致 TLS 错误- 已禁用 Wayland(如果使用 GNOME)(
/etc/gdm3/custom.conf) - 防火墙规则将端口 3389 限制为仅受信任的 IP——切勿在公共服务器上将 RDP 暴露到 0.0.0.0
- 已将自签名证书替换为生产部署的有效 CA 颁发证书
- 已配置 fail2ban 并设置 XRDP 监狱以缓解暴力破解攻击
- 已考虑 SSH 隧道作为高安全性环境中直接端口暴露的替代方案
- 已检查虚拟机管理程序级防火墙——云提供商安全组独立于 UFW
- 已监控日志文件(
/var/log/xrdp.log和/var/log/xrdp-sesman.log)以排查会话错误
常见问题解答
XRDP 是否支持带 Wayland 的 Ubuntu 22.04?
不支持。XRDP 需要 X11/Xorg 会话。Ubuntu 22.04 在 GNOME 下默认使用 Wayland。您必须在 /etc/gdm3/custom.conf 中禁用 Wayland,或使用默认为 Xorg 的桌面环境,例如 XFCE 或 MATE。
XRDP 中 Xvnc 和 Xorg 会话类型有什么区别?
Xvnc 后端在内部使用 VNC 创建虚拟帧缓冲区,与大多数配置兼容,但 CPU 开销较高。Xorg 后端使用 xorgxrdp 驱动程序进行直接 Xorg 渲染,提供更好的性能和硬件加速支持。在可用时请使用 Xorg。
多个用户能否同时连接到 XRDP?
可以。XRDP 为每个经过身份验证的用户创建独立的 X11 会话。各会话相互独立,互不干扰,使 XRDP 适合在单台服务器上进行多用户远程访问。
将 XRDP 端口 3389 直接暴露在互联网上安全吗?
不安全。RDP 是遭受暴力破解和漏洞利用攻击最多的协议之一。请始终通过防火墙规则将端口 3389 限制为已知 IP 地址,使用 fail2ban,并考虑通过 SSH 隧道传输 XRDP 用于任何面向互联网的部署。
如何从 Ubuntu 22.04 卸载 XRDP?
运行 sudo apt purge xrdp -y && sudo apt autoremove -y。这将删除 XRDP 软件包及其依赖项。还需使用 sudo rm -rf /etc/xrdp 删除残留配置文件,并使用 sudo ufw delete allow 3389/tcp 删除 UFW 规则。
