আমি কীভাবে পিএম-সাসপেন্ড-এর পরিবর্তে ডিফল্টরূপে পিএম-সাসপেন্ড-হাইব্রিড ব্যবহার করব?


41

Idাকনাটি বন্ধ করার সময় বা মেনু থেকে "সাসপেন্ড" নির্বাচন করার সময় আমি স্থগিতের পরিবর্তে হাইব্রিড সাসপেন্ড পদ্ধতিটি ব্যবহার করতে চাই।

আমি স্বয়ংক্রিয়ভাবে এটি করার জন্য বিকাল-সাসপেন্ডের স্ক্রিপ্টটি পরিবর্তন করতে পারি বলে ধারণা করতে পারি তবে আরও রক্ষণাবেক্ষণযোগ্য / সহজ উপায় হতে পারে।

উত্তর:


44

পরোক্ষ সংকর ঘুম

এটি পুরানো পদ্ধতি: প্রথমে স্থগিত করুন এবং তারপরে একটি বিলম্বের পরে হাইব্রনেটে উঠুন (ডিফল্টরূপে 15 মিনিট)। এটি 3.6 এর আগে একটি লিনাক্স কার্নেল দিয়ে ব্যবহার করুন বা আপনি যদি এটি পছন্দ করেন তবে 15 মিনিটের পরে এটি কোনও শক্তি ব্যবহার করে না।

ফাইল যুক্ত করুন /etc/pm/config.d/00-use-suspend-hybrid:

# Always use suspend_hybrid instead of suspend
if [ "$METHOD" = "suspend" ]; then
  METHOD=suspend_hybrid
fi
# The delay after which hibernation gets triggered (default: 900 seconds, 15 minutes):
PM_HIBERNATE_DELAY=900

আপনার কম্পিউটারে নিম্নলিখিত কোডের মাধ্যমে হাইব্রিড পদ্ধতিটি সমর্থিত কিনা তা আপনি নিশ্চিত করতে চাইতে পারেন। যদি এটি "0" বলে তবে এটি কাজ করা উচিত:

sudo pm-is-supported --suspend-hybrid && echo $?

লিনাক্স 3.6+ এর সাথে স্থগিত করা রিয়েল হাইব্রিড

আপনার যদি লিনাক্স ৩.6 কার্নেল থাকে তবে আপনি নিম্নলিখিতটি ব্যবহার করতে পারেন যা ডিস্ক এবং র‌্যাম উভয়কেই শুরু থেকে স্থগিত করবে।

ফাইল যুক্ত করুন /etc/pm/config.d/00-use-suspend-hybrid:

# WORKAROUND: always set the default hibernate mode first (normal mode)
# (not required if you have the patch mentioned by Rohan below (http://askubuntu.com/a/344879/169))
HIBERNATE_MODE=platform

# Always use hibernate instead of suspend, but with "suspend to both"
if [ "$METHOD" = "suspend" ]; then
  METHOD=hibernate
  HIBERNATE_MODE=suspend
fi

# Make sure to use the kernel's method, in case uswsusp is installed etc.
SLEEP_MODULE=kernel

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

ত্রুটিটি হ'ল প্রক্রিয়াটি বেশি সময় নেয় (কারণ এটি সর্বদা ডিস্কে হাইবারনেট থাকে) এবং আপনার ব্যাটারি দীর্ঘমেয়াদে চলতে পারে (যেমন 12 ঘন্টা পরে)।


2
একটি ছোট নোট, 'sudo pm-is- সমর্থিত - সাসপেন্ড-হাইব্রিড && ইকো $?' এর পরিবর্তে, sudo pm-is-समर्थित --সপেন্ড-হাইব্রিড ব্যবহার করুন; প্রতিধ্বনি $? ' যেহেতু পিএম-এর-রিটার্ন মানটি 0 এর জন্য সমর্থিত হয়, এবং 1 এর জন্য হয় না।
জেমস ক্যাকিস

