取决于系统单元(sleep.target)的系统用户单元


16

我正在阅读doc,但对于以下情况是否可以实现尚不清楚:

其中定义的服务~/.config/systemd/user/task.service取决于系统sleep.target~/.config/systemd/user/sleep.target.wants/task.service)。

现在,我希望task.service在运行时启动$ systemctl suspend,但是task.service尚未启动。

我正在运行debian,其系统版本为208,systemd --user配置或多或少如ArchWiki所述

我不知道是否我的情况可能与systemd在所有来实现,或者是--system--user设计完全隔离,使--user单元可能不是一个的依赖--system单位。

如果有可能,我的问题可能是什么?


Answers:



5

systemd用户会话服务在的完全独立的实例中运行systemd,并且没有任何直接依赖系统服务的方式。

还有其他方法可以完成您想要的。最干净的方法可能是使系统在进入休眠状态时挂接到logind的抑制器,然后将其作为后台守护程序运行,以使您要运行的任何程序都可以运行。

一个更通用的解决方案是让守护进程挂接到logind抑制器中(请参见systemd-lock-handlerxss-lock),然后在系统进入睡眠状态时,它将激活用户会话目标,您可以订购服务下。


2

除了来自@kyrias的响应之外,这是一种创建自己的用户级别sleep.target的方法:

〜/ .local / share / systemd / user / sleep.target

[Unit]
Description=User level sleep target
StopWhenUnneeded=yes

〜/ .local / bin / watch_sleep

#!/bin/bash

dbus-monitor --system "type='signal',interface='org.freedesktop.login1.Manager',member=PrepareForSleep" | while read x; do
    case "$x" in
        *"boolean false"*) systemctl --user --no-block stop sleep.target;;
        *"boolean true"*) systemctl --user --no-block start sleep.target;;
    esac
done

〜/ .local / share / systemd / user / watch_sleep.service

[Unit]
Description=watch for sleep signal to start sleep.target

[Service]
ExecStart=%h/.local/bin/watch_sleep
Restart=on-failure

[Install]
WantedBy=default.target

参见我的博客文章https://medium.com/@aiguofer/systemd-sleep-target-for-user-level-10eb003b3bfd

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.