Sistem birimine bağlı olan Systemd kullanıcı birimi (sleep.target)


16

Doc okuyordum ve aşağıdakilerin başarılması mümkün mü, benim için hala belirsiz:

hizmet tanımlı ~/.config/systemd/user/task.servicesistem sleep.target( ~/.config/systemd/user/sleep.target.wants/task.service) bağlıdır .

Şimdi koştuğumda task.servicebaşlamayı umuyorum $ systemctl suspend, ancak başlamıyor task.service.

Debian çalıştırıyorum, Systemd sürüm 208 ile, systemd --useraz ya da çok ArchWiki açıklandığı gibi yapılandırılmış .

Ben senaryo hiç systemd ile uygulanan veya elde ediyorsunuz merak --systemve --userböylece tamamen tasarım izole --userbirim bir bağımlılık olmayabilir --systemünitesine.

Mümkünse, benim durumumda sorun ne olabilir?


Yanıtlar:


8

Gönderen systemd / User Tamiri - ArchWiki

systemd --userişlemden ayrı bir işlem olarak çalışır systemd --system. Kullanıcı birimleri sistem birimlerine referans veremez veya bunlara bağlı olamaz.


4
Bu berbat. Bu çok kötü.
Rolf

5

systemdkullanıcı oturumu hizmetleri tamamen ayrı bir durumda çalışır systemdve doğrudan sistem hizmetlerine bağımlı olma yolu yoktur.

Ne istersen başarmanın başka yolları da var. En temiz olanı, sistem uykuya dalmak logindve çalıştırmak için arka plan arka plan programı olarak çalıştırmak için çalıştırmak istediğiniz her şeyi yapmak olacaktır .

Daha genel bir çözüm, logindinhibitörlere bir daemon kancaları yerleştirmek (bkz. Systemd-lock-handler ve xss-lock ,) ve daha sonra sistem uyuyacağı zaman, hizmetlerinizi sipariş edebileceğiniz bir kullanıcı oturumu hedefini etkinleştirecektir. altında.


2

@Kyrias tarafından verilen yanıta ek olarak, kendi kullanıcı düzeyinde uyku oluşturmanın bir yolu.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

Blog gönderime bakın https://medium.com/@aiguofer/systemd-sleep-target-for-user-level-10eb003b3bfd

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.