最近在一台 Ubuntu 25.10 虚拟机上遇到一个比较坑的情况:系统自带远程桌面明明开着,3389 也在监听,但windows rdp客户端连接后还是黑屏、闪断,或者认证后立刻断开。

这类问题表面像是“网络不通”或者“密码不对”,实际根因在更底层:gnome-remote-desktop 依赖的 FreeRDP/WinPR 运行时库出了安全更新回归。

现象

  • 系统设置里远程桌面已开启
  • gnome-remote-desktop.service 处于运行状态
  • 3389 正在监听
  • 客户端能发起连接,但会黑屏、断开,或者认证后被踢回

排查时日志里能看到这类报错:

client disconnected during the handover
Unexpected client message in state CONNECTION_STATE_FINALIZATION_FONT_LIST
SetEvent: hEvent is not an event
corrupted size vs. prev_size
client authentication failure
nla_recv() error: -1

这些日志很容易误导人。看起来像认证失败,其实很多时候是后面的会话接管或者用户态服务已经崩了,前面的连接层只能以“认证失败”或“连接被重置”的形式表现出来。

原理

GNOME 自带 RDP 不是单进程直连桌面的简单模型,它大致是两段式:

RDP 客户端
  -> system 级 gnome-remote-desktop 监听 3389
  -> handover / 重定向
  -> user 级 gnome-remote-desktop 接管会话,监听 3391
  -> 进入真实 GNOME 会话

所以只看 3389 在不在,并不能说明整条链路是好的。

另外,虽然这里用的是 GNOME 自带远程桌面,但底层 RDP 协议栈依赖的是:

  • libfreerdp3-3
  • libfreerdp-server3-3
  • libwinpr3-3

也就是说,就算没有单独装 FreeRDP 客户端,只要用 GNOME 自带 RDP,这几组库的更新回归一样会直接影响远程桌面。

故障点

本机最终确认下来的版本情况是:

gnome-remote-desktop        49.0-0ubuntu1.1
gnome-settings-daemon       49.0-1ubuntu3.1
libfreerdp3-3               3.16.0+dfsg-2ubuntu0.3
libfreerdp-server3-3        3.16.0+dfsg-2ubuntu0.3
libwinpr3-3                 3.16.0+dfsg-2ubuntu0.3

继续查 apt changelog libfreerdp3-3 后,发现官方已经发布了:

3.16.0+dfsg-2ubuntu0.4

而且 changelog 里明确写了,这是在处理 .3 引入的安全回归,核心信息是:

SECURITY REGRESSION: crash with realloc(): invalid next size

这和本机用户态 gnome-remote-desktop 日志里的:

SetEvent: hEvent is not an event
corrupted size vs. prev_size

是能对上的。简单说就是:.3 这组安全更新把 GNOME 自带 RDP 依赖的运行时库弄出了新问题,导致会话接管阶段异常甚至崩溃;.4 则把有问题的补丁先撤掉了。

最小修复办法

不需要整机 full-upgrade,也不需要重装桌面环境,直接把相关运行库升到 .4 即可:

sudo apt update
sudo apt install -y libfreerdp3-3 libfreerdp-server3-3 libwinpr3-3

升级后重启 GNOME 自带远程桌面的 system/user 两条服务链路:

sudo systemctl daemon-reload
systemctl --user daemon-reload

sudo systemctl restart gnome-remote-desktop.service
systemctl --user restart gnome-remote-desktop.service

修复后应该看到什么

先确认版本已经上来:

dpkg -l | rg 'gnome-remote-desktop|gnome-settings-daemon|libfreerdp3-3|libfreerdp-server3-3|libwinpr3-3'

正常情况下应该能看到:

libfreerdp3-3        3.16.0+dfsg-2ubuntu0.4
libfreerdp-server3-3 3.16.0+dfsg-2ubuntu0.4
libwinpr3-3          3.16.0+dfsg-2ubuntu0.4

再确认两层监听都在:

sudo ss -ltnp '( sport = :3389 or sport = :3391 )'

预期是:

  • 3389 由 system 级 gnome-remote-desktop 监听
  • 3391 由 user 级 gnome-remote-desktop 监听

这时再重新发起 RDP 连接,通常就恢复正常了。

总结

这次问题的核心不是“远程桌面没开”,也不是“客户端不兼容”,而是:

  1. GNOME 自带 RDP 实际上依赖 FreeRDP/WinPR
  2. 3.16.0+dfsg-2ubuntu0.3 引入了安全回归
  3. 回归会在 handover 和用户会话接管阶段表现成黑屏、闪断、认证后断开
  4. 升级到 3.16.0+dfsg-2ubuntu0.4 后恢复正常

如果你在 Ubuntu 25.10 上遇到“自带远程桌面已开启、3389 在监听,但就是连不上”的情况,优先检查这几个包的版本,而不是先怀疑网络、账户或者客户端。

参考

最后修改:2026 年 03 月 20 日
如果觉得我的文章对你有用,请随意赞赏~