NetworkManager: सिस्टम को सोते समय निष्क्रिय नेटवर्क


11

जब मैं अपनी नोटबुक निलंबित करता हूं, NetworkManagerतो वायरलेस नेटवर्क (इन nm-manager.c:do_sleep_wake) को निष्क्रिय कर देता है ।

हालाँकि, मैं अभी भी बहुत कम समय के लिए नेटवर्क का उपयोग करना पसंद करूंगा ( cifsआरोहित करने के लिए माउंट को अनमाउंट करने के लिए , अन्यथा मेरे सिस्टम को फिर से शुरू होने पर अनुपयोगी बना सकता है)।

मैं अपने नेटवर्क को कैसे निष्क्रिय NetworkManager नहीं कर सकता? क्या कुछ सेकंड इंतजार करना संभव है (या जब तक कुछ ट्रिगर नहीं हो जाता है, या एक ताला जारी किया जाता है)?

संबंधित: pm-utils: सस्पेंड स्क्रिप्ट में कोई नेटवर्क नहीं?

लॉग को डीबग करें:

Feb  8 10:03:23 zenbook NetworkManager[3606]: <debug> [1360314203.373226] [nm-manager.c:3391] upower_sleeping_cb(): Received UPower sleeping signal
Feb  8 10:03:23 zenbook NetworkManager[3606]: <info> sleep requested (sleeping: no  enabled: yes)
Feb  8 10:03:23 zenbook NetworkManager[3606]: <info> sleeping or disabling...
Feb  8 10:03:23 zenbook NetworkManager[3606]: <info> (wlan0): now unmanaged

EDIT: यह स्पष्ट करने के लिए, /etc/pm/sleep.dस्क्रिप्ट के निष्पादित होते ही नेटवर्क में मदद नहीं करता क्योंकि पहले से ही अक्षम है।


पावर प्रबंधन विकल्पों पर एक नज़र डालें और "कंप्यूटर को निलंबित कर दिए जाने पर नेटवर्किंग अक्षम करें" के प्रभाव के लिए कुछ देखें
जोसेफ आर।

ऐसा कुछ नहीं है। मैं सूक्ति 3 के साथ xmonad का उपयोग कर रहा हूं
C-Otto

आपका मतलब है कि आप गनोम शैल को xmonad से बदल रहे हैं, लेकिन कुछ और नहीं बदल रहे हैं? यदि ऐसा है, तो पावर विकल्प "पावर" फलक में हैं gnome-control-center
शरणार्थी

मुझे पता है। आपकी कही हुई कोई बात नहीं है।
सी-ओटो

आप जो प्रश्न पूछ रहे हैं , वह एक XY समस्या का एक सा है , जो उत्तर मैंने आपको पिछले साल प्रदान किया था, unix.stackexchange.com/questions/62157/… , wrt बनाने के लिए कस्टम प्रबंधन हुक पावर मैनेजमेंट सस्पेंड / रिज्यूम से बंधा है। यहाँ जाने के लिए। नेटवर्क को थोड़ा सा लंबा करने की कोशिश करना इस समस्या से निपटने का सही तरीका नहीं है।
स्लम

जवाबों:


4

मुझे नहीं पता कि यह मानक है, लेकिन उबंटू में ऐसी स्क्रिप्ट हैं जो सस्पेंड होने से पहले /etc/pm/sleep.dऔर फिर से शुरू होने के बाद चलाई जाती हैं /usr/lib/pm-utils/sleep.d। मेरे सिस्टम में ऐसा लगता है कि नेटवर्क बंद हो गया है /usr/lib/pm-utils/sleep.d/60_wpa_supplicant

आप /etc/pm/sleep.d/10-umountअपने शेयरों को निलंबित करने से पहले उदाहरण के लिए एक स्क्रिप्ट लिख सकते हैं । इन लिपियों की संरचना इस प्रकार है:

#!/bin/sh
#
case "${1}" in
        suspend|hibernate)
                # your command to umount here 
                ;;
        resume|thaw)
                # (possibly) your command to mount here
                ;;
esac

ध्यान दें कि यदि स्क्रिप्ट एक सामान्य त्रुटि लौटाती है तो निलंबन निरस्त कर दिया जाता है, इसलिए इस बात का ध्यान रखें (विशेष रूप से आप, मेरी तरह, ढक्कन को बंद करने और लैपटॉप को दूर स्टोर करने के लिए उपयोग करें ...)। अधिक जटिल चीजों को स्क्रिप्ट करने के लिए, सैमुअल पीटर को उनकी टिप्पणी के लिए धन्यवाद:

आप में परिभाषित किए गए विशेष मानों में से एक को लौटाए बिना सस्पेंड किए बिना त्रुटि वापस कर सकते हैं /usr/lib/pm-utils/pm-functions: $NA "लागू नहीं है", $DX"अक्षम" है, और $NX"निष्पादन योग्य नहीं" है। hook_exit_statusदोपहर-फ़ंक्शन स्क्रिप्ट में फ़ंक्शन देखें

स्वचालित रूप से फिर से शुरू करने के बाद आप उन्हें हटा भी सकते हैं; से यहां मैंने पाया कि:

