সাসপেন্ড থেকে হাইবারনেটে কীভাবে স্বয়ংক্রিয়ভাবে যাবেন?


53

সাসপেন্ড, ওরফে "সাসপেন্ড শেডেশন" থেকে উবুন্টুকে হাইবারনেট রাজ্যে যেতে দেওয়া কি সম্ভব?

আমি যা খুঁজছি তা হ'ল:
আমি যখন theাকনাটি বন্ধ করি, তখন ল্যাপটপটি সাসপেন্ডে রাখা হয়। তারপরে, পূর্ব নির্ধারিত সময়ের পরেও (ব্যাটারিটি শক্তিশালী হয়ে উঠলেও) যদি আমি এখনও এটি ব্যবহার না করি তবে এটি ব্যাটারি শক্তি সঞ্চয় করতে একটি হাইবারনেটে নিজেকে যুক্ত করা উচিত into

উদাহরণস্বরূপ, আমার laptopাকনাটি বন্ধ করার পরে আমার ল্যাপটপটি সাসপেন্ডে যাওয়ার জন্য সেট আপ করা হয়েছে। তারপরে যদি আমি এটি পুরো দিন ব্যবহার না করি তবে ব্যাটারি সমতল হয়, কারণ সাসপেন্ড মোডে এমনকি হার্ডওয়্যার এখনও অল্প পরিমাণ শক্তি গ্রহণ করে এবং ব্যাটারিটি অবশেষে স্রাব করে। আমি যা চাই তা হ'ল উবুন্টুকে বলতে সক্ষম হওয়া যে এটি স্থগিত করা হলেও, কয়েক ঘন্টা নিষ্ক্রিয়তার পরেও এটি হাইবারনেটে যেতে হবে।

উইন্ডোজ এটি করতে পারে। টাইমারে স্ট্যান্ডবাই বা হাইবারনেটে যাওয়ার জন্য উবুন্টুকে প্রোগ্রাম করা যেতে পারে তবে দুটোই নয়।


আমার গবেষণায় আমি একই লিনাক্স মিন্টের থ্রেডটি পেয়েছি, তবে "সাসপেন্ড শেডেশন" সেই বৈশিষ্ট্যের জন্য কোনও মাইক্রোসফ্ট শব্দ নয় এবং যতদূর আমি বলতে পারি লিনাক্স মিন্ট ফোরামের ব্যবহারকারী এটি আবিষ্কার করেছিলেন যা এটি উল্লেখ করেছিলেন।
ayan4m1

এই বৈশিষ্ট্যের জন্য আরও ভাল নাম আছে?
সের্গেই স্টাডনিক

আমি যতদূর বলতে পারি, বৈশিষ্ট্যের জন্য কোনও সর্বজনীনভাবে স্বীকৃত নাম নেই। "হাইব্রিড সাসপেন্ড" কারও কারও দ্বারা ব্যবহৃত হয়, "লন্ডন সাসডেশন" সেই লিনাক্স মিন্ট ফোরামের ব্যবহারকারী ব্যবহার করেছেন এবং আমি প্রক্রিয়াটি উল্লেখ করার জন্য "হাইবারনেট এবং সাসপেন্ড" শুনেছি। মাইক্রোসফ্ট আনুষ্ঠানিকভাবে উইন্ডোজ 7 এর জন্য এটি "হাইব্রিড স্লিপ" হিসাবে আনুষ্ঠানিকভাবে উল্লেখ করে।
ayan4m1

2
@ ayan4m1 আমি বুঝতে পারি এটি একটি পুরানো প্রশ্ন, তবে আমি মনে করি এটি পরিষ্কার করা গুরুত্বপূর্ণ। হাইব্রিড ঘুম "নির্দিষ্ট সময়ের পরে ঘুম তারপর হাইবারনেট" এর মতো নয়। ব্যাটারি ফুরিয়ে যাওয়ার মাধ্যমে হাইব্রিড ঘুম সহজেই হাইবারনেটে পরিণত হয়। ওপি দ্বারা বর্ণিত আচরণের জন্য হাইব্রিড স্লিপ সক্ষম করার প্রয়োজন হয় না।
পল

উত্তর:


20

ইন উবুন্টু 18.04 এটা আরো অনেক কিছু সহজ। ইন systemd হল একটি নতুন মোড উপলব্ধ স্থগিত-তারপর-হাইবারনেট । এই ফাংশনটি ব্যবহার শুরু করতে আপনাকে পরবর্তী সামগ্রী সহ একটি ফাইল /etc/systemd/sleep.conf তৈরি করতে হবে :

[Sleep]
HibernateDelaySec=3600

তারপরে আপনি এটি আদেশ দ্বারা পরীক্ষা করতে পারেন:

sudo systemctl suspend-then-hibernate

HibernateDelaySecহাইবারনেটে দেরি কমাতে আপনি সম্পাদনা করতে পারেন ।


যদি সব ঠিকঠাক কাজ করে তবে আপনি etাকনা ক্লোজ অ্যাকশন পরিবর্তন করতে পারেন, এটি করতে আপনাকে /etc/systemd/logind.conf ফাইলটি সম্পাদনা করতে হবে

আপনাকে বিকল্পটি খুঁজে বের করতে হবে HandleLidSwitch=, এটিকে নিয়ন্ত্রণ করতে হবে এবং এতে পরিবর্তন করতে হবে HandleLidSwitch=suspend-then-hibernate। তারপরে আপনাকে পরবর্তী কমান্ডের মাধ্যমে সিস্টেমেড-লগইনড সার্ভিসটি পুনরায় চালু করতে হবে (সতর্কতা! আপনি ব্যবহারকারীর সেশনটি পুনরায় চালু হবে):

sudo systemctl restart systemd-logind.service

এখানেই শেষ! এখন আপনি এই দুর্দান্ত ফাংশনটি ব্যবহার করতে পারেন।


এটি স্পট ছিল। এটি পপ-এ ব্যবহার করা হয়েছে! _OS 18.10 (ওরফে উবুন্টু 18.10)।
eduncan911

