【=】Deepin 25 外接显示器切换后分辨率空值 — 问题分析报告


※ 生成时间：2026-09-08 12:35
※ 用途：反馈官方（建议连同 journalctl -b 完整日志、busctl --user list 输出、/var/lib/dde-daemon/display/config.json 一并提交）

============================================================

【==】一、问题现象


1. 在"显示设置"中切换为 仅外接显示器 模式后，分辨率/刷新率下拉框显示为空值；
2. 画面显示内容异常放大、显示不全，无法在图形界面操作控制中心修改；
3. 通过终端执行 wlr-randr --output HDMI-A-1 --mode 1920x1080@60.000000 可恢复实际输出，但控制中心分辨率空值问题依旧存在（D-Bus 服务未恢复）。

【==】二、环境信息


项目 | 信息
系统 | Deepin 25（crimson）
桌面/合成器 | DDE + Treeland（Wayland，DDE_CURRENT_COMPOSITOR=TreeLand）
显卡 | AMD Picasso/Raven [Radeon Vega] 1002:15d8，驱动 amdgpu
设备 | 华为笔记本（Subsystem 19e5:3e19）
外接显示器 | AOC U3277WB（HDMI-A-1，4K 3840×2160）
内屏 | eDP-1

【==】三、关键日志证据（journalctl -b）


【===】3.1 会话启动即缺失 Display1（任务栏 dde-shell，12:00:02）

`
dde-shell[1672]: Failed to fetch ListOutputNames QDBusError("org.freedesktop.DBus.Error.ServiceUnknown",
    "The name org.deepin.dde.Display1 was not provided by any .service files")
dde-shell[1672]: Failed to fetch DisplayMode QDBusError("org.freedesktop.DBus.Error.ServiceUnknown",
    "The name org.deepin.dde.Display1 was not provided by any .service files")
`
※ ⚠️ 该错误在开机时即出现，说明 Display1 会话服务缺失并非切换显示器引起。

【===】3.2 控制中心显示页报错（12:02:40 / 12:03:23，分辨率空值直接原因）

`
dde-control-center: DisplayMain.qml:633: TypeError: Cannot read property 'screenItems' of undefined
dde-control-center: DisplayMain.qml:731: TypeError: Cannot read property 'currentResolution' of undefined
dde-control-center: DisplayMain.qml:717: TypeError: Cannot read property 'resolutionList' of undefined
dde-control-center: DisplayMain.qml:850: TypeError: Cannot read property 'currentRate' of undefined
dde-control-center: DisplayMain.qml:840: TypeError: Cannot read property 'rateList' of undefined
...（screenItems / availableFillModes / brightness / scale / maxScale / rotate 等均 undefined）
`

【===】3.3 切换"仅外接"时刻 Treeland 输出管理报错（12:02:53 / 12:02:57）

`
deepin-service-manager[1745]: treeland_output_manager_v1#39: error 0: Invalid output resource
deepin-service-manager[3460]: treeland_output_manager_v1#39: error 0: Invalid output resource
`

【===】3.4 dde-session-daemon 显示模块初始化异常（monitor 数据为空）

`
daemon/display: manager.go:1702: updateBestmodeRefreshRate: monitor.Modes is empty, return preferredMode
daemon/display: xorg.go:798: setMonitorFillMode monitor is nil, return.
`

【===】3.5 终端修复后（12:23–12:25）Display1 仍缺失

`
dde-shell[1672]: Failed to fetch ListOutputNames QDBusError(... "The name org.deepin.dde.Display1 was not provided by any .service files")
dde-shell[1672]: Failed to fetch DisplayMode QDBusError(... "The name org.deepin.dde.Display1 was not provided by any .service files")
`

【==】四、根因分析


【===】4.1 根本原因：会话总线缺少 org.deepin.dde.Display1 服务

- 会话总线上注册有 60+ 个 org.deepin.dde.* 服务（Power1 / Network1 / Audio1 / Appearance1 / Graphic1 等），唯独没有 Display1；
- 控制中心与任务栏（dde-shell）均通过会话总线查询 org.deepin.dde.Display1 获取显示器列表、分辨率、刷新率数据 → 查询失败（ServiceUnknown）→ QML 界面 screenItems、currentResolution、resolutionList 等全部为 undefined → 分辨率下拉框显示空值；
- 对照：系统总线上存在 org.deepin.dde.Display1（由 dde-system-daemon 提供，/usr/share/dbus-1/system-services/org.deepin.dde.Display1.service 正常），说明会话总线上的显示服务缺失/未注册是问题核心。

【===】4.2 触发因素：切换时刻 Treeland 输出管理协议报错

- 应用"仅外接"模式时 treeland_output_manager_v1: Invalid output resource —— 输出资源无效，模式应用链路失败；
- 配置文件 /var/lib/dde-daemon/display/config.json 中同一 HDMI 口存在两套不同 EDID 哈希（dba318e8...@60Hz 与 e61d5eda...@30Hz），提示外接屏 HDMI 链路 EDID 不稳定，切换/重新枚举时输出资源失效。

【===】4.3 结论

※ Deepin 25 (Treeland) 下会话总线 Display1 服务缺失 + Treeland 输出管理协议（treeland_output_manager）在切换外接屏时返回 Invalid output resource，二者叠加导致：实际输出异常 + 控制中心分辨率数据源缺失（空值）。切换"仅外接"操作只是触发并暴露了问题。

【==】五、临时修复与评估


`bash
【=】查看输出与模式

wlr-randr
【=】设置外接屏 1920x1080@60（成功，绕过 D-Bus 直连 Treeland 输出协议）

wlr-randr --output HDMI-A-1 --mode 1920x1080@60.000000
【=】恢复 4K

wlr-randr --output HDMI-A-1 --mode 3840x2160@60.000000
`

项 | 结果
实际输出 | ✅ 已恢复 1920×1080@60（wlr-randr 确认 current）
控制中心分辨率下拉 | ❌ 仍为空（Display1 会话服务未恢复，12:23–12:25 日志证实）

【==】六、给官方的反馈要点


1. 会话总线缺少 org.deepin.dde.Display1：busctl --user list 中无 Display1；控制中心/dde-shell 全部报 ServiceUnknown；而系统总线有该服务（dde-system-daemon）。
2. treeland_output_manager 协议错误：切换显示模式时报 treeland_output_manager_v1#39: error 0: Invalid output resource（12:02:53、12:02:57）。
3. dde-session-daemon 显示模块拿不到 monitor 数据：monitor.Modes is empty、monitor is nil，疑似 Treeland 下显示服务初始化链路缺陷。
4. EDID 不稳定佐证：/var/lib/dde-daemon/display/config.json 中同一 HDMI 口存在两个 EDID 哈希（60Hz 与 30Hz 两套记录）。
5. 建议复现步骤：连接外接屏（HDMI）→ 显示设置切换为"仅外接" → 观察分辨率下拉空值；终端执行 gdbus call --session --dest org.deepin.dde.Display1 --object-path /org/deepin/dde/Display1 --method org.freedesktop.DBus.Introspectable.Introspect 可复现 ServiceUnknown。

【==】七、建议修复方向


1. 恢复会话总线 Display1 服务注册（或修正控制中心/dde-shell 查询的系统总线路径）；
2. 修复 Treeland 输出管理在热插拔/模式切换时 Invalid output resource 的处理与重试；
3. 增强 EDID 变化时的重枚举容错（双 EDID 哈希场景）。
