[Others] 818更新后,系统未按预期达到dde-session-daemon.target目标状态 Resolved
Tofloor
poster avatar
hotime
deepin
2023-08-23 02:05
Author

V23Beta更新至818之后,systemd未按预期达到(Reached)dde-session-daemon.target目标状态,导致dde-polkit-agent也未能启动,影响所有需要权限校验的软件,如:磁盘管理器、Gparted-分区编辑器、软件包安装器、sublimetext修改root用户文件的保存操作等等...

【前置条件】: V23Beta更新至最新的818更新,内核6.1.32,X11

【复现步骤】: 重启计算机,登陆用户,等待任务栏加载完毕后立刻打开终端:

  • 执行ps -ef
  • 执行journalctl --user | grep Reached
  • 执行systemctl --user status dde-session-daemon.target

【预期结果】:

  • 执行ps-ef后,在进程/usr/bin/dde-dock下方,应当能看到/usr/bin/dde-lock, /usr/lib/deepin-daemon/dde-osd, /usr/lib/polkit-1-dde/dde-polkit-agent, /usr/bin/dde-widgets
  • 执行journalctl --user | grep Reached后,在最末尾也就是最近启动并登陆系统对应的时间内应当能看到 “Reached target dde-session-daemon target.” 并且应当不早于dde-session-pre target, 不晚于dde-session-initialized target.
  • 执行systemctl --user status dde-session-daemon.target 后,应当显示该目标为active

【实际结果】:

  • 执行ps-ef后,在进程/usr/bin/dde-dock下方,并没有上述提到的几个进程(这几个进程对应的service是在/usr/lib/systemd/user/目录下,并且在子目录dde-session-daemon.target.wants/中有对应的软链接,当dde-session-daemon.target 正常Reached时,这些服务会跟着启动)
  • 执行journalctl --user | grep Reached后,在最末尾也就是最近启动并登陆系统对应的时间内并没有 “Reached target dde-session-daemon target.” 这样的信息,也就是系统并未按照预期达到这个目标状态
  • 执行systemctl --user status dde-session-daemon.target 后,显示该目标为inactive

【详细情况及暂时处理】:

首先,最开始留意到这个问题时,是因为发现在开机后立刻打开磁盘管理器会没有任何反应,按照正常流程它会弹出dde的权限校验对话框,也就是/usr/lib/polkit-1-dde/dde-polkit-agent。

在ps-ef中检查发现该进程未启动,于是在systemd管理的用户服务目录/usr/lib/systemd/user/中找到了对应的服务dde-polkit-agent.service, 通过检查其服务配置可以看到它是After=dde-session-daemon.target目标的,并且在用户服务目录的子目录dde-session-daemon.target.wants目录中也有dde-polkit-agent.service的软链接,也就是只要这个目标正常抵达,那么没意外的话dde-polkit-agent.service服务就基本上能启动。

这时候通过执行systemctl --user status dde-session-daemon.target可以看到系统并未达到这个目标状态,而执行journalctl --user | grep Reached可以看到确实是这样。另外,在dde-session-daemon.target目标配置中有要求晚于dde-session-pre.target, 早于dde-session-initialized.target, 而dde-session-initialized.target目标状态都达到了,dde-session-daemon.target反而一直没达到。

重新安装DeepinV23Beta系统,回到最开始状态,这时候使用上述命令可以发现并没有这个问题。通过对比最初的系统与更新后的系统,可以发现,有一点很重要的不同在于:
除了dde-session-daemon.target.wants中软链接的服务之外,最初的系统中,只有dde-clipboard-daemon.service服务中明确提到了与dde-session-daemon.target目标的依赖关系,其相关配置为:

[Unit]
...
Wants=dde-session-daemon.target
After=dde-session-daemon.target
[Service]
...
[Install]
WantedBy=dde-session-daemon.target

而更新后的系统中dde-clipboard-daemon.service服务配置中取消了这几行配置,也就是说现在没有其他服务与dde-session-daemon.target目标有依赖关系,或许是因为这样的缘故,导致这个目标不再按照预期抵达,也就导致后续的几个服务也无法启动。我询问了百度AI相关的问题,它回答说“如果一个systemd中的target没有被任何service依赖,那么它就不会在开机时自动启动”, 我不知道它回答的对不对,但很像目前遇到的状况。

在梳理了相关的用户服务之后,参考了一下与dde-session-daemon.target相似的目标dde-session-manager.target,这两个目标都要求在dde-session-pre.target目标之后并且在dde-session-initialized.target目标之前抵达,而dde-session-manager.targetdde-session-manager.service有依赖关系,在其服务配置中是这样写的:

[Unit]
...
Requisite=dde-session-pre.target
Before=dde-session-pre.target
Requires=dde-session-manager.target
PartOf=dde-session-manager.target
Before=dde-session-manager.target

于是就想,那么在dde-session-daemon对应的服务中加上类似的配置,让他与dde-session-daemon.target产生依赖关系是不是就可以了?找了一下后发现,这个服务的文件名是org.dde.session.Daemon1.service(话说它不能改叫dde-session-daemon.service吗?),在其文件中增加如下配置:

[Unit]
...
Requisite=dde-session-pre.target
Before=dde-session-pre.target
Requires=dde-session-daemon.target
PartOf=dde-session-daemon.target
Before=dde-session-daemon.target

重启后一切正常了。这样的做法对吗?或者相对正确的做法应该是怎样的呢?大家有复现出这个问题吗?

Reply Favorite View the author
All Replies
hanzn-zzx
deepin
2023-08-23 06:01
#1

likeLinux就是要这样的动手能力!处理应该没问题,等明天官方出来看看。

Reply View the author
会飞的鱼11
deepin developers team
2023-08-23 21:27
#2

是的,在 org.dde.session.Daemon1.service中加相关 target 的依赖关系可解决此问题, 我们将在下次版本发布解决此问题。

Reply View the author
hotime
deepin
2023-08-23 21:44
#3
会飞的鱼11

是的,在 org.dde.session.Daemon1.service中加相关 target 的依赖关系可解决此问题, 我们将在下次版本发布解决此问题。

好的,感谢回复。thanks

Reply View the author
owen_337
deepin testing team
2023-08-26 00:35
#4
hanzn-zzx

likeLinux就是要这样的动手能力!处理应该没问题,等明天官方出来看看。

楼主已经反馈了,bug已在处理中了哈

Reply View the author
owen_337
deepin testing team
2023-08-26 00:45
#5

@hotime github上,研发同事已经回复你了哈,感谢你的反馈与支持!

Reply View the author
hotime
deepin
2023-08-26 01:25
#6
owen_337

@hotime github上,研发同事已经回复你了哈,感谢你的反馈与支持!

刚刚看完正式的处理方案,妙啊yeah

没想到dde-session-daemon.target.wants是临时的,这正好解了我关于为什么dde-session-daemon.service改名为了org.dde.session.Daemon1.service的惑。

Reply View the author
hotime
deepin
2023-10-05 01:52
#7
It has been deleted!
hotime
deepin
2023-10-18 18:58
#8

test

Reply View the author