নেটওয়ার্ক ম্যানেজার: সিস্টেমকে স্লিপে পাঠানোর সময় অক্ষম নেটওয়ার্ক


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

সম্পাদনা: এটি পরিষ্কার করার জন্য, স্ক্রিপ্টগুলি থাকা /etc/pm/sleep.dকোনও উপকারে আসেনি কারণ স্ক্রিপ্ট কার্যকর হওয়ার সাথে সাথেই নেটওয়ার্কটি ইতিমধ্যে অক্ষম হয়ে গেছে।


পাওয়ার ম্যানেজমেন্ট অপশনগুলির দিকে একবার নজর দিন এবং "কম্পিউটারটি সাসপেন্ড করা অবস্থায় নেটওয়ার্কিং নিষ্ক্রিয় করুন" এর প্রভাবের জন্য কিছু দেখুন
জোসেফ আর

যেমন জিনিস আছে. আমি জিনোম ৩ এর সাথে xmonad ব্যবহার করছি
সি-অটো

আপনার অর্থ আপনি জিনোম শেলকে xmonad দিয়ে প্রতিস্থাপন করছেন, তবে অন্য কিছু পরিবর্তন করছেন না? যদি তা হয় তবে পাওয়ার অপশনগুলি "পাওয়ার" ফলকের মধ্যে রয়েছে gnome-control-center
strugee

আমি জানি. আপনি বলেছিলেন তেমন কিছুই নেই।
সি-অটো

আপনি যে প্রশ্নটি জিজ্ঞাসা করছেন তা XY সমস্যাটিই হ'ল , গত বছর আমি আপনাকে যে উত্তর সরবরাহ করেছি, unix.stackexchange.com/questions/62157/… , পাওয়ার ম্যানেজমেন্ট স্থগিত / পুনঃসূচনাতে আবদ্ধ কাস্টম জব হুক তৈরির উপায় এখানে যেতে। নেটওয়ার্কটিকে আরও কিছুটা দীর্ঘায়িত করার চেষ্টা করা এই সমস্যার কাছে যাওয়ার সঠিক উপায় নয়।
slm

উত্তর:


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

লক্ষ্য করুন যে স্ক্রিপ্টটি যদি জেনেরিক ত্রুটি ফিরিয়ে দেয় তবে সাসপেন্ডটি বাতিল হয়ে যায়, তাই এটির যত্ন নিন (বিশেষত আপনি কি আমার মতো, idাকনাটি বন্ধ করতে এবং ল্যাপটপটি দূরে সরিয়ে রাখার জন্য ব্যবহার করেন ...)। আরও জটিল বিষয়গুলি স্ক্রিপ্ট করতে, স্যামুয়েল পিটারকে তার মন্তব্যের জন্য ধন্যবাদ:

আপনি সংজ্ঞায়িত বিশেষ মান এক ফিরে স্থগিত গর্ভপাত ছাড়া একটি ত্রুটি আসতে পারেন /usr/lib/pm-utils/pm-functions: $NA "প্রযোজ্য নয়" হয়, $DX"অক্ষম", এবং $NX"এক্সিকিউটেবল" হয়। দেখুন hook_exit_statusঅপরাহ্ন-ফাংশন স্ক্রিপ্টের মধ্যে ফাংশন

আপনি স্বয়ংক্রিয়ভাবে পুনরায় শুরু করার পরে এগুলি পুনরায় মাউন্ট করতে পারেন; থেকে এখানে আমি দেখেছি যে:

যদি আপনি স্থগিতকরণ বা হাইবারনেটের সময় আপনার সেটআপের সাথে সুনির্দিষ্ট কিছু করতে চান তবে আপনি সহজেই নিজের হুকটি /etc/pm/sleep.d এ রাখতে পারেন। এই ডিরেক্টরিতে থাকা হুকগুলিকে স্থগিতের সময় বর্ণানুক্রমিক ক্রমে ডাকা হবে (এই কারণেই তাদের নামগুলি সমস্ত 2 টি সংখ্যা দিয়ে শুরু করা হয়, যাতে ক্রমটি স্পষ্ট করে দেওয়া হয়) এবং পুনরায় শুরু করার সময় বিপরীত ক্রমে।

