环境: Ubuntu 26.04,默认 Wayland、GNOME 50、NVIDIA Blackwell(595 open 驱动)、分数缩放 166.7%。
在 Wayland 会话里用 RDP 连远程 Windows,开了分数缩放(比如 166.7%)之后画面发虚:不是把缩放信息传给 Windows 去渲染,而是先按逻辑分辨率出图、再被合成器整体放大,于是糊成一片。折腾一圈后只有一个客户端真正清晰,这里把原理和坑都记下来。
一条核心原理:原生 Wayland 清晰,XWayland 模糊
分数缩放下,走 XWayland 的应用拿到的是逻辑分辨率的缓冲区,再由合成器按 ×1.667 放大 → 必然模糊。而原生 Wayland 渲染的应用可以直接按物理像素出图 → 清晰。
这一条直接判了几个客户端死刑:
- Remmina(GTK3,走 XWayland)→ 模糊。
- Thincast 的 snap 包:没有
waylandsocket,被迫走 XWayland → 模糊。
各客户端实测
| 客户端 | 渲染路径 | 结果 |
|---|---|---|
| Remmina | GTK3 / XWayland | 模糊 |
| Thincast (snap) | 强制 XWayland | 模糊 |
| Thincast (flatpak, Qt5) | Vulkan | 黑屏(见下) |
| sdl-freerdp | SDL3 / OpenGL | 清晰 ✓ |
- sdl-freerdp(包名
freerdp-sdl)是这台机器上唯一实测清晰的:它直接请求物理分辨率渲染,OpenGL 在这块 NVIDIA Blackwell 上工作正常。 - Thincast flatpak 是死路:它走 Vulkan,在 Blackwell + flatpak 组合下直接黑屏;而且它把显示器报告成 100%/scale-1,本来也不会清晰。
LIBGL_ALWAYS_SOFTWARE对它无效(人家是 Vulkan 不是 GL)。
sdl-freerdp 的坑:光标热点崩溃
FreeRDP 3.24.2 的 SDL 客户端在分数缩放下会崩:
Cursor hot spot doesn't lie within cursor
原因是分数缩放后光标热点(hotspot)四舍五入跑到了光标边界之外,SDL_CreateColorCursor 抛异常 → 断连。上游 master 已修(client/SDL/SDL3/sdl_pointer.cpp 里把坐标 clamp 进边界、不再抛异常),但还没进 3.24.2。如果要彻底解决,只能从 GitHub 源码自行编译 master。
最终可用方案
接受偶发的光标崩溃,直接用 3.24.2 的 sdl-freerdp:
sdl-freerdp /v:<windows-host>:3389 /u:<user> \
+dynamic-resolution /scale-desktop:150 /scale-device:140 \
/gfx /sec:nla +f
- 退出全屏:Right Shift + Enter。
/gfx:AVC444在 dfsg 构建里不可用(没编 H.264),去掉。/scale-device只接受 100 / 140 / 180 三个值。
顺带:NVIDIA Blackwell 的驱动坑
同一台机器上还踩到:
- 新的 Blackwell 卡要用
-open内核模块;装nvidia-driver-595后nvidia-smi不工作,往往是装错了非 open 版本。用预编译模块linux-modules-nvidia-595-open-*,别走 dkms。 apt-get autoremove --purge太激进——它会把 dkms 当孤儿包一起删掉。卸载时要显式指定包名,别图省事一把梭。
小结
分数缩放 + Wayland 下的远程桌面,关键就一句:让客户端原生 Wayland、按物理像素渲染。Remmina/snap 走 XWayland 注定糊,Thincast 的 Vulkan 在 Blackwell 上翻车,目前最稳的是 sdl-freerdp(OpenGL),代价是等一个 > 3.24.2 的版本来根治光标崩溃。