Czytałem doc i nadal nie jest dla mnie jasne, czy można osiągnąć następujące cele:
zdefiniowana usługa ~/.config/systemd/user/task.service
zależy od system sleep.target
( ~/.config/systemd/user/sleep.target.wants/task.service
).
Teraz spodziewam task.service
się rozpocząć po uruchomieniu $ systemctl suspend
, jednak task.service
nie zostało uruchomione.
Używam debiana z wersją systemową 208, systemd --user
skonfigurowaną mniej więcej tak, jak opisano na ArchWiki .
Zastanawiam się, czy mój scenariusz mógłby zostać w ogóle zaimplementowany w systemie, czy też jest --system
i jest --user
całkowicie odizolowany od projektu, aby --user
jednostka nie była zależna od --system
jednostki.
Jeśli jest to możliwe, jaki może być problem w moim przypadku?
Odpowiedzi:
Od systemd / User - Archwiki
źródło
systemd
usługi sesji użytkownika działają w całkowicie osobnej instancjisystemd
i nie mogą w żaden sposób zależeć bezpośrednio od usług systemowych.Istnieją jednak inne sposoby osiągnięcia tego, co chcesz. Najczystszym rozwiązaniem byłoby prawdopodobnie zrobienie czegokolwiek, co chcesz uruchomić, gdy system zamierza uśpić haczyka do
logind
inhibitorów, a następnie uruchomić go jako demona w tle.Bardziej ogólnym rozwiązaniem byłoby podłączenie demona do
logind
inhibitorów (patrz systemd-lock-handler i xss-lock ), a następnie, gdy system przejdzie w stan uśpienia, aktywuje cel sesji użytkownika, w którym możesz zamówić swoje usługi pod.źródło
Dodając do odpowiedzi @kyrias, oto sposób na utworzenie własnego sleep.target na poziomie użytkownika:
~ / .local / share / systemd / user / sleep.target
~ / .local / bin / watch_sleep
~ / .local / share / systemd / user / watch_sleep.service
Zobacz mój post na blogu https://medium.com/@aiguofer/systemd-sleep-target-for-user-level-10eb003b3bfd
źródło