यदि आप निलंबन या हाइबरनेट के दौरान अपने सेटअप के लिए कुछ विशिष्ट करना चाहते हैं, तो आप आसानी से /etc/pm/sleep.d में अपना स्वयं का हुक लगा सकते हैं। इस निर्देशिका में हुक को सस्पेंड के दौरान अल्फ़ाबेटिक ऑर्डर में कहा जाएगा (यही कारण है कि उनके नाम सभी 2 अंक से शुरू होते हैं, ऑर्डर को स्पष्ट करने के लिए) और फिर से शुरू के दौरान रिवर्स ऑर्डर में।

तो एक ही स्क्रिप्ट में डाल देना चाहिए umountऔर mount commandकाम करना चाहिए (निलंबन को नेटवर्क बंद करने से पहले निष्पादित किया जाता है, और उसके बाद फिर से शुरू करें)।

अपने प्रश्न में लिंक खुलासा है, यह मेरी व्याख्या है कि यदि NetworkManager नेटवर्क को स्क्रिप्ट से पहले ले जाता है तो 00-50 स्तर पर चलाए जाते हैं यह बग है --- कम से कम यदि कनेक्शन सिस्टम कनेक्शन के रूप में चिह्नित किया गया है (नेटवर्क सेटिंग्स में -> विकल्प -> पहचान - > अन्य उपयोगकर्ता को उपलब्ध कराएं)।


+1 pm-utilsसभी मुख्यधारा के डिस्ट्रोस पर उपलब्ध होना चाहिए और संभवतः डिफ़ॉल्ट रूप से इंस्टॉल किया गया है।
गोल्डीलॉक्स

1
ध्यान दें कि आप / usr / lib / pm-utils / pm-functions में परिभाषित किए गए विशेष मानों में से किसी एक को वापस लाए बिना सस्पेंड किए बिना एक त्रुटि वापस कर सकते हैं: $NA"लागू नहीं है", $DX"अक्षम" है, और $NX"निष्पादन योग्य नहीं है" । hook_exit_statusदोपहर के कार्यों की स्क्रिप्ट में फ़ंक्शन देखें
शमूएल पीटर

नोट: यह उत्तर इस Q पर ओपी को एक और प्रदान किया गया था: unix.stackexchange.com/questions/62157/… मुझे लगता है कि वह कुछ और की तलाश में है जो कि wrt NetworkManager मौजूद नहीं है।
SLM

जैसा कि मैंने पहले ही संदर्भित प्रश्न में कहा है, मेरे पास लिपियों में कोई नेटवर्क नहीं है (अर्थात 10-umount)। जैसे ही कोई स्क्रिप्ट निष्पादित होती है, नेटवर्क पहले से ही डाउन है।
सी-ओटो 12

1
मैं system connectionसंपत्ति की जांच करूंगा । संपादित करें: यह पहले से ही एक था system connection
सी-ओटो

3

@Ensc ने जो कहा, उस पर निर्माण करते हुए, आप इसके बजाय उस D- बस (सिस्टम सेशन) के संकेत को सुन सकते थे। org.freedesktop.login1.Managerइंटरफ़ेस के साथ सामान्य वर्कफ़्लो होगा:

  1. अवरोध प्रणाली नींद (शायद बंद भी) के साथ Inhibit(what, who, why, mode)
    • what: sleepयाshutdown:sleep
    • who: unmount_cifsया जो भी आप अपनी स्क्रिप्ट को कॉल करेंगे
    • why: unmounting cifs X before suspend ...या समकक्ष
    • mode: delayएक अधिकतम के लिए निषेध करने के लिए। 5s (डिफ़ॉल्ट) या blockअनिश्चित काल के लिए ब्लॉक करने के लिए (मैं पहले की सिफारिश करेंगे। यदि आपकी स्क्रिप्ट स्टालों, आपकी नोटबुक बस सोने के लिए कभी नहीं जाएगी।)
    • यह एक फ़ाइल विवरणक लौटाता है जो लॉक को 'होल्ड' करता है
  2. अब आप संकेत के लिए सुनो
    • PrepareForSleep, जो Trueजब निलंबित या हाइबरनेट करने के लिए वापस आता है और Falseजब फिर से शुरू और पिघलना होता है)
    • PrepareForShutdown, जो Trueशटडाउन के बारे में लौटता है और Falseवापस पावर होने पर वापस लौटना चाहिए (इसके बजाय यह Falseउसी समय भी लौटता है जब यह Trueमेरे लिए कोई मतलब नहीं रखता है, इसलिए मैं सिर्फ Falseयहाँ भाग को अनदेखा कर दूंगा; आप शायद पहले से ही किसी तरह की ऑटोमेटिंग लिपि में हैं; सिस्टम पर वैसे भी शुरू, तुम नहीं?)
  3. जैसे ही आप Trueसिग्नल को हैंडल करने (यानी अनमाउंटिंग) के साथ हो जाते हैं, आप फ़ाइल डिस्क्रिप्टर (द्वारा लौटाया गया Inhibit(...)) को बंद करके लॉक को छोड़ देते हैं , ताकि मशीन पूरे 5 एस के इंतजार किए बिना जितनी जल्दी हो सके सो जाए या बंद हो जाए। या अनिश्चित काल तक जब blockमोड में)
  4. आप Falseसंकेत को फिर से शुरू (पुनः आरंभ / पिघलना) संभाल सकते हैं (हो सकता है कि पहले नेटवर्क के वापस आने का इंतज़ार कर रहे हों) और फिर Inhibit(...)(अगली नींद या शटडाउन के लिए) एक नया लॉक बनाएं

