现象
使用 Windows 11 远程桌面连接 Ubuntu 26.04 的 GNOME 远程桌面服务时,连接可建立,但几分钟后总是报"内部错误"并断开。
bash
[10:25:19:112] [ERROR][com.freerdp.core.rdp] - Received invalid TPKT header length 604, 218 bytes too long!
[10:25:19:247] [WARN][com.freerdp.core.peer] - Unexpected client message in state CONNECTION_STATE_FINALIZATION_FONT_LIST, missing flag FINALIZE_CS_FONT_LIST_PDU [0x00000100]
[RDP] Sending server redirection
[10:25:20:341] [ERROR][com.freerdp.core.peer] - rdp_set_error_info: ERRINFO_LOGOFF_BY_USER [0x0001000C]
[RDP] Network or intentional disconnect, stopping session
[10:25:20:342] [ERROR][com.freerdp.core.transport] - BIO_should_retry returned an error: error:80000020:system library::Broken pipe
g_atomic_ref_count_dec: assertion 'old_value > 0' failed
日志解读
- TPKT 头异常:收到的 RDP 数据包 TPKT 头声称长度为 604 字节,实际多出 218 字节,数据解析错位。
- 字体列表协商失败 :在
CONNECTION_STATE_FINALIZATION_FONT_LIST阶段,客户端未提供预期的FINALIZE_CS_FONT_LIST_PDU标志,FreeRDP 服务端无法处理。 - 误判用户注销 :协议状态异常被错误映射为
ERRINFO_LOGOFF_BY_USER,服务端主动终止连接,触发Broken pipe。
根本原因是 Windows 11 RDP 客户端开启字体平滑后,发送的字体列表数据与 GNOME 远程桌面使用的 FreeRDP 服务端不兼容,协商失败导致连接被强行关闭。
解决方案
在 Windows 远程桌面客户端中降低连接速度预设,禁用字体平滑等高级视觉效果,避免协议冲突。
操作步骤:
- 打开远程桌面连接 → 点击"显示选项"。
- 在"体验"选项卡中,将"连接速度"从"自动检测"改为 "调制解调器(56 Kbps)" 或 "低速宽带(256 Kbps - 2 Mbps)"。
- 连接目标主机。
设置后字体平滑、桌面背景等功能会被自动禁用,但连接稳定性得到保证。验证时可观察日志是否不再出现 FINALIZE_CS_FONT_LIST_PDU 错误,会话是否保持不断。