Treeland XWayland HiDPI 问题反馈与改进建议
反馈日期: 2026-08-31
环境: Deepin 25 / treeland (Wayland) / 4K 屏 3840x2160 / 输出缩放 200% (Scale: 2.0)
一、问题现象
- 屏幕为 4K (3840x2160),treeland 输出缩放为 200%(
wlr-randr 显示 Scale: 2.000000)。
- 原生 Wayland 应用显示正常(正确适配 200%)。
- 但 通过 XWayland 运行的 X11 应用 出现两种问题:
- 界面被放大 2 倍且模糊:XWayland 上报给应用的 DPI 仍是 96(
xdpyinfo 显示 resolution: 96x96 dots per inch),应用以为自己在 100% 缩放下渲染,但 treeland 又对 XWayland 表面整体放大 2 倍,导致界面被"二次放大",字号、控件尺寸远超预期,且因低分辨率拉伸而模糊。
- 个别应用通过手动注入
--force-device-scale-factor=2 / Xft.dpi=192 才能恢复清晰(如 Electron 版 QQ),说明问题出在 XWayland 的 DPI 上报环节。
二、根因分析
- XWayland 在 treeland 下 没有将输出缩放比例 (Scale=2.0) 同步到 X11 客户端的 DPI 信息。
- X11 客户端通过
xdpyinfo / XSETTINGS 读取到的仍是 96 DPI(物理分辨率 3840x2160 对应的标准 DPI),因此:
- DPI 感知型应用(GTK3/GTK4、Qt5/Qt6、Electron/Chromium)默认按 100% 渲染;
- treeland 合成器又把 XWayland 表面放大 2 倍呈现 → 最终视觉效果 = 200% 放大 + 模糊。
- 对比 KWin / GNOME Mutter 等成熟合成器:当输出 scale=2 时,XWayland 会向 X11 客户端上报 DPI=192 / 逻辑分辨率=1920x1080,让应用自行按 200% 渲染,合成器再以 1:1 呈现 → 清晰且尺寸正确。
三、建议的改进方案(按优先级)
方案 A(推荐,根治):XWayland DPI 跟随输出缩放
- 在 treeland 合成 XWayland 时,把当前输出的 scale 同步为 X11 的
Xft.dpi / XSETTINGS Xft/DPI(即 96 × scale)。
- 具体做法:
- 在 XWayland 启动或输出 scale 变化时,通过 xsettingsd / XSETTINGS 广播
Xft/DPI = 96 * scale;
- 同时更新根窗口的
RESOURCE_MANAGER 中的 Xft.dpi;
- 这样所有 DPI 感知型 X11 应用无需任何手动配置即可自动清晰适配。
方案 B:提供"XWayland 缩放"独立配置项
- 在
org.deepin.dde.treeland 或 org.deepin.dde.treeland.output 的 DSG 配置中,新增一个可选项,如 xwaylandScaleMode:
auto(跟随输出缩放,默认,即方案 A);
off(XWayland 保持 1:1,适合希望 X11 应用物理像素 1:1 的场景);
- 手动指定 DPI。
- 这样用户可在控制中心 → 显示设置中,直观地为"X11 应用"单独控制缩放,而无需逐个应用打补丁。
方案 C(兜底):提供官方建议的全局注入手段
- 若暂无法在合成器层实现,至少提供官方支持的全局注入方式,例如:
- 官方文档说明如何通过
~/.config/xsettingsd/xsettingsd.conf + ~/.Xresources 设置 Xft.dpi=192、Gdk/WindowScalingFactor=2;
- 或提供一个
dde-xipport-hidpi 之类的系统级守护进程,在会话启动时自动注入。
四、当前的临时解决方法(已在本机验证有效)
由于 treeland 暂未内置上述能力,本机通过以下方式临时修复:
- xsettingsd 注入 HiDPI(覆盖 GTK/Qt 应用):
- 配置文件
/home/lai/.config/xsettingsd/xsettingsd.conf 设置:
Xft/DPI 192
Gdk/WindowScalingFactor 2
Gdk/UnscaledDPI 98304
- Xresources 注入(覆盖 Chromium/Electron 等读取 Xft.dpi 的应用):
/home/lai/.Xresources 设置 Xft.dpi: 192
- Electron 类应用 必要时追加
--force-device-scale-factor=2(如 linglong 版 QQ)。
- 通过
~/.config/autostart/xsettingsd-hidpi.desktop 实现登录自启。
验证结果:GTK 测试窗口逻辑 960x540 → X11 上报 1920x1080 → 物理屏幕实测约 1920 物理像素,恰好 2 倍、无双重缩放、清晰。
五、期待
希望 treeland 后续版本能内置方案 A/B,让 Deepin 的 Wayland 环境在 4K/高分屏下对 X11 应用的开箱体验达到 KWin/GNOME 同等水平。如需要我配合测试补丁或提供更多复现信息,请通过本文件附带的联系方式联系。
Treeland XWayland HiDPI 问题反馈与改进建议
反馈日期: 2026-08-31
环境: Deepin 25 / treeland (Wayland) / 4K 屏 3840x2160 / 输出缩放 200% (Scale: 2.0)
一、问题现象
wlr-randr显示Scale: 2.000000)。xdpyinfo显示resolution: 96x96 dots per inch),应用以为自己在 100% 缩放下渲染,但 treeland 又对 XWayland 表面整体放大 2 倍,导致界面被"二次放大",字号、控件尺寸远超预期,且因低分辨率拉伸而模糊。--force-device-scale-factor=2/ Xft.dpi=192 才能恢复清晰(如 Electron 版 QQ),说明问题出在 XWayland 的 DPI 上报环节。二、根因分析
xdpyinfo/ XSETTINGS 读取到的仍是96 DPI(物理分辨率 3840x2160 对应的标准 DPI),因此:三、建议的改进方案(按优先级)
方案 A(推荐,根治):XWayland DPI 跟随输出缩放
Xft.dpi/ XSETTINGSXft/DPI(即 96 × scale)。Xft/DPI = 96 * scale;RESOURCE_MANAGER中的Xft.dpi;方案 B:提供"XWayland 缩放"独立配置项
org.deepin.dde.treeland或org.deepin.dde.treeland.output的 DSG 配置中,新增一个可选项,如xwaylandScaleMode:auto(跟随输出缩放,默认,即方案 A);off(XWayland 保持 1:1,适合希望 X11 应用物理像素 1:1 的场景);方案 C(兜底):提供官方建议的全局注入手段
~/.config/xsettingsd/xsettingsd.conf+~/.Xresources设置Xft.dpi=192、Gdk/WindowScalingFactor=2;dde-xipport-hidpi之类的系统级守护进程,在会话启动时自动注入。四、当前的临时解决方法(已在本机验证有效)
由于 treeland 暂未内置上述能力,本机通过以下方式临时修复:
/home/lai/.config/xsettingsd/xsettingsd.conf设置:Xft/DPI 192Gdk/WindowScalingFactor 2Gdk/UnscaledDPI 98304/home/lai/.Xresources设置Xft.dpi: 192--force-device-scale-factor=2(如 linglong 版 QQ)。~/.config/autostart/xsettingsd-hidpi.desktop实现登录自启。五、期待
希望 treeland 后续版本能内置方案 A/B,让 Deepin 的 Wayland 环境在 4K/高分屏下对 X11 应用的开箱体验达到 KWin/GNOME 同等水平。如需要我配合测试补丁或提供更多复现信息,请通过本文件附带的联系方式联系。