Systemd उपयोगकर्ता इकाई जो सिस्टम यूनिट (sleep.target) पर निर्भर करती है


16

मैं डॉक्टर पढ़ रहा था और यह मेरे लिए अभी भी अस्पष्ट है कि क्या निम्नलिखित पूरा करना संभव है:

~/.config/systemd/user/task.serviceउस में परिभाषित सेवा प्रणाली sleep.target( ~/.config/systemd/user/sleep.target.wants/task.service) पर निर्भर करती है ।

अब task.serviceजब मैं चलाऊंगा तो मैं शुरू करने की उम्मीद करता हूं $ systemctl suspend, हालांकि task.serviceशुरू नहीं हुई है।

मैं अर्बनिकीsystemd --user पर वर्णित के रूप में सिस्टम संस्करण संस्करण 208 के साथ डेबियन चला रहा हूं, कम या ज्यादा कॉन्फ़िगर किया गया है ।

मुझे आश्चर्य है कि कि मेरे परिदृश्य बिल्कुल systemd के साथ लागू किया जा सकता है, या कर रहे हैं --systemऔर --userपूरी तरह से डिजाइन द्वारा अलग ताकि --userइकाई एक पर निर्भरता नहीं हो सकता है --systemइकाई।

यदि यह संभव है, तो मेरे मामले में क्या समस्या हो सकती है?


जवाबों:


8

से systemd / उपयोगकर्ता - Archwiki

systemd --userप्रक्रिया से एक अलग प्रक्रिया के रूप में चलता systemd --systemहै। उपयोगकर्ता इकाइयां सिस्टम इकाइयों पर संदर्भ या निर्भर नहीं कर सकती हैं।


4
यह बेकार है। यह बहुत बुरा है।
रॉल्फ

5

systemdउपयोगकर्ता सत्र सेवाएँ पूरी तरह से अलग उदाहरण में चलती हैं systemd, और सीधे सिस्टम सेवाओं पर निर्भर रहने का कोई तरीका नहीं है।

हालांकि आप जो चाहते हैं उसे पूरा करने के अन्य तरीके हैं। सबसे साफ संभवत: वह होगा जो आप चलाना चाहते हैं जब सिस्टम हुक logindइनहिबिटर्स में हुक करने जा रहा है और फिर इसे पृष्ठभूमि डेमॉन के रूप में चलाएं।

एक अधिक सामान्य समाधान logindअवरोधकों में एक डेमॉन हुक होगा , ( सिस्टमड-लॉक-हैंडलर और xss- लॉक देखें ), और फिर जब सिस्टम सोने जा रहा है तो यह उपयोगकर्ता सत्र लक्ष्य को सक्रिय करेगा कि आप अपनी सेवाओं का आदेश दे सकते हैं के अंतर्गत।


2

@Kyrias से प्रतिक्रिया को जोड़ते हुए, यहां अपना स्वयं का उपयोगकर्ता स्तर बनाने का एक तरीका है sleep.target:

~ / .Local / शेयर / systemd / उपयोगकर्ता / 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 / शेयर / systemd / उपयोगकर्ता / 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

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.