最近在一台 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-3libfreerdp-server3-3libwinpr3-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 连接,通常就恢复正常了。
总结
这次问题的核心不是“远程桌面没开”,也不是“客户端不兼容”,而是:
- GNOME 自带 RDP 实际上依赖
FreeRDP/WinPR 3.16.0+dfsg-2ubuntu0.3引入了安全回归- 回归会在 handover 和用户会话接管阶段表现成黑屏、闪断、认证后断开
- 升级到
3.16.0+dfsg-2ubuntu0.4后恢复正常
如果你在 Ubuntu 25.10 上遇到“自带远程桌面已开启、3389 在监听,但就是连不上”的情况,优先检查这几个包的版本,而不是先怀疑网络、账户或者客户端。
参考
- Ubuntu Launchpad Bug #2141992
https://bugs.launchpad.net/ubuntu/+source/gnome-remote-desktop/+bug/2141992 - Ubuntu Launchpad Bug #2122660
https://bugs.launchpad.net/bugs/2122660 - Questing 的
libfreerdp3-3发布记录
https://launchpad.net/ubuntu/questing/amd64/libfreerdp3-3
版权属于:DeepFal
本文链接:https://blog.deepfal.cn/index.php/archives/957/
转载时须注明出处及本声明