시스템 장치 (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시작되지 않았습니다.

ArchWiki에systemd --user 설명 된대로 시스템 버전 208으로 데비안을 실행 입니다.

내 시나리오 모두에서 systemd로 구현, 또는이다 할 수 있는지 궁금 --system하고 --user그래서 완전히 디자인에 고립 된 --user단위는의 종속성하지 않을 수 있습니다 --system장치.

가능하다면 제 경우 어떤 문제가 있습니까?


답변:


8

시스템 / 사용자-Archwiki

systemd --user프로세스와 별도의 프로세스로 실행됩니다 systemd --system. 사용자 단위는 시스템 단위를 참조하거나 의존 할 수 없습니다.


4
짜증나 유감 이네요.
Rolf

5

systemd사용자 세션 서비스는 완전히 별도의 인스턴스에서 실행되며 systemd시스템 서비스에 직접 의존 할 수있는 방법이 없습니다.

원하는 것을 달성하는 다른 방법이 있습니다. 가장 깨끗한 방법은 시스템이 차단기에 잠자기 상태가 될 때 원하는 것을 실행 logind하고 백그라운드 데몬으로 실행하는 것입니다.

보다 일반적인 해결책은 데몬이 logind억제제에 연결되도록하는 것입니다 ( systemd-lock-handlerxss-lock 참조 ). 그러면 시스템이 절전 모드로 전환 될 때 서비스를 주문할 수있는 사용자 세션 대상이 활성화됩니다 아래에.


2

@kyrias의 응답에 추가하여 자신 만의 사용자 수준 수면을 만드는 방법이 있습니다.

~ / .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

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.