Skip to content

[Bug] Shutdown hangs at user@1000.service/stop for ~90s: dde-session-ctl --shutdown waits forever after transient unit start fails #223

Description

@liyuan-rey

问题描述 / Problem

关机/重启时卡在 user@1000.service/stop,需要等待约 90 秒超时后才继续关机。

When shutting down / rebooting, the system hangs at user@1000.service/stop for ~90 seconds until the systemd stop timeout expires.

关机画面截图 - shutdown screen

[  OK  ] Started plymouth-poweroff.service - Show Plymouth Power Off Screen.
[  OK  ] Stopped tailscaled.service - Tailscale node agent.
[    *  ] Job user@1000.service/stop running ...e/stop running (53s / 1min 29s)...

环境 / Environment

项目
OS Deepin 25 (crimson 25.01.01)
内核 6.18.38-amd64-desktop-rolling #25.01.01.28 SMP PREEMPT_DYNAMIC Thu Jul 16 17:57:00 CST 2026 x86_64
dde-session 2.0.29
dde-application-manager 1.2.59
dde-session-shell 6.0.65
dde-session-ui 6.0.46
linglong-bin 1.13.8-1
linglong-box 2.2.1-1
桌面 X11(DDE)
复现日期 2026-08-05 12:46 关机时

日志时间线 / Log timeline (journalctl -b -1)

# 12:46:18 —— 用户会话开始拆解,dde-application-manager 已无法解析应用
8月 05 12:46:18 liyuan-nb dde-application-manager[2399]: dde.am.manager: couldn't find app "bamfdaemon" in application manager.
8月 05 12:46:18 liyuan-nb dde-application-manager[2399]: dde.am.manager: couldn't find app "org.deepin.dde.SoundEffect1" in application manager.

# 12:46:19 —— 关键:dde-session-manager 的 ExecStopPost 触发 dde-session-ctl --shutdown,
# 它请求 dde-application-manager 以 linglong portable binary 方式异步启动 transient unit
8月 05 12:46:19 liyuan-nb dde-application-manager[2399]: Request sent to start transient unit (Async): "app-DDE-tmp.portablebinary.-usr-libexec-dde\\x2dsession\\x2dctl@f801ffb0.service"
8月 05 12:46:19 liyuan-nb dde-application-manager[2399]: dde.am.manager: couldn't find app "dde-session-ctl" in application manager.
8月 05 12:46:19 liyuan-nb dde-application-manager[2399]: dde.am.manager: couldn't find app "home-liyuan" in application manager.

# dde-session-ctl 进程收到了 systemd 的 job 排队确认(job 3557),但 transient unit 实际启动失败,
# 进程不退出,一直挂住
8月 05 12:46:19 liyuan-nb dde-session-ctl[44809]: QDBusMessage(type=MethodReturn, service="", signature="o", contents=([ObjectPath: /org/freedesktop/systemd1/job/3557]) )

# 同一时刻 dde-application-manager 已与 X11 断开,注册实例全面失败
8月 05 12:46:19 liyuan-nb dde-application-manager[2399]: The X11 connection broke (error 1). Did the X11 server die?
8月 05 12:46:19 liyuan-nb dde-application-manager[2399]: dde.am.manager: failed to add instance "/org/freedesktop/systemd1/job/3594" to app "tailscale-systray"
8月 05 12:46:19 liyuan-nb dde-application-manager[2399]: dde.am.manager: failed to add instance "/org/freedesktop/systemd1/job/3596" to app "fcitx5-helper"
8月 05 12:46:19 liyuan-nb dde-application-manager[2399]: dde.am.manager: failed to add instance "/org/freedesktop/systemd1/job/3587" to app "uos-ai-assistant.autostart"

# 12:46:22 —— 三个 DDE 应用 scope 先超时被杀(次要,仅数秒)
8月 05 12:46:22 liyuan-nb systemd[1153]: app-DDE-deepin\x2dwine\x2dbuilder@1106003324d744cd981a160e4dc05838.service: State 'stop-sigterm' timed out. Killing.
8月 05 12:46:22 liyuan-nb systemd[1153]: app-DDE-microsoft\x2dedge@3d27b194ae1f4297811fac7429cb24d8.service: State 'stop-sigterm' timed out. Killing.
8月 05 12:46:22 liyuan-nb systemd[1153]: app-DDE-obsidian@fb2fdd716d4b4002a8725ad5f6f4974c.service: State 'stop-sigterm' timed out. Killing.