ব্রিলিয়ান্ট আপনাকে ধন্যবাদ! স্লিপ.কনফ কিছু উপায়ে হাইবারনেট মোডকেও প্রভাবিত করে, বা এটি কেবল স্থগিত-পরে-হাইবারনেটকে প্রভাবিত করে?
ব্যবহারকারী 2428107

@ ইউজার ২৪২৮১০7 আপনি ম্যানুয়াল সিটিউটোরিয়ালস
ডকস /

35

এর সমাধান সহজ। প্রথমে, সাসপেন্ড এবং পুনরায় চালু করার পরে, পিএম-সাসপেন্ড প্রোগ্রামটি /etc/pm/sleep.dএবং এর মধ্যে বেশ কয়েকটি স্ক্রিপ্টগুলি কার্যকর করে /usr/lib/pm-utils/sleep.d। সুতরাং আমার সমাধানটি এমন স্ক্রিপ্ট যুক্ত করা যা নিম্নলিখিতগুলি করে:

  1. স্থগিত করার পরে, বর্তমান সময়টি রেকর্ড করুন এবং আরটিওয়াক ব্যবহার করে একটি ওয়েকআপ ইভেন্টটি নিবন্ধ করুন।
  2. পুনরায় শুরু হওয়ার পরে উপরের রেকর্ডকৃত সময়ের বিপরীতে বর্তমান সময়টি পরীক্ষা করুন। যদি পর্যাপ্ত সময় কেটে যায়, তবে আমরা সম্ভবত আরটিসি টাইমার ইভেন্টের কারণে জেগেছি। অন্যথায় আমরা ব্যবহারকারীর ইভেন্টের (যেমন ল্যাপটপের স্ক্রিন খোলার) কারণে খুব তাড়াতাড়ি ঘুম থেকে উঠেছিলাম।
  3. আমরা যদি আরটিসি টাইমারের কারণে জাগ্রত হই, তবে অবিলম্বে হাইবারনেশনে যাওয়ার জন্য "বিকাল-হাইবারনেট" কমান্ডটি জারি করুন।

এটি এখানে একটি স্ক্রিপ্ট রয়েছে। এটির নাম দিন 0000rtchibernateএবং এটি /etc/pm/sleep.dডিরেক্টরিতে রাখুন (0000 গুরুত্বপূর্ণ, যাতে স্ক্রিপ্টটি স্থগিতের পরে প্রথমে কার্যকর করা হয়, এবং পুনরায় শুরুতে শেষ হয়)।

#!/bin/bash
# Script name: /etc/pm/sleep.d/0000rtchibernate
# Purpose: Auto hibernates after a period of sleep
# Edit the "autohibernate" variable below to set the number of seconds to sleep.
curtime=$(date +%s)
autohibernate=7200
echo "$curtime $1" >>/tmp/autohibernate.log
if [ "$1" = "suspend" ]
then
    # Suspending.  Record current time, and set a wake up timer.
    echo "$curtime" >/var/run/pm-utils/locks/rtchibernate.lock
    rtcwake -m no -s $autohibernate
fi

if [ "$1" = "resume" ]
then
    # Coming out of sleep
    sustime=$(cat /var/run/pm-utils/locks/rtchibernate.lock)
    rm /var/run/pm-utils/locks/rtchibernate.lock
    # Did we wake up due to the rtc timer above?
    if [ $(($curtime - $sustime)) -ge $autohibernate ]
    then
        # Then hibernate
        rm /var/run/pm-utils/locks/pm-suspend.lock
        /usr/sbin/pm-hibernate
    else
        # Otherwise cancel the rtc timer and wake up normally.
        rtcwake -m no -s 1
    fi
fi

আশা করি এই কোডটি এই বার্তা বোর্ডের মাধ্যমে আসবে (এটি এখানে আমার প্রথম পোস্ট)।

autohibernate=7200হাইবারনেশনে যাওয়ার আগে আপনি যা ঘুমোবেন তা বেশ কয়েক সেকেন্ড পরেও শীর্ষে সময়সীমা মান সম্পাদনা করুন । উপরের বর্তমান মান 2 ঘন্টা। দ্রষ্টব্য, আপনি ল্যাপটপটি সেই সময় কয়েক সেকেন্ডের জন্য জেগে উঠবেন, যখন এটি হাইবারনেট ফাংশনটি সম্পাদন করছে।

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

আমি গত দু'দিন ধরে এই পদ্ধতিটি ব্যবহার করছি, এখন পর্যন্ত এটি সফল হয়েছে (এবং আজ বিকেলে একটি মৃত ব্যাটারি থেকে আমাকে বাঁচিয়েছে)। উপভোগ করুন।

অন্যান্য লিনাক্স বিতরণগুলি systemdএবং নতুন উবুন্টু সংস্করণগুলি ব্যবহার করে তবে স্ক্রিপ্টের /usr/lib/systemd/system-sleepপরিবর্তে স্ক্রিপ্টটি রাখলে এটি এখনও কাজ করা উচিত /etc/pm/sleep.d/usr/sbin/pm-hibernateকমান্ডটি প্রতিস্থাপন করুন systemctl hibernate


এটি এখানে কাজ করেছে, তবে আমি সবার সাথে এক্স যুক্ত করার জন্য ফাইলটি chmoded করার পরেই। আমি একটি বিশাল নবাগত এবং এটি বের করতে আমার 2 দিন সময় লেগেছে। খুব ভাল স্ক্রিপ্ট এবং আমি আশা করি এটি যে কারও সমস্যা হতে পারে এটিকে সহায়তা করে। ধন্যবাদ.

2
এটি একটি দরকারী উবুন্টু / দেবিয়ান প্যাকেজ তৈরি করবে!
পেটর পুদলিক