তাই একই লিপিতে নির্বাণ umountএবং mount command(যে পর সাসপেন্ড মধ্যে এটি ডাউন নেটওয়ার্কের শাট আগে মৃত্যুদন্ড কার্যকর করা হয়, এবং সারসংকলন মধ্যে) কাজ করা উচিত।

আপনার প্রশ্নের লিংকে প্রকাশ হয়; এটি আমার ব্যাখ্যা যে যদি নেটওয়ার্কম্যানেজার 00-50 লেভেলের স্ক্রিপ্টগুলি চালনার আগে নেটওয়ার্কটি বন্ধ করে দেয় তবে এটি একটি বাগ --- কমপক্ষে যদি সংযোগটি সিস্টেম সংযোগ হিসাবে চিহ্নিত হয় (নেটওয়ার্ক সেটিংসে -> বিকল্পগুলি -> পরিচয় - > অন্যান্য ব্যবহারকারীর জন্য উপলব্ধ করুন)।


pm-utilsসমস্ত মূলধারার ডিস্ট্রোজে +1 পাওয়া উচিত এবং সম্ভবত এটি ডিফল্টরূপে ইনস্টল করা আছে।
স্বর্ণলোক

1
দ্রষ্টব্য যে আপনি / usr / lib / pm-pm-utils / pm- ফাংশনগুলিতে সংজ্ঞায়িত বিশেষ মানগুলির মধ্যে একটি ফিরিয়ে দিয়ে স্থগিতাদেশ বাতিল না করে ত্রুটি ফিরে পেতে পারেন: $NA"প্রযোজ্য নয়", $DXএটি "অক্ষম", এবং $NX"কার্যকর" নয় " । দেখুন hook_exit_statusঅপরাহ্ন-ফাংশন স্ক্রিপ্টের মধ্যে ফাংশন
স্যামুয়েল পিটার

দ্রষ্টব্য: এই উত্তরটিতে আরও একটি উত্তর ওপিকে সরবরাহ করা হয়েছিল: unix.stackexchange.com/questions/62157/… আমার কাছে মনে হয় তিনি এমন অন্য কোনও কিছু সন্ধান করছেন যা নেটওয়ার্ক ম্যানেজারের কাছে নেই।
slm

আমি ইতিমধ্যে রেফারেন্সযুক্ত প্রশ্নে বলেছি, স্ক্রিপ্টগুলিতে আমার কোনও নেটওয়ার্ক নেই (অর্থাত্ 10-পরিমাণ)। যে কোনও স্ক্রিপ্ট কার্যকর হওয়ার সাথে সাথেই নেটওয়ার্কটি ইতিমধ্যে ডাউন হয়ে গেছে।
সি-অটো

1
system connectionসম্পত্তি তদন্ত করব । সম্পাদনা: এটি ইতিমধ্যে একটি ছিল system connection
সি-অটো

3

