我使用systemd启动桌面会话的大部分进程: xmonad (窗口管理器)、emacs守护进程、tmux会话等等。
因此,使用loginctl user-status
列出我的用户进程只会显示会话下的少数进程:
Unit: user-1000.slice
├─session-5.scope
│ ├─4740 lightdm --session-child 13 16
│ ├─5047 systemctl --user --wait start xmonad-systemd-session.target
│ └─5497 /usr/bin/ssh-agent /usr/bin/im-launch xmonad-systemd-session
└─user@1000.service
几乎我的所有进程都在user@1000.service
下面的会话之外运行。这意味着在tmux上运行loginctl session-status
会给出:
Could not get properties: Caller does not belong to any known session
我想告诉systemd在特定的登录会话下启动某些服务。理想情况下,在我的会话启动脚本中,我会编写:
exec systemctl --user --wait \
--scope $MY_DESKTOP_SESSION start xmonad-systemd-session.target
但是,没有--scope
选项,我也不知道如何获得作用域名称。
我使用libpam-systemd和dbus-user会话在Debian-ish (内部)发行版上运行systemd 240。
发布于 2020-06-24 12:54:52
我不确定systemd是否允许在已经包含进程的作用域中提供服务。根据控制组接口文档,一个作用域或服务不能同时具有进程和其他作用域/服务。(实际上,它说片只包含服务和作用域,服务和作用域包含进程。但我的系统似乎没有遵循这些文档,因为我在用户@1000服务中有服务。)
您可以在会话范围内运行进程,方法是让进程从会话中的某个部分启动。在Gnome中,命令是从Alt+F2启动的,或者是从xterm (但不是gnome终端,它作为自己的服务运行)在会话范围内运行的。我不知道有什么其他方法可以在一个范围内获得一个进程。另见这。
对我来说,很明显,有时您希望在会话中有一个服务(也就是说,如果会话被杀死了,那么有多个副本,如果您有多个会话),所以如果不存在,我希望它能够在某个时候构建。
https://unix.stackexchange.com/questions/508684
复制相似问题