কেবল ভাবছি: এটি কি উবুন্টু 13.04 এর জন্য বৈধ হবে? আমার ঠিক এই সমাধানটি দরকার তবে আমি যদি স্ত্রীর ল্যাপটপের সাথে আরও নতুন সংস্করণগুলিতে জিনিসগুলি ভেঙে ফেলা যায় তবে গণ্ডগোল করতে চাই না।
টরবেন গুন্ডটোফেট-ব্রুন

স্ক্রিপ্ট জন্য ধন্যবাদ। উবুন্টু 14.04 এ আমার জন্য দুর্দান্ত কাজ করে! এর মধ্যে একটি উন্নতি হ'ল ল্যাপটপ হাইবারনেটে উঠলে এটি এসি পাওয়ারে প্লাগ ইন করা হয়েছে কিনা তা পরীক্ষা করতে পারে। যদি তা হয় তবে আমি হাইবারনেটিংয়ের পরিবর্তে এটি আবার স্থগিত করতে চাই। হাইবারনেট থেকে পুনরুদ্ধার করতে আরও বেশি সময় লাগে এবং এটি প্লাগ ইন করা অবস্থায় আমার হাইবারনেট করার দরকার নেই ...
ম্যাডেন্টিমে

তোমাকে অনেক ধন্যবাদ!!!! এই স্ক্রিপ্টটি যাদু যা আমি স্বপ্ন দেখছিলাম !!
ইয়ানপাস

12

এটি কীভাবে এটি (উইন্ডোজের অনুরূপ) কাজ করে তা বোঝাতে: মেশিন স্ট্যান্ডবাই থেকে জেগে ওঠে না যখন ব্যাটারি মেশিনের অবস্থা অদলবদল পার্টিশনে সংরক্ষণ করতে সক্ষম হয়, তা তাত্ক্ষণিক অদলবদল পার্টিশনে সমস্ত কিছু সংরক্ষণ করে it স্ট্যান্ডবাইতে থাকা অবস্থায় এবং ব্যাটারি শেষ হয়ে গেলে, অদলবদল বিভাজন থেকে রাষ্ট্রটি লোড করে এটি পুনরুদ্ধার করবে (যেমন আপনি হাইবারনেটেড হওয়ার ক্ষেত্রে এটি করবে)।

আফাইক লিনাক্স "সাধারণ" স্ট্যান্ডবাইয়ের পরিবর্তে হাইব্রিড স্ট্যান্ডবাই / হাইবারনেট ব্যবহার করবে / যদি এটি জানে যে এটি আপনার হার্ডওয়ারের জন্য কাজ করে। এটি অনেকগুলি বাগ বা কোনও কিছুর কারণে বর্তমানে অক্ষম করাও সম্ভব হয় ...;)

আপনি যদি পরীক্ষণ পছন্দ করেন, তবে আপনি দেখতে পারবেন যে আপনি পিএম-সাসপেন্ড-হাইব্রিড দিয়ে কোনও ভাল ফলাফল পেতে পারেন কিনা ।

নিম্নলিখিতটি যদি আপনার ভাগ্যবান হয় তবে তত্ত্বীয়ভাবে হাইব্রিড স্থগিত আপনার সিস্টেমে সমর্থিত:

pm-is-supported --suspend-hybrid && echo "you're lucky"

1
আপনার শেল কমান্ডের একক অ্যাডাস্ট্রোফ বিভ্রান্তিকর এবং বিভ্রান্তিকর হতে পারে ... দয়া করে এটি থেকে মুক্তি দিন।
ayan4m1

1
বাহ, আপনি যখন কমান্ডলাইন হিসাবে চিন্তা না করেই অন্য পাঠ্যের ভিতরে এম্বেড করা একটি কমান্ডলাইন সম্পাদনা করেন তখন তা ঘটে ... ধন্যবাদ ও স্থির।
জানু

কোনও সমস্যা নেই, হ্যাঁ দুটি প্রক্রিয়ার জন্য পৃথক হেডস্পেসগুলি সম্পর্কে বুঝতে পেরেছি।
ayan4m1

6

আপনি s2both আগ্রহী হতে পারে । এটি uswsuspউবুন্টু ১০.১০ প্যাকেজ দ্বারা সরবরাহ করা হয়েছে । এটি ডিস্কে স্থগিত করে, তবে সিস্টেমটি বন্ধ করার পরিবর্তে এটি এস 3 এ রাখে, যা পাওয়ার মোড যা সাধারণত উবুন্টুতে "সাসপেন্ড" বিকল্পের সাথে যুক্ত। পিএম-সাসপেন্ড-হাইব্রিড হ'ল আরেকটি সরঞ্জাম যা একই কাজটি করার পরিকল্পনা করে।

Autoাকনাটি এটিকে স্বয়ংক্রিয় করতে, নীচের নির্দেশিকাটি দেখুন যা একটি idাকনা ইভেন্টটি ধরা পড়লে আপনাকে একটি স্বেচ্ছাসেবক স্ক্রিপ্ট চালানোর অনুমতি দেয়:

http://ubuntuforums.org/showthread.php?t=1076486

যদি আপনার কাছে একটি থিংকপ্যাড থাকে, তবে ম্যানপেজটি tpctlএকটি যুক্তির রেফারেন্স তৈরি করে --pm-sedation-hibernate-from-suspend-timer, যা মনে হচ্ছে যে বৈশিষ্ট্যটি আপনি সন্ধান করছেন তা সরবরাহ করে। নন-থিঙ্কপ্যাড হার্ডওয়্যারটিতে এটি চেষ্টা করার বিরুদ্ধে আপনাকে সতর্ক করব।

রেফারেন্সের জন্য, আমি হাইবারনেট.কনফের জন্য ম্যানপেজটি দেখেছি ; এটিতে কোনও প্রাসঙ্গিক বিকল্প নেই বলে মনে হয় তবে এটি দ্বিতীয় পঠনের জন্য উপযুক্ত।


5

উবুন্টু 16.04 - স্থির / ঘুম থেকে পূর্ব নির্ধারিত সময়ের পরে হাইবারনেটে