# 12:46:29 —— tailscaled 系统服务 stop 超时被杀(断网场景,次要)
8月 05 12:46:29 liyuan-nb systemd[1]: tailscaled.service: State 'stop-sigterm' timed out. Killing.

# 12:47:49 —— ★ 主卡点:dde-session-manager 的 ExecStopPost(dde-session-ctl --shutdown)
# 挂满 90 秒,stop-post 超时被强杀,关机才继续
8月 05 12:47:49 liyuan-nb systemd[1153]: dde-session-manager.service: State 'stop-post' timed out. Terminating.
8月 05 12:47:49 liyuan-nb systemd[1153]: dde-session-manager.service: Control process exited, code=killed, status=15/TERM
8月 05 12:47:49 liyuan-nb systemd[1153]: dde-session-manager.service: Failed with result 'timeout'.

# 附带:OnFailure 接管失败(事务冲突),dde-session-shutdown.target 无法按预期启动
8月 05 12:47:49 liyuan-nb systemd[1153]: dde-session-manager.service: Failed to enqueue OnFailure= job, ignoring: Transaction for dde-session-shutdown.target/start is destructive (gpg-agent-browser.socket has 'stop' job queued, but 'start' is included in transaction).

根因分析 / Root cause analysis

  1. dde-session-manager.service(由 dde-session 2.0.29 提供)的 unit 定义:
[Service]
Type=notify
ExecStart=/usr/bin/dde-session --systemd-service
ExecStopPost=/usr/libexec/dde-session-ctl --shutdown

关机时 systemd 停止用户会话,触发 ExecStopPost=/usr/libexec/dde-session-ctl --shutdown

  1. dde-session-ctl --shutdown 的执行路径是:通过 D-Bus 请求 dde-application-manager 以 linglong portable binary 方式异步启动一个 transient unitapp-DDE-tmp.portablebinary.-usr-libexec-dde\x2dsession\x2dctl@f801ffb0.service)来完成会话清理。

  2. 但此时 dde-application-manager 已经处于拆解状态(X11 连接已断开、couldn't find app "dde-session-ctl"、注册实例全部失败),transient unit 永远无法真正启动。

  3. dde-session-ctl 进程在收到 systemd job 排队确认(job 3557)后没有对启动失败做超时/错误处理,一直等待该 unit 完成,进程永不退出

  4. systemd 等待 ExecStopPost 直到 TimeoutStopSec=90s(用户会话默认),强杀后关机才继续。整个用户会话的停止被这一个进程拖慢 90 秒。

核心问题dde-session-ctl --shutdown 依赖 dde-application-manager + linglong portable binary 机制执行关机清理,但 dde-application-manager 的停止顺序/状态在关机时无法保证可用,且 dde-session-ctl 对启动失败无超时保护 → 每次关机稳定卡 90 秒。

期望行为 / Expected behavior

  • dde-session-ctl --shutdown 应直接执行清理,或对 transient unit 启动失败立即报错退出,不应无超时等待
  • 关机时 dde-application-manager 不应早于依赖它的 dde-session-manager 清理流程被拆解(依赖顺序问题)
  • 预期关机总耗时与桌面会话大小无关,不应被固定拖慢 90 秒

相关观察 / Related observations(次要)

  1. 同一时刻 3 个 app-DDE-* scope(Edge / Obsidian / deepin-wine-builder)stop-sigterm 超时被杀——应用退出不响应 SIGTERM 是另一类问题(Chromium 系 GPU 进程、wine 确认对话框),非本次主因。
  2. 关机完成时 systemd[1]Failed unmounting var.mount(/var 为独立分区 /dev/nvme0n1p5,ostree 部署),可能与会话未正常收尾有关,供参考。
  3. tailscaled stop 超时被杀系当天网络环境(无外网/断连重连)导致,与本 issue 无关。

附件 / Attachments

完整日志(用户会话 + 系统,2026-08-05 12:44-12:48 时段):https://gist.github.com/liyuan-rey/2dcf37832e638be337018c2942082026

  • user-session.logjournalctl -b -1 --user --since '2026-08-05 12:44:00' --until '2026-08-05 12:47:50'
  • system.logjournalctl -b -1 --since '2026-08-05 12:44:00' --until '2026-08-05 12:48:10'

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions