15%

全场主机优惠15%

测试技能,享折扣

使用代码:

Skills
开始使用
12.12.2023

如何在 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/RFBNX 协议专有协议
原生 Windows 客户端是(内置 MSTSC)否(需要客户端)否(需要客户端)否(需要客户端)
TLS 加密是(原生)可选(通过 stunnel)
多会话支持否(单显示器)
剪贴板共享
音频重定向是(通过 PulseAudio)有限
WAN 性能良好较差优秀良好
开源是(Apache 2.0)部分开源
端口3389590040005938

对于已使用 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 -y

GNOME 用户注意事项: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 中的 certificatekey_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 连接

  1. Win + R,输入 mstsc,然后按 Enter 打开远程桌面连接。
  2. 计算机字段中,输入您的 Ubuntu 服务器的 IP 地址(例如 203.0.113.45)。
  3. 点击连接
  4. 在 XRDP 登录界面,选择会话类型(通常为 XvncXorg),输入您的 Ubuntu 用户名和密码,然后点击确定

从 Linux(Remmina)连接

  1. 打开 Remmina 并创建新的连接配置文件。
  2. 将协议设置为 RDP
  3. 输入服务器 IP、用户名和密码。
  4. 将色深设置为真彩色(32 bpp)以获得最佳视觉质量。
  5. 连接。

从 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 中启用 RemoteFXH.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 规则。

15%

全场主机优惠15%

测试技能,享折扣

使用代码:

Skills
开始使用