দেখে মনে হয় যে উবুন্টুতে 16.04 জিনিসগুলি কিছুটা আলাদা, সুতরাং এটির কাজটি করার জন্য আমি যে পদক্ষেপ নিয়েছিলাম তা হ'ল:

  1. নিশ্চিত করুন যে হাইবারনেট চলার সময় প্রত্যাশা অনুযায়ী কাজ করছে

    systemctl hibernate
    
  2. মূল suspend.targetফাইলটি অনুলিপি করুন:

    sudo cp /lib/systemd/system/suspend.target /etc/systemd/system/suspend.target
    

    তারপরে ফাইলটি সম্পাদনা /etc/systemd/system/suspend.targetকরুন এবং লাইনটি যুক্ত করুন:

    Requires=delayed-hibernation.service
    

    থেকে [Unit]ফাইল অধ্যায়।

  3. /etc/systemd/system/delayed-hibernation.serviceনিম্নলিখিত বিষয়বস্তু দিয়ে ফাইলটি তৈরি করুন :

[ইউনিট]
বিবরণ = বিলম্বিত হাইবারনেশন ট্রিগার
= Suspend.target আগে
দ্বন্দ্ব = হাইবারনেট.টারাজেট হাইব্রিড- সুসপেন্ড.আরগেট
StopWhenUnneeded = সত্য

[পরিষেবা]
টাইপ করুন = oneshot
RemainAfterExit = হ্যাঁ
এক্সেকস্টার্ট = / ইউএসআর / স্থানীয় / বিন / বিলম্বিত-হাইবারনেশন sh প্রাক স্থগিত
এক্সেকস্টপ = / usr / স্থানীয় / বিন / বিলম্বিত- হাইবারনেশন.শ পোস্ট স্থগিত

[ইনস্টল করুন]
WantedBy = sleep.target
  1. /etc/delayed-hibernation.confনিম্নলিখিত লিখিত সামগ্রী সহ স্ক্রিপ্টের জন্য কনফিগারেশন ফাইলটি তৈরি করুন :
# দেরি-হাইবারনেশন.শ 'স্ক্রিপ্টের জন্য কনফিগারেশন ফাইল

# কম্পিউটার হাইবারনেট হওয়ার আগে স্লিপ মোডে কাটানোর জন্য সেকেন্ডের সময় উল্লেখ করুন
TIMEOUT = 1200 # সেকেন্ডে, 20 মিনিট সময় দেয়
  1. স্ক্রিপ্টটি তৈরি করুন যা আসলে কঠোর পরিশ্রম করে।

    /usr/local/bin/delayed-hibernation.shবিষয়বস্তু দিয়ে ফাইল তৈরি করুন :

#! / বিন / ব্যাশ
# স্ক্রিপ্টের নাম: বিলম্বিত- হাইবারনেশন.শ
# উদ্দেশ্য: কিছুক্ষণ ঘুমের পরে অটো হাইবারনেট হয়
# সেকেন্ডের ঘুমের সংখ্যা নির্ধারণ করতে `ber হাইবারনেশন_কনফ` ফাইলটিতে` TIMEOUT` পরিবর্তনশীল সম্পাদনা করুন।

hibernation_lock = 'প্রথমেই / var / রান / বিলম্বিত-hibernation.lock'
hibernation_fail = 'প্রথমেই / var / চালানোর / delayed-hibernation.fail'
hibernation_conf = ', / etc / বিলম্বিত-hibernation.conf'

# কনফিগারেশন ফাইলটি পরীক্ষা করা হচ্ছে
যদি [! -f $ হাইবারনেশন_কনফ]; তারপর
    প্রতিধ্বনিত হচ্ছে "কনফিগারেশন ফাইল ('ber হাইবারনেশন_কনফ') অনুপস্থিত, প্রতিধ্বনি" "
    প্রস্থান 1
ফাই
হাইবারনেশন_টাইমআউট = $ (গ্রেপ "^ [^ #]" $ হাইবারনেশন_কনফ | গ্রেপ "TIMEOUT =" | awk -F '=' '{মুদ্রণ $ 2}' | awk -F '#' '{মুদ্রণ $ 1}' | টিআর-ডিডি '[[\ t]]')
যদি ["$ হাইবারনেশন_টাইমআউট" = ""]; তারপর
    প্রতিধ্বনিত হচ্ছে কনফিগারেশন ফাইল ('ber হাইবারনেশন_কনফ') থেকে 'TIMEOUT' পরামিতি মিস করছি ""
    প্রস্থান 1