1
@ জেমস্যাকেসেস: শেলসক্রিপ্ট বিশ্বে 0 এর অর্থ "সত্য" এবং অন্য যে কোনও কিছু অর্থ "মিথ্যা"। আপনার স্ক্রিপ্টলেটটি কাজ করবে, তবে মূল পোস্টারের স্ক্রিপ্টলেটটি যেমন ইচ্ছা তেমন কাজ করবে, সমর্থিত এবং 'অসমর্থিত' তে '0' মুদ্রণ করবে। আপনি যদি এমন কোনও কিছু চান যা সর্বদা সমর্থিত বা অসমর্থিত বলবে, 'sudo pm-is-समर्थित - supend-hybrid && প্রতিধ্বনি "সমর্থিত" চেষ্টা করুন || প্রতিধ্বনি "অসমর্থিত" "
zanfur

@ আজানফুর - যদিও উভয় রাজ্যের মুদ্রণের জন্য আপনার পরবর্তী সরবরাহিত সমাধানটি আমি পছন্দ করি (এবং অপ্রত্যাশিত কারণে অপ্রত্যাশিত কারণের জন্য কিছুই প্রত্যাশিতভাবে কার্যকর হয় না, যা ত্রুটি রাজ্যে অজানা কাজ করবে ), আমি জেমস ক্যাসেসের উল্লেখটির প্রশংসা করি উল্লিখিত কারণে যে সতর্কীকরণ ।
ব্যবহারকারী 66001

আপনি যদি 16.04 ব্যবহার করছেন তবে নীচে এই উত্তরটি দেখুন।
কাপাদ

আমার জন্য একমাত্র অনুপস্থিত অংশটি ছিল resumeতর্ক মধ্যে /etc/default/grub.conf। এনভিডিয়া ব্যবহারকারী হিসাবেও আমাকে সেট করতে হয়েছিল nomodeset। আমার ক্ষেত্রে কীড়া এন্ট্রি ফলে সুতরাং হল: GRUB_CMDLINE_LINUX_DEFAULT="nomodeset resume=UUID=uuidofswappartition"। ভুলবেন না grub-update। এবং কিছু মডিউলগুলি /etc/pm/config.d/00-unload_modulesলাইন দিয়ে এমনভাবে তৈরি ফাইলটি আনলোড করতে হবে SUSPEND_MODULES="ath5k r8169"এবং এটি নিশ্চিত করতে আমি 00-ব্যবহার-সাসপেন্ড-হাইব্রিডের 10-use-suspend-hybrid
নামকরণও করেছি

31

উবুন্টু 18.04 একটি সময়সীমা বিকল্প

ইন উবুন্টু 18.04 একটি নতুন সুবিধানুযায়ী বিকল্প আছে। ইন systemdavailiable একটি নতুন মোড suspend-then-hibernate। এটি স্লিপ মোড দিয়ে শুরু হবে এবং তারপরে একটি নির্দিষ্ট সময়ের পরে হাইবারনেট মোডে স্থানান্তরিত হবে।

ইন hybrid-sleepমোড, হাইবারনেট অংশ কার্যকর পায় ব্যাটারি সমালোচকদের কম এবং সিস্টেম স্থবির নিচে শুধুমাত্র যখন।

এই ফাংশনটি ব্যবহার শুরু করতে আপনাকে /etc/systemd/sleep.confপরবর্তী সামগ্রী সহ একটি ফাইল তৈরি করতে হবে :

[Sleep]
HibernateDelaySec=3600

এটি ঘুমের 1 ঘন্টা ঘুমের পরে হাইবারনেটে যাবে। আপনি HibernateDelaySecবিলম্ব হাইবারনেটে পরিবর্তন করতে সম্পাদনা করতে পারেন ।

প্রথমে স্থগিত-পরে-হাইবারনেট সিস্টেমড ব্যবহার করে কাজ করে কিনা তা পরীক্ষা করুন

টার্মিনালটি খুলুন Ctrl+ Alt+ Tটিপুন এবং প্রবেশ করুন:

sudo systemctl suspend-then-hibernate

যদি এটি কাজ করে তবে এটিকে স্থায়ী করুন।

  • Iাকনাটি বন্ধ করার সময় নিম্নলিখিতটি কাজ করে ।

/etc/systemd/logind.confআপনার পছন্দসই সম্পাদক ব্যবহার করে ফাইলটি খুলুন । করে আপনার প্রশাসনিক ক্ষমতা ডাকা করতে হবে sudo, gksudoবা pkexecএই ফাইলটি সম্পাদনা করতে।

দুটি লাইন সন্ধান করুন:

#HandleSuspendKey=suspend
#HandleLidSwitch=suspend

দ্রষ্টব্য, এই লাইনগুলি #সামনে তাদের সাথে মন্তব্য করা হয় । suspendডিফল্ট কর্ম। সরান #এবং পরিবর্তন suspendকরার জন্য suspend-then-hibernateএই দুটি লাইনে যাতে তারা ভালো চেহারা:

HandleSuspendKey=suspend-then-hibernate
HandleLidSwitch=suspend-then-hibernate

ফাইলটি সংরক্ষণ করুন। logindকমান্ড দ্বারা লগ আউট এবং লগ ইন বা সার্ভিস পুনরায় চালু করুন :

systemctl restart systemd-logind.service

সতর্ক বার্তা! আপনার ব্যবহারকারীর সেশনটি আবার শুরু হবে

উত্স: idাকনা বন্ধ সাসপেন্ড তারপর হাইবারনেট

উবুন্টু 16.04 এবং উপরের

সমাধান দ্বারা blueyed রিয়াল সংকর লিনাক্স 3.6+ সঙ্গে স্থগিত জন্য আমার জন্য কাজ করে নি। আমি সন্দেহ করি কারণ এটি উবুন্টু 16.04 systemdফাইলটি ব্যবহার করে না এবং ব্যবহার করে না /etc/pm/config.d/00-use-suspend-hybrid

প্রথমে হাইবারনেট এবং হাইব্রিড-ঘুম সিস্টেমড ব্যবহার করে কাজ করে কিনা তা পরীক্ষা করুন

টার্মিনালটি খুলুন Ctrl+ Alt+ Tটিপুন এবং প্রবেশ করুন:

sudo systemctl hibernate

এটি আপনার কম্পিউটারকে হাইবারনেট করা উচিত। হাইব্রিড-ঘুম চেষ্টা করার জন্য, প্রবেশ করুন:

sudo systemctl hybrid-sleep

যদি এটি কাজ করে তবে এটিকে স্থায়ী করুন।

  • Iাকনাটি বন্ধ করার সময় নিম্নলিখিতটি কাজ করে ।

/etc/systemd/logind.confআপনার পছন্দসই সম্পাদক ব্যবহার করে ফাইলটি খুলুন । করে আপনার প্রশাসনিক ক্ষমতা ডাকা করতে হবে sudo, gksudoবা pkexecএই ফাইলটি সম্পাদনা করতে।

দুটি লাইন সন্ধান করুন:

#HandleSuspendKey=suspend
#HandleLidSwitch=suspend

দ্রষ্টব্য, এই লাইনগুলি #সামনে তাদের সাথে মন্তব্য করা হয় । suspendডিফল্ট কর্ম। সরান #এবং পরিবর্তন suspendকরার জন্য hybrid-sleepএই দুটি লাইনে যাতে তারা ভালো চেহারা:

HandleSuspendKey=hybrid-sleep
HandleLidSwitch=hybrid-sleep

ফাইলটি সংরক্ষণ করুন। লগ আউট এবং আবার লগ ইন করুন।

বিঃদ্রঃ:

  • suspendবা অন্য কোন hybrid-sleepতৃতীয় বিকল্প আছে hibernate,।
  • আমার ল্যাপটপে শারীরিক ঘুমের বোতাম নেই। সুতরাং আমি এটি পরীক্ষা করতে পারিনি।
  • Suspendকগ মেনু থেকে ক্লিক করে কম্পিউটারকে হাইব্রিড-স্লিপ না করে স্বাভাবিক স্থগিত করে দেয়।

উত্স: https://superuser.com

আশা করি এটা কাজে লাগবে


2
এই উত্তরের আরও বেশি অগ্রগতি প্রয়োজন। 16.04 এ আমার জন্য স্থির সমস্যাগুলি। ধন্যবাদ।
কাপাদ

আপনি স্বাগত জানাই। এখন যেহেতু আমি ১৪.০৪ থেকে ১.0.০৪ এ চলে এসেছি, আমি ধীরে ধীরে সময়ের সাথে কাজ করার নতুন পদ্ধতিযুক্ত পদ্ধতিটি খুঁজে পাচ্ছি।
ব্যবহারকারী 68186

1
এছাড়াও উবুন্টু জিনোমে 16.04.1
হারলেমস্পাইরেল

4

12.04-এ আমি লক্ষ্য করেছি যে হাইবারনেশনটি যখন ট্রিগার করা হয় (ব্যবহার করা হয় PM_HIBERNATE_DELAY=XX) তখন শেল স্ক্রিপ্টগুলি পুনরায় শুরু / গলানো গ্রাব রেকর্ডফেল ভেরিয়েবলটি সেট করে না। অতএব গ্রাব স্বয়ংক্রিয়ভাবে বুটে না।

সময়সীমা -1 এ সেট করা হয়েছে এবং এটি ব্যবহারকারীর নির্বাচনের জন্য অপেক্ষা করছে। আমি অনুমান করছি এর জন্য কিছু স্ক্রিপ্ট সম্পাদনা প্রয়োজন /etc/pm/sleep.d/10_grub-common। একজন শিক্ষানবিস তাই দুর্ভাগ্যক্রমে সঠিক পরিবর্তনটি বের করতে আমি ছটফট করিনি।


1
সম্ভবত একটি বাগ রিপোর্ট এবং / অথবা এটি 12.10+ এ কাজ করে তবে পরীক্ষার জন্য উপযুক্ত।
নীল রঙের

আমি একই সমস্যাটি 12.10
দেখি

3

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

আসল সংকর স্থগিতটি কীভাবে সক্ষম করবেন তা এখানে রয়েছে :

  • শীর্ষ উত্তরের প্রথম অংশটি অনুসরণ করুন। এটি "সাসপেন্ড" কলটিকে "-হাইব্রিড_সপাসেন্ড" করতে বিকাল-ইউস-এ ওভাররাইড করে।
    % বিড়াল /etc/pm/config.d/00-use-spend- হাইব্রিড
    # স্থগিতের পরিবর্তে সর্বদা সাসপেন্ড_হাইব্রিড ব্যবহার করুন
    যদি ["$ METHOD" = "স্থগিত"]; তারপর
        Method = suspend_hybrid
    ফাই
  • / Usr / lib / pm-utils / pm- ফাংশনগুলির ব্যাকআপ নিন
  • প্যাচটি এখান থেকে পান: https://bugs.freedesktop.org/attachment.cgi?id=68712
    • এই প্যাচটি উপলব্ধ থাকলে সংকর স্থগিত সক্ষম করে (যেমন কার্নেলগুলিতে 3..+++)
  • হয় এটি 'প্যাচ -p0' ব্যবহার করে প্রয়োগ করুন বা ব্যর্থ হলে ম্যানুয়ালি এটি মার্জ করুন

এই পদ্ধতিটি আমার সনি ভাইও এসভিএসে আমার জন্য কাজ করে।

পিএস: ভবিষ্যতে ফাইলটি মুছে ফেলার ক্ষেত্রে প্যাচটি এখানে পুনরায় উত্পাদন করছে:

diff --git a / pm / pm-function.in বি / পিএম / পিএম-function.in
--- a / pm / pm-funifications.in
+++ বি / পিএম / পিএম- ফাংশন.ইন
@@ -316,8 +316,28 @@ যদি [-z "$ HIBERNATE_MODULE"] && \
    {
        [-n "$ I HIBERNATE_MODE}"] && \
        grep -qw "w I HIBERNATE_MODE}" / sys / শক্তি / ডিস্ক এবং& \
+ HIBERNATE_MODE_SAVE = $ (বিড়াল / sys / শক্তি / ডিস্ক) && \
+ HIBERNATE_MODE_SAVE = "$ I HIBERNATE_MODE_SAVE ## * [}" && \
+ HIBERNATE_MODE_SAVE = "$ I HIBERNATE_MODE_SAVE %%] *}" && \
        প্রতিধ্বনি -n "$ {HIBERNATE_MODE}"> / sys / শক্তি / ডিস্ক
        প্রতিধ্বনি -n "ডিস্ক"> / সায়স / পাওয়ার / স্টেট
+ আরইটি = $?
+ প্রতিধ্বনি -n "I HIBERNATE_MODE_SAVE"> / সিএস / পাওয়ার / ডিস্ক
"রিটার্ন" return
+
+ + ফাই
+ +
কার্নেলগুলির জন্য + # যা উভয়কেই স্থগিতকরণ সমর্থন করে (যেমন সংকর স্থগিত)
কার্নেল ৩.6 থেকে + #
+ যদি [-z "$ SUSPEND_HYBRID_MODULE"] && \
+ [-f / sys / শক্তি / ডিস্ক] && \
+ গ্রেপ-কিউ ডিস্ক / সিস / পাওয়ার / স্টেট এবং& \
+ গ্রেপ-কিউ স্থগিত / সিএস / পাওয়ার / ডিস্ক; তারপর
+ এসইউএসপি END_HYBRID_MODULE = "কার্নেল"
+ do_suspend_hybrid ()
+
+ HIBERNATE_MODE = "স্থগিত"
+ do_hibernate
    }
 ফাই

সূত্র:


1
হাইব্রিড-সাসপেন্ড সম্পর্কে আপনি ঠিক বলেছেন। আমি সম্প্রতি আমার স্নিপেটটি নিজেই পরিবর্তন করেছি। আপনি METHOD = হাইবারনেট এবং HIBERNATE_MODE = স্থগিত ব্যবহার করে একই ফলাফল পেতে পারেন (বেশ)। আমি পূর্ববর্তী সংস্করণটি (প্যাচ কী করে) সংরক্ষণ এবং পুনরুদ্ধারের পরিবর্তে ফাইলের শীর্ষে HIBERNATE_MODE = প্ল্যাটফর্ম সেট করছি। আমি আমার উত্তর উপরে আপডেট করব।
1313

এটিকে দুর্দান্ত দেখাচ্ছে, সম্পাদনা করার জন্য ধন্যবাদ, ব্লুয়েড
রোহান

1

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

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

# 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  

0

উবুন্টু 16.04 এর জন্য ব্যবহারকারীর 6818186 এর উত্তর আমার পক্ষে কাজ করে নি। তবে, সমাধান এখানে

প্রথমে হাইবারনেশনের কাজ নিশ্চিত করুন। তারপর

উবুন্টু সফ্টওয়্যারটিতে dconf সম্পাদক অনুসন্ধান করুন এবং ইনস্টল করুন। তারপরে এটি চালু করুন এবং org -> জিনোম -> সেটিংস ডেমন -> প্লাগইনস -> পাওয়ারে নেভিগেট করুন।

"Idাকনা-বন্ধ-এসি-অ্যাকশন" এবং "lাকনা-ক্লোজ-ব্যাটারি-অ্যাকশন" এর মানটি পরিবর্তন করুন।

আমার পাওয়ার সেটিংসে, এই বিকল্পগুলি ফাঁকা হিসাবে দেখায়, তবে তারা যেমন ইচ্ছা তেমন কাজ করে।


0

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

[Sleep]
HibernateDelaySec=3600

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

sudo systemctl suspend-then-hibernate

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

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

systemctl restart systemd-logind.service

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

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.