Systemd,更改单元文件启动顺序?

Systemd,更改单元文件启动顺序?

我编写了一个示例测试服务,如下所示,

 [Unit]
 Description=Test service

 [Service]
 Type=dbus
 BusName=test.sample
 Restart=on-failure
 ExecStart=/usr/sbin/testbin -n
 StandardOutput=null

 [Install]
 WantedBy=multi-user.target

xorg.service现在我希望这个服务(或单元文件)在我添加之后启动

After=xorg.service
Requires=xorg.service

到我的服务文件的单元部分并重新启动系统。但它对我的服务文件没有影响。所以我的目标是在用户会话后启动此服务(我的意思是X出现后)。请让我知道我在这里错过了什么或者有其他替代方法来延迟它吗?

答案1

您应该确保您实际上一个名为 的单位xorg.service。据我所知,没有任何发行版以这种方式启动 X,因此,除非您编写了自己的xorg.service根本没有这样的单位

此外,让我强调一下,仅仅在 X 服务器(或显示管理器之后)之后启动您的服务从根本上不足以使其与 X 通信。

简而言之,systemd 或任何其他 init 系统并不意味着运行用户 GUI 应用程序。虽然通过某种程度的黑客技术当然是可能的,但我不推荐它——只需坚持使用 xinitrc 即可。

答案2

首先,正如 @intelfx 所说,您应该确保 xorg.service 存在。我认为更好的做法是参考graphical.target,它是在图形系统启动时触发的。

如果该服务用于用户会话,您应该考虑使用:

systemctl --user enable test.service

这样,如果满足所有其他要求,当激活该服务的用户登录时,该服务将被触发。请注意,您的初始方法可能发生在任何用户经过身份验证之前,因此可能发生在任何用户会话之外。

如果要为所有用户启用 --user 服务,可以将其添加到 /etc/systemd/user/default.target.wants 中,以便除非用户选择退出,否则它会被激活。

相关内容