এলিফ [[! "ber হাইবারনেশন_টাইমআউট" = ~ ^ [0-9] + $]]; তারপর
    কনফিগারেশন ফাইলে ('' হাইবারনেশন_কন্ট '), "প্রত্যাশিত' টিআইএমইউটি 'প্যারামিটার (' $ হাইবারনেশন_কন্ট ') প্রতিস্থাপন, সেকেন্ডের প্রত্যাশিত সংখ্যার প্রতিধ্বনিত করুন" "
    প্রস্থান 1
ফাই

# প্রদত্ত পরামিতি প্রসেসিং
যদি ["$ 2" = "স্থগিত"]; তারপর
    কারটাইম = $ (তারিখ +% গুলি)
    যদি ["$ 1" = "প্রাক"]; তারপর
        যদি [-f $ হাইবারনেশন_ফেইল]; তারপর
            প্রতিধ্বনি "ব্যর্থ হাইবারনেশন সনাক্ত হয়েছে, আরটিসি ওয়েকআপ টাইমার সেট করে এড়ানো হচ্ছে" "
        আর
            প্রতিধ্বনি "সাসপেন্ড সনাক্ত করা হয়েছে Rec রেকর্ডিংয়ের সময়, আরটিসি টাইমার সেট করুন"
            প্রতিধ্বনি "$ কারটাইম"> ber হাইবারনেশন_লক
            rtcwake -m no -s $ হাইবারনেশন_টাইমআউট
        ফাই
    এলিফ ["$ 1" = "পোস্ট"]; তারপর
        যদি [-f $ হাইবারনেশন_ফেইল]; তারপর
            আরএম $ হাইবারনেশন_ফেইল
        ফাই
        যদি [-f $ হাইবারনেশন_লক]; তারপর
            সুসটাইম = $ (বিড়াল $ হাইবারনেশন_লক)
            rm $ হাইবারনেশন_লক
            যদি [$ (($ কার্টটাইম - us সাসটাইম)) -ge $ হাইবারনেশন_টাইমআউট]; তারপর
                প্রতিধ্বনিত "সাসপেন্ড থেকে স্বয়ংক্রিয় পুনঃসূচনা সনাক্ত হয়েছে Hi হাইবারনেটিং ..."
                systemctl হাইবারনেট
                যদি [$? -ne 0]; তারপর
                    প্রতিধ্বনি "স্বয়ংক্রিয় হাইবারনেশন ব্যর্থ হয়েছে instead পরিবর্তে স্থগিতের চেষ্টা করা হয়েছে।"
                    স্পর্শ করুন $ হাইবারনেশন_ফেইল
                    systemctl স্থগিত
                    যদি [$? -ne 0]; তারপর
                        প্রতিধ্বনি "স্বয়ংক্রিয় হাইবারনেশন এবং সাসপেন্ড ব্যর্থতা ব্যর্থ try
                    ফাই
                ফাই
            আর
                প্রতিধ্বনি "সাসপেন্ড থেকে ম্যানুয়াল পুনঃসূচনা সনাক্ত হয়েছে R আরটিসি টাইমার সাফ করা"
                rtcwake -m অক্ষম
            ফাই
        আর
            প্রতিধ্বনি "ফাইল 'ber হাইবারনেশন_লোক' পাওয়া যায়নি, করার মতো কিছুই নেই"
        ফাই
    আর
        প্রতিধ্বনিত "অচেনা প্রথম প্যারামিটার: '$ 1', প্রত্যাশিত 'প্রাক' বা 'পোস্ট'"
    ফাই
আর
    প্রতিধ্বনি "এই স্ক্রিপ্টটি সিস্টেমট্যাক্ট বিলম্বিত-হাইবারনেশন দ্বারা চালিত করার উদ্দেশ্যে তৈরি হয়েছে serv সার্ভিস (প্রত্যাশিত দ্বিতীয় প্যারামিটার: 'স্থগিত')"
ফাই
  1. স্ক্রিপ্টটি সম্পাদনযোগ্য করুন:
chmod 755 /usr/local/bin/delayed-hibernation.sh

এই থ্রেডের অন্যান্য উত্তরের উপর ভিত্তি করে এই স্ক্রিপ্টটি লেখার আগে পর্যন্ত আমাকে অনেকটা সময় লেগেছে, https://bbs.archlinux.org/viewtopic.php?pid=1554259 এর মতো ইন্টারনেটে আমি যে জিনিসগুলি পেয়েছি

আমার স্ক্রিপ্টের সংস্করণটি অনেকগুলি সমস্যার সাথে মোকাবিলা করার চেষ্টা করে যেমন হাইবারনেট সফল না হলে এবং বার বার পূর্ব নির্ধারিত সময় পরে আবার জাগ্রত হয় না।

  1. আমি ধরে নিলাম চূড়ান্ত পদক্ষেপটি কেবল সম্পাদন করা হবে

    sudo systemctl daemon-reload
    sudo systemctl enable delayed-hibernation.service 
    

    নতুন পরিষেবা / কনফিগারেশন ব্যবহৃত হচ্ছে তা নিশ্চিত করতে।

পরিষেবা লগ চেক করতে, আপনি ব্যবহার করতে পারেন:

sudo systemctl স্থিতি বিলম্বিত - হাইবারনেশন.সার্ভিস

অথবা পরিষেবা ব্যবহারের সম্পূর্ণ লগের জন্য:

sudo Journalctl -u বিলম্বিত-হাইবারনেশন.সর্পিস

চলমান পরিষেবা থেকে প্রাপ্ত একটি সাধারণ লগ হ'ল:

মাইল @ মাইল-থিঙ্কপ্যাড: do $ সুডো সিস্টেস্টল স্থিতি বিলম্বিত-হাইবারনেশন.সর্পিস 
● বিলম্বিত হাইবারনেশন.সার্ভিস - বিলম্বিত হাইবারনেশন ট্রিগার
   লোড করা: লোড করা (/etc/systemd/system/delayed-hibernation.service; সক্ষম; বিক্রেতার প্রিসেট: সক্ষম)
   সক্রিয়: নিষ্ক্রিয় (মৃত)

জুন 09 20:35:42 মাইল-থিঙ্কপ্যাড সিস্টেমডড [1]: বিলম্বিত হাইবারনেশন ট্রিগার শুরু হচ্ছে ...
জুন 09 20:35:42 মাইল-থিঙ্কপ্যাড বিলম্বিত- হাইবারনেশন.শ [2933]: সাসপেন্ড সনাক্ত করা হয়েছে। রেকর্ডিংয়ের সময়, আরটিসি টাইমার সেট করুন
জুন 09 20:35:42 মাইল-থিঙ্কপ্যাড বিলম্বিত হয়েছে- হাইবারনেশন.শ [২৯৩৩]: আরটিওয়াক: ধরে নিচ্ছি আরটিসি ইউটিসি ব্যবহার করে ...
জুন 09 20:35:42 মাইল-থিঙ্কপ্যাড বিলম্বিত হয়েছে- হাইবারনেশন.শ [২৯৩৩]: আরটিউইক: ওয়েকআপ / ডিভ / আরটিসি 0 থুতে জুন 9 18:55:43 2016
জুন 09 20:55:44 মাইল-থিঙ্কপ্যাড সিস্টেমড [1]: বিলম্বিত হাইবারনেশন ট্রিগার শুরু হয়েছে।
জুন 09 20:55:44 মাইল-থিঙ্কপ্যাড সিস্টেমড [1]: বিলম্বিত-হাইবারনেশন.সার্ভিস: ইউনিটের আর দরকার নেই। বন্ধ করা হচ্ছে।
জুন 09 20:55:44 মাইল-থিঙ্কপ্যাড সিস্টেমড [1]: বিলম্বিত হাইবারনেশন ট্রিগার বন্ধ করছে ...
জুন 09 20:55:44 মাইল-থিঙ্কপ্যাড বিলম্বিত হয়েছে- হাইবারনেশন.শ [3093]: সাসপেন্ড থেকে স্বয়ংক্রিয় পুনরায় শুরু হয়েছে detected ঘুমন্ত অবস্থায় ...
জুন 09 20:55:44 মাইল-থিঙ্কপ্যাড সিস্টেমড [1]: বিলম্বিত হাইবারনেশন ট্রিগার বন্ধ করে দিয়েছে।
মাইল @ মাইল ThinkPad: ~ $ 

সুতরাং এটি হ'ল, আমি আশা করি যে এটি কারওর পক্ষে সত্যিই সহায়তা করে যেহেতু আমি এই সহজ বৈশিষ্ট্যটির কাজটি করার জন্য কনফিগারেশন এবং স্ক্রিপ্ট সংস্করণগুলির সঠিক সংমিশ্রণটি বের করার চেষ্টা করতে দিন ব্যয় করেছি।


উত্তরের জন্য ধন্যবাদ, এটি এখনও উবুন্টু 18.04-তে আকর্ষণীয় কাজ করে। আমি কাজের উপরের উত্তরগুলি পেতে পারি না /bin/systemctl hibernate, কমান্ড লাইনে সূক্ষ্মভাবে কাজ করা সত্ত্বেও সিস্টেমড স্ক্রিপ্টে চলাকালীন কার্যকর করা সর্বদা 1 টি ফিরে আসত।
ইউজনহু

4

ঠিক সেই সময়ে যদি কিছু ভুল হয়ে যায় তবে pm-hibernateআমি কম্পিউটারটি চালিয়ে যাওয়ার চেয়ে সাসপেন্ড করে রাখি। সুতরাং আপনি ব্যবহার করতে পারেন:

   ...
/usr/sbin/pm-hibernate || /usr/sbin/pm-suspend
   ...

3

এখানে ডেরিক প্রেসনালের উত্তরের একটি আপডেট হওয়া সংস্করণ যা সিস্টেমেডের সাথে কাজ করে এবং এলিয়াহ কাগনের পরামর্শটি অন্তর্ভুক্ত করে , এটি কেবল /usr/lib/systemd/system-sleep/delayed_hibernation.sh এ ফেলে দিন এবং এটি সম্পাদনযোগ্য করে তুলুন:

#!/bin/bash

hibernation_timeout=1800  #30 minutes

if [ "$2" = "suspend" ]; then
    curtime=$(date +%s)
    if [ "$1" = "pre" ]; then
        echo -e "[($curtime) $@]\nExecuting pre-suspend hook..." >> /tmp/delayed_hibernation.log
        echo "$curtime" > /var/run/delayed_hibernation.lock
        rtcwake -m no -s $hibernation_timeout
    elif [ "$1" = "post" ]; then
        echo -e "[($curtime) $@]\nExecuting post-suspend hook..." >> /tmp/delayed_hibernation.log
        sustime=$(cat /var/run/delayed_hibernation.lock)
        if [ $(($curtime - $sustime)) -ge $hibernation_timeout ]; then
            echo -e "Automatic resume detected, hibernating.\n" >> /tmp/delayed_hibernation.log
            systemctl hibernate || systemctl suspend
        else
            echo -e "Manual resume detected, clearing RTC alarm.\n" >> /tmp/delayed_hibernation.log
            rtcwake -m no -s 1
        fi
        rm /var/run/delayed_hibernation.lock
    fi
fi

এটি 15.10-এ বেশ কয়েক মাস ধরে দুর্দান্ত কাজ করছে তবে স্ক্রিপ্টটি এখনও চলমান সত্ত্বেও 16.04 এর কিছু কিছু এটিকে হাইবারনেট থেকে বাধা দেয়।
শান

@ শীন আপনি কি এই থ্রেডটিতে কাজটি করতে চেষ্টা করেছেন ?
নিকোলো ম্যাগজিওনি

আমাকে সঠিক দিকে নির্দেশ করার জন্য ধন্যবাদ। আমি একটি সিস্টেমেড সার্ভিস তৈরি করেছি (/etc/systemd/system/delayed-hibernation.service) যা উপরের স্ক্রিপ্টটি রেফার করে তারপর /etc / সিস্টেমেড / সিস্টেমে / সসপেন্ড.টারজেটটি বিলম্বিত-হাইবারনেশন.সার্ভের প্রয়োজন হয়।
শান

2

এখানে আমার রেসিপিটি রয়েছে (এটি দুটি নোটবই উবুন্টু 16.04 তে পরীক্ষা করা হয়েছে):

আপনার পছন্দ মতো এই স্ক্রিপ্টটি রাখুন (আমি এটি রুটটিতে রেখেছি /syspend.sh) এবং এটি সম্পাদনযোগ্য করে তুলুন ( chmod +x /suspend.sh)

TIMELOG=/tmp/autohibernate.log
ALARM=$(tail -n 1 $TIMELOG)
SLEEPTIME=5000 #edit this line to change timer, e.g. 2 hours "$((2*60*60))"
if [[ $1 == "resume" ]]
then
    if [[ $(date +%s) -ge $(( $ALARM + $SLEEPTIME )) ]]
    then
        echo "hibernate triggered $(date +%H:%M:%S)">>$TIMELOG
        systemctl hibernate 2>> $TIMELOG
    else
        echo "normal wakeup $(date +%H:%M:%S)">>$TIMELOG
    fi
elif [[ $1 == "suspend" ]]
then
    echo "$(date +%s)" >> $TIMELOG
    rtcwake -m no -s $SLEEPTIME
fi

তারপরে সিস্টেমেড টার্গেট তৈরি করুন: # touch /etc/systemd/system/suspend-to-sleep.target এই সামগ্রীটি আটকান:

#/etc/systemd/system/suspend-to-hibernate.service
[Unit]
Description=Delayed hibernation trigger
Before=suspend.target
Conflicts=hibernate.target hybrid-suspend.target
StopWhenUnneeded=true

[Service]
Type=oneshot
RemainAfterExit=yes
ExecStart=/bin/bash /suspend.sh suspend
ExecStop=/bin/bash /suspend.sh wakeup

[Install]
WantedBy=sleep.target
RequiredBy=suspend.target

তারপরে এটি সক্ষম করুন # systemctl enable suspend-to-sleep.target

আমি নোটবুকগুলির একটিতে একটি সমস্যার মুখোমুখি হয়েছি: সমাপনী idাকনাটি এই লক্ষ্যটিকে ট্রিগার করে না। এটি xfce4- পাওয়ার-ম্যানেজারের কারণে হয়েছিল। এই সমস্যাটি সমাধান করার জন্য দুটি উপায় রয়েছে। প্রথম এক সম্পাদনা করা /etc/systemd/logind.confফাইল এবং প্রতিস্থাপন HandleLidSwitch=ignoreসঙ্গে HandleLidSwitch=suspend। তবে এটি সিস্টেমভিত্তিক হবে, তাই আমি আমার স্ক্রিপ্টে সিমলিংকটি যুক্ত করেছি# ln -s /suspend.sh /etc/pm/sleep.d/0000rtchibernate


1

আপনি ব্যবহার করতে পারেন এমন আরও একটি সাধারণ কাজ hybrid-sleep(যেমন ম্যাক ওএস করেন)। যদি আপনার কম্পিউটার হাইবারনেশনকে সমর্থন করে তবে আপনি এই বৈশিষ্ট্যটি ব্যবহার করতে পারেন:

systemctl hybrid-sleep

এই কমান্ডটি কম্পিউটারটিকে স্থগিত করে ডিস্কে (হাইবারনেট) প্রেরণ করা উচিত। কিছু সময়ের পরে কম্পিউটারটি বন্ধ হয়ে যাবে (চালু করার সময়, এটি জাগতে হাইবারনেশন ফাইলগুলি ব্যবহার করবে)।

পিএস: আমি জানি ওপি ঠিক কী পোস্ট করেছে তা নয়, তবে এটি মোটামুটি কাছে


0

সেই ফাইলটি chmod + x করতে ভুলবেন না, এটি সম্পাদনযোগ্য করে তুলুন।

আরসিওয়াক ছাড়া আর একটি সমাধান রয়েছে, / সাইস / ক্লাস / আরটিসি / আরটিসি 0 তে জাগ্রত্ম ব্যবহার করে। # কার্নেল সরাসরি সমর্থন না করে ... মন্তব্যগুলির পরে পিএম-ফাংশনগুলিতে (/ usr / lib / pm-utils) অপ্রচলিত কোডটি ব্যবহার করুন ... ('বর্তমান কার্নেল (3..6 কিছু পরে) সরাসরি সমর্থন করে)'। সেই কোডটি প্রত্যাবর্তন করুন এবং do_suspend_hybrid () এর পরিবর্তে do_spend () অংশে রাখুন।

অপ্রচলিত কোড (যখন সাসপেন্ড_হাইব্রিড বলা হয় তখন সাসপেন্ড করুন হাইবারনেট):

# since the kernel does not directly support hybrid sleep, we do
# something else -- suspend and schedule an alarm to go into
# hibernate if we have slept long enough.
# Only do this if we do not need to do any special video hackery on resume
# from hibernate, though.
if [ -z "$SUSPEND_HYBRID_MODULE" -a -w "$PM_RTC/wakealarm" ] && \
    check_suspend && check_hibernate && ! is_set $HIBERNATE_RESUME_POST_VIDEO; \
    then
    SUSPEND_HYBRID_MODULE="kernel"
    do_suspend_hybrid() {
    WAKETIME=$(( $(cat "$PM_RTC/since_epoch") + PM_HIBERNATE_DELAY))
    echo >"$PM_RTC/wakealarm"
    echo $WAKETIME > "$PM_RTC/wakealarm"
    if do_suspend; then
        NOW=$(cat "$PM_RTC/since_epoch")
        if [ "$NOW" -ge "$WAKETIME" -a "$NOW" -lt $((WAKETIME + 30)) ]; then
        log "Woken by RTC alarm, hibernating."
        # if hibernate fails for any reason, go back to suspend.
        do_hibernate || do_suspend
        else
        echo > "$PM_RTC/wakealarm"
        fi
    else
        # if we cannot suspend, just try to hibernate.
        do_hibernate
    fi
    }
fi

প্রস্তাবিত। এমনকি ইউএসউসপ ব্যবহার করা আরও সহজ যখন স্থগিতকরণের সময় একই সময়ে s2both অর্থাৎ s2both এর সুবিধা সর্বাধিক করে তোলে। উল্টানো কোডটি ইউএসউএসপ মডিউলের (/usr/lib/pm-utils/module.d) অংশে do_suspend () অংশে রাখুন।

উল্টানো কোড (সাসপেন্ড বলা হলে সাসপেন্ড_হাইব্রিড):

WAKETIME=$(( $(cat "$PM_RTC/since_epoch") + PM_HIBERNATE_DELAY))
echo >"$PM_RTC/wakealarm"
echo $WAKETIME > "$PM_RTC/wakealarm"
if do_suspend_hybrid; then
    NOW=$(cat "$PM_RTC/since_epoch")
    if [ "$NOW" -ge "$WAKETIME" -a "$NOW" -lt $((WAKETIME + 30)) ];             then
    log "Woken by RTC alarm, hibernating."
    # if hibernate fails for any reason, go back to suspend_hybrid.
    do_hibernate || do_suspend_hybrid
    else
    echo > "$PM_RTC/wakealarm"
    fi
else
    # when do_suspend is being called, convert to suspend_hybrid.
    do_suspend_hybrid
fi      

ইউএসউসপ্সের সাহায্যে আমরা স্থগিত / হাইবারনেট এবং পাঠ্যে প্রদর্শিত বিপরীত প্রক্রিয়াটির অগ্রগতি দেখতে পাই, এমনকি আমরা ব্যাকস্পেস টিপে এটি বাতিল করতে পারি। ইউএসউসপ ব্যতীত, স্থগিত / হাইবারনেট কেবল বিরক্তিকরভাবে উপস্থিত হয়ে যায় - বিশেষত যখন জাগ্রালার্ম ট্রিগার করা হয় এবং হাইবারনেট কার্যকর করা হয় (ইউএসএসপিতে s2disk)। পিএম-ফাংশন ফাইলে সাধারণ স্থানে হাইবারনেটের আগে ঘুমের সময় নির্ধারণ করুন।

# variables to handle hibernate after suspend support
PM_HIBERNATE_DELAY=900  # 15 minutes
PM_RTC=/sys/class/rtc/rtc0

এখানে ইউএসউসপ মোড রয়েছে: (মনে রাখবেন, এই মডিউলটি বিকাল-ফাংশন থেকে কল করা হয় যাতে variোকানো ভেরিয়েবলগুলি একই থাকে)

#!/bin/sh

# disable processing of 90chvt and 99video.
# s2ram and s2disk handle all this stuff internally.
uswsusp_hooks()
{
    disablehook 99video "disabled by uswsusp"
}

# Since we disabled 99video, we need to take responsibility for proper
# quirk handling.  s2ram handles all common video quirks internally,
# so all we have to do is translate the HAL standard options to s2ram options.
uswsusp_get_quirks()
{
    OPTS=""
    ACPI_SLEEP=0
    for opt in $PM_CMDLINE; do
        case "${opt##--quirk-}" in # just quirks, please
            dpms-on)       ;; # no-op
            dpms-suspend)      ;; # no-op
            radeon-off)        OPTS="$OPTS --radeontool" ;;
            reset-brightness)  ;; # no-op
            s3-bios)       ACPI_SLEEP=$(($ACPI_SLEEP + 1)) ;;
            s3-mode)       ACPI_SLEEP=$(($ACPI_SLEEP + 2)) ;;
            vbe-post)      OPTS="$OPTS --vbe_post" ;;
            vbemode-restore)   OPTS="$OPTS --vbe_mode" ;;
            vbestate-restore)  OPTS="$OPTS --vbe_save" ;;
            vga-mode-3)        ;; # no-op
            save-pci)          OPTS="$OPTS --pci_save" ;;
            none)          QUIRK_NONE="true" ;;
            *) continue ;;
        esac
    done
    [ $ACPI_SLEEP -ne 0 ] && OPTS="$OPTS --acpi_sleep $ACPI_SLEEP"
    # if we were told to ignore quirks, do so.
    # This is arguably not the best way to do things, but...
    [ "$QUIRK_NONE" = "true" ] && OPTS=""
}