@ এনএসসি যা বলেছে তার ভিত্তিতে আপনি তার পরিবর্তে সেই ডি-বাস (সিস্টেম সেশন) নিজেই সিগন্যাল শুনতে পেলেন। org.freedesktop.login1.Managerইন্টারফেস সহ সাধারণ কর্মপ্রবাহটি হ'ল :

  1. সঙ্গে সিস্টেম স্লিপ বাধা (সম্ভবত বন্ধও) Inhibit(what, who, why, mode)
    • what: sleepবাshutdown:sleep
    • who: unmount_cifsবা আপনি যেটিকে আপনার স্ক্রিপ্ট কল করবেন whatever
    • why: unmounting cifs X before suspend ...বা সমতুল্য
    • mode: delayসর্বাধিক জন্য বাধা। 5 এর (ডিফল্ট) বা blockঅনির্দিষ্টকালের জন্য অবরুদ্ধ করার জন্য (আমি প্রথমটি সুপারিশ করব your
    • এটি একটি ফাইল বর্ণনাকারী প্রদান করে যা লকটি 'ধরে রাখে'
  2. এখন আপনি সংকেত শুনুন
    • PrepareForSleep, যা Trueস্থগিত বা হাইবারনেট করতে হবে এবং Falseপুনরায় শুরু এবং গলানোর সময় ফিরে আসে)
    • PrepareForShutdown, যা Trueশাটডাউন করার সময় ফিরে আসে এবং ফিরে Falseপাওয়ার পরে ফিরে আসা উচিত (পরিবর্তে এটি একই সাথে ফিরে Falseআসে Trueযা আমার কাছে কোনও ধারণা রাখে না, তাই আমি কেবল Falseএখানে অংশটি উপেক্ষা করব) আপনার কাছে ইতিমধ্যে কোনও ধরণের স্ব-সংস্থান স্ক্রিপ্ট রয়েছে সিস্টেমে যাইহোক যাইহোক শুরু করুন, তাই না?)
  3. Trueসিগন্যালটি হ্যান্ডলিংয়ের সাথে সম্পন্ন হওয়ার সাথে সাথে (অর্থাত্ আনমাউন্টিং) আপনি ফাইল বর্ণনাকারী (ফিরে এসে Inhibit(...)) বন্ধ করে লকটি ছেড়ে দেন , যাতে মেশিনটি পুরো 5s অপেক্ষা না করে যত তাড়াতাড়ি ঘুমোতে বা শাটডাউন করতে যেতে পারে ( এমনকি blockমোডে থাকা অনির্দিষ্টকালের জন্যও )
  4. আপনি Falseপুনরায় গণনা করে সিগন্যালটি (পুনরায় শুরু / গলানো) পরিচালনা করতে পারেন (সম্ভবত প্রথমে নেটওয়ার্কটি ফিরে আসার অপেক্ষায়) এবং তারপরে Inhibit(...)(পরবর্তী ঘুম বা বন্ধের জন্য) একটি নতুন লক তৈরি করতে পারেন

পাইথনে (২.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()

ঠিক এই একই পন্থাটি ব্যবহার করে ঘুম এবং শাটডাউন সম্পর্কিত আইএম অ্যাকাউন্টগুলি সংযোগ বিচ্ছিন্ন করার জন্য এই সংক্ষেপে আপনি পিডগিনের চারপাশে আমার মোড়ক পেয়ে যাবেন।

ইনহিবিটার লক্স এবং logindডি-বাস এপিআই- তে সরকারী ফ্রিডেস্কটপ ডকুমেন্টেশনও দেখুন ।


আমি অনুরূপ কিছু করার চেষ্টা করছি ( unix.stackexchange.com/q/337853 এর জন্য )। এটি প্রতিশ্রুতিবদ্ধ শোনায়, তবে অবশ্যই এটি নেটওয়ার্ক ম্যানেজারের সাথে রেস করছে যা একই কাজ করছে? আমার নেটওয়ার্ক-নির্ভর স্ক্রিপ্টটি নেটওয়ার্কম্যানেজারটি নেটওয়ার্ক বন্ধ করতে যে পরিমাণ সময় নেয় তার চেয়ে বেশি সময় নেয়?
ডেভিড

( Github.com/davidn/av ) চেষ্টা করে দেখে মনে হচ্ছে এটি কার্যকর হয়েছে!
ডেভিড

1

আপনি কেন nmডিভাইসগুলি বন্ধ করে দিচ্ছেন তা জানার চেষ্টা করতে পারেন :

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

যখন (যেমন আমার ক্ষেত্রে (ফেডোরা ২০%), systemdসিগন্যালটি ট্রিগার করছে, আপনি dbus কনফিগারেশনে এর সরবরাহ অস্বীকার করতে পারেন:

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


আপনি কি বোঝাতে চেয়েছেন? আমার কি নেটওয়ার্ক ম্যানেজার পরিষেবা বন্ধ করা উচিত? আমি বুঝতে পারি না যে এটি কীভাবে সাহায্য করবে।
সি-অটো

স্ট্যাক এক্সচেঞ্জে স্বাগতম! দয়া করে এমন উত্তর দিন না যা মূলত একক লিঙ্ক are যদি সম্ভব হয় তবে আপনার সাথে লিখিত সামগ্রীর প্যারাফ্রেজ করা উচিত, অন্যথায়, অনুলিপি করা অবধি অনুলিপি করা এবং আটকানো ভাল। এবং আবার, স্বাগতম!
strugee
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.