पायथन (2.7) में यह इस तरह दिख सकता है:

#!/usr/bin/env python
import os, atexit, dbus, gobject
from dbus.mainloop import glib

def login1ManagerDBusIface():
    system_bus = dbus.SystemBus()
    proxy = system_bus.get_object( 'org.freedesktop.login1',
                                  '/org/freedesktop/login1' )
    login1 = dbus.Interface( proxy, 'org.freedesktop.login1.Manager')
    return login1

def sleepShutdownInhibit():
    login1 = login1ManagerDBusIface()
    fd = login1.Inhibit( 'shutdown:sleep', 'unmount_cifs',
                         'Unmounting before suspend/shutdown ...',
                         'delay' )
    return fd

def take_lock():
    global FD
    FD = sleepShutdownInhibit()

def remove_lock():
    global FD
    if FD:
        os.close( FD.take() )
        FD = None

def signal_handler(boolean, member=None):
    if boolean:  ## going to suspend/hibernate or shutdown
        ## PLACE YOUR UNMOUNT STUFF HERE
        remove_lock()
    else:  ## resume/thaw
        if member == 'PrepareForSleep':
            ## PLACE YOUR MOUNT STUFF HERE
            take_lock()

if __name__ == '__main__':
    take_lock()
    atexit.register(remove_lock)
    login1 = login1ManagerDBusIface()
    for signal in ['PrepareForSleep', 'PrepareForShutdown']:
        login1.connect_to_signal(signal, signal_handler,
                                 member_keyword='member')
    glib.DBusGMainLoop(set_as_default=True)
    loop = gobject.MainLoop()
    loop.run()

में इस सार डिस्कनेक्ट आईएम के लिए नींद और शटडाउन होने पर खातों, ठीक उसी दृष्टिकोण का उपयोग कर आप Pidgin चारों ओर मेरी आवरण मिल जाएगा।

इनहिबिटर लॉक और logindडी-बस एपीआई पर आधिकारिक फ्रीडेसटॉप दस्तावेज़ भी देखें ।


मैं कुछ ऐसा ही करने के लिए देख रहा हूं ( unix.stackexchange.com/q/337853 के लिए )। यह आशाजनक लगता है, लेकिन निश्चित रूप से यह NetworkManager के साथ दौड़ रहा है जो एक ही काम कर रहा है? यदि नेटवर्क-नेटवर्क को रोकने के लिए NetworkManager की तुलना में मेरी नेटवर्क-निर्भर स्क्रिप्ट को चलने में अधिक समय लगता है तो क्या होगा?
डेविड

इसे आज़माया ( github.com/davidn/av ) और यह काम करने लगता है!
डेविड

1

आप यह पता लगाने की कोशिश कर सकते हैं कि nmउपकरणों को बंद क्यों किया जा रहा है:

dbus-monitor --system &
nmcli g logging level DEBUG
--> trigger suspend

जब (जैसे मेरे मामले में (फेडोरा 20)), systemdसिग्नल को ट्रिगर कर रहा है, तो आप डबस में इसकी डिलीवरी से इनकार कर सकते हैं:

---- /etc/dbus-1/system.d/99-my-suspend.conf ---
<busconfig>
        <policy user="root">
                <deny receive_interface="org.freedesktop.login1.Manager"
                      receive_type="signal"
                      receive_member="PrepareForSleep"/>
        </policy>
</busconfig>

दुर्भाग्य से, ये नियम बहुत ठीक नहीं हैं और यह PrepareForSleepअन्य प्रक्रियाओं के लिए भी संकेत को अवरुद्ध करेगा ।


0

निलंबन से पहले सेवा बंद करने का प्रयास करें और फिर से शुरू करने के बाद फिर से शुरू करें। उसके जैसा:

http://oleeekchoff.blogspot.ie/2012/05/restart-modulesservices-after.html


क्या मतलब? क्या मुझे नेटवर्क मैनेजर सेवा बंद कर देनी चाहिए? मुझे समझ नहीं आ रहा है कि यह कैसे मदद करेगा।
सी-ओटो

स्टैक एक्सचेंज में आपका स्वागत है! कृपया उत्तर न दें जो मूल रूप से एकल लिंक हैं। यदि संभव हो, तो आपको उस सामग्री को जोड़ना चाहिए, जिससे आप कॉपी करते हैं, अन्यथा, कॉपी करना और चिपकाना तब तक ठीक है जब तक आप इसे विशेषता देते हैं। और फिर, आपका स्वागत है!
स्ट्रॉन्ग
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.