# Since we disabled 99video, we also need to handle displaying
# help info for the quirks we handle.
uswsusp_help()
{
    echo  # first echo makes it look nicer.
    echo "s2ram video quirk handler options:"
    echo
    echo "  --quirk-radeon-off"
    echo "  --quirk-s3-bios"
    echo "  --quirk-s3-mode"
    echo "  --quirk-vbe-post"
    echo "  --quirk-vbemode-restore"
    echo "  --quirk-vbestate-restore"
    echo "  --quirk-save-pci"
    echo "  --quirk-none"
}

# This idiom is used for all sleep methods.  Only declare the actual
# do_ method if:
# 1: some other sleep module has not already done so, and
# 2: this sleep method can actually work on this system.
#
# For suspend, if SUSPEND_MODULE is set then something else has already
# implemented do_suspend.  We could just check to see of do_suspend was
# already declared using command_exists, but using a dedicated environment
# variable makes it easier to debug when we have to know what sleep module
# ended up claiming ownership of a given sleep method.
if [ -z "$SUSPEND_MODULE" ] && command_exists s2ram && \
    ( grep -q mem /sys/power/state || \
        ( [ -c /dev/pmu ] && check_suspend_pmu; ); ); then
    SUSPEND_MODULE="uswsusp"
    do_suspend()
    {
        WAKETIME=$(( $(cat "$PM_RTC/since_epoch") + PM_HIBERNATE_DELAY))
        echo >"$PM_RTC/wakealarm"
        echo $WAKETIME > "$PM_RTC/wakealarm"
        if do_suspend_hybrid; then
            NOW=$(cat "$PM_RTC/since_epoch")
            if [ "$NOW" -ge "$WAKETIME" -a "$NOW" -lt $((WAKETIME + 30)) ];             then
            log "Woken by RTC alarm, hibernating."
            # if hibernate fails for any reason, go back to suspend_hybrid.
            do_hibernate || do_suspend_hybrid
            else
            echo > "$PM_RTC/wakealarm"
            fi
        else
            # when do_suspend is being called, convert to suspend_hybrid.
            do_suspend_hybrid
        fi      
    }
fi

if [ -z "$HIBERNATE_MODULE" ] && \
    [ -f /sys/power/disk ] && \
    grep -q disk /sys/power/state && \
    [ -c /dev/snapshot ] &&
    command_exists s2disk; then
    HIBERNATE_MODULE="uswsusp"
    do_hibernate()
    {
        s2disk
    }
fi

if [ -z "$SUSPEND_HYBRID_MODULE" ] && 
    grep -q mem /sys/power/state && \
    command_exists s2both && \
    check_hibernate; then
    SUSPEND_HYBRID_MODULE="uswsusp"
    do_suspend_hybrid()
    {   
        uswsusp_get_quirks
        s2both --force $OPTS 
    }
    if [ "$METHOD" = "suspend_hybrid" ]; then
        add_before_hooks uswsusp_hooks
        add_module_help uswsusp_help
    fi
fi  
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.