जवाबों:
सबसे पहले, grep -E '(menuentry |submenu )' /boot/grub/grub.cfgअपने ग्रब मेनू प्रविष्टियों की एक सूची प्राप्त करने के लिए चलाएँ । आपको कुछ इस तरह देखना चाहिए:
menuentry 'Ubuntu' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-simple-7820cc72-dac4-447f-bba0-996ed1a12fa5' {
submenu 'Advanced options for Ubuntu' $menuentry_id_option 'gnulinux-advanced-7820cc72-dac4-447f-bba0-996ed1a12fa5' {
menuentry 'Ubuntu, with Linux 3.16.0-28-generic' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-3.16.0-28-generic-advanced-7820cc72-dac4-447f-bba0-996ed1a12fa5' {
menuentry 'Ubuntu, with Linux 3.16.0-28-generic (recovery mode)' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-3.16.0-28-generic-recovery-7820cc72-dac4-447f-bba0-996ed1a12fa5' {
menuentry 'Ubuntu, with Linux 3.16.0-25-generic' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-3.16.0-25-generic-advanced-7820cc72-dac4-447f-bba0-996ed1a12fa5' {
menuentry 'Ubuntu, with Linux 3.16.0-25-generic (recovery mode)' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-3.16.0-25-generic-recovery-7820cc72-dac4-447f-bba0-996ed1a12fa5' {
menuentry 'Memory test (memtest86+)' {
menuentry 'Memory test (memtest86+, serial console 115200)' {
menuentry 'Windows 7 (loader) (on /dev/sda2)' --class windows --class os $menuentry_id_option 'osprober-chain-C84087BD4087B12C' {
यहाँ आप देख सकते हैं कि मेरी पहली मेनू प्रविष्टि उबंटू है , इसके बाद उबंटू सबमेनू (चार अन्य प्रविष्टियों के साथ) के लिए एक उन्नत विकल्प , 2 मेमोरी टेस्ट और अंतिम में, विंडोज 7 है ।
यदि हम नाम से एक फ़ाइल बनाते हैं /boot/grub/custom.cfg, तो इसे बाद में लोड किया जाएगा /boot/grub/grub.cfg, इसलिए हम GRUB के डिफ़ॉल्ट कॉन्फ़िगरेशन को आसानी से बदल सकते हैं।
मैंने datehookवर्तमान समय प्राप्त करने के लिए GRUB के मॉड्यूल का उपयोग किया ।
/boot/grub/custom.cfg:
# This module creates special variables that return the current date/time
insmod datehook
# Add and extra 0 to minutes if it's less than 10 (force a 2-digit minute)
if [ $MINUTE -lt 10 ]; then PADDING="0"; else PADDING=""; fi
TIME=$HOUR$PADDING$MINUTE
# Boot "Ubuntu" from midnight to 5:59AM
if [ $TIME -ge 0 -a $TIME -lt 559 ]; then
set default="Ubuntu"
fi
# Boot "Windows 7" from 6AM to 4:59PM
if [ $TIME -ge 600 -a $TIME -lt 1659 ]; then
set default="Windows 7 (loader) (on /dev/sda2)"
fi
# If you want to boot an entry that's inside a submenu,
# you have to prepend its name with the submenu position, starting from 0.
# Boot "Ubuntu, with kernel 3.16.0-25-generic" from 5PM to 11:59PM
if [ $TIME -ge 1700 -a $TIME -lt 2359 ]; then
set default="1>Ubuntu, with Linux 3.16.0-25-generic"
fi
मॉड्यूल datehookचर उपलब्ध कराता है: DAY, HOUR, MINUTE, MONTH, SECOND, WEEKDAY और YEAR, जो हार्डवेयर घड़ी के आधार पर वास्तविक दिनांक / समय मान लौटाते हैं।
if [ $TIME -ge 600 -a $TIME -lt 1659 ]; thenएक उदाहरण के रूप में लेते हैं । इसका मतलब यह है: अगर वर्तमान समय से अधिक या 06:00 के बराबर है और की तुलना में 4:59 बजे (16:59) फिर अगले आदेश (निष्पादित कम set default="Windows 7 (loader) (on /dev/sda2)") है, जो सेट defaultविंडोज 7 मेनू प्रविष्टि से लिया नाम के साथ चर grepउपरोक्त आदेश।
अंतिम ifब्लॉक एक सबमेनू प्रविष्टि के चयन की मिसाल देता है। उस मामले में "उबंटू, लिनक्स 3.16.0-25-जेनेरिक" एक सबमेनू के अंदर है जो मुख्य मेनू में दूसरी प्रविष्टि है। जैसा कि एक मेनू में एक प्रविष्टि स्थिति 0 से शुरू होती है, "उबंटू" नाम का मेनू प्रविष्टि है 0और "उबंटू के लिए उन्नत विकल्प" सबमेनू है 1, यही कारण है कि मुझे 1>प्रवेश नाम से पहले जोड़ना पड़ा set default="1>Ubuntu, with Linux 3.16.0-25-generic":।
चलाने की कोई जरूरत नहीं है update-grub।
हार्डवेयर घड़ी अविश्वसनीय हो सकती है, बैटरी मर चुका है विशेष रूप से अगर। इसके अलावा, BIOS सेटअप दर्ज करें और समय की जांच करें। यदि यह UTC है, तो आपको स्क्रिप्ट में समय सीमा बदलनी होगी।
शुरुआत के लिए, टर्मिनल में निम्नलिखित कमांड चलाएँ :
grep -E '^menuentry|^submenu' /boot/grub/grub.cfg | cut -d '"' -f2 | cut -d "'" -f2
यह आपके ग्रब मेनू प्रविष्टियों की सूची लौटाएगा। मुझे लगता है कि आपके मामले में यह सूची कुछ इस तरह है:
Slitaz
Advanced options
Memory test (memtest86+)
Memory test (memtest86+, serial console 115200)
Ubuntu
Fedora
openSUSE
अब, इन प्रविष्टियों में से प्रत्येक के लिए आपको 0 से शुरू होने वाले आरोही क्रम में एक संख्या निर्दिष्ट करनी चाहिए ("स्लिटज़" के लिए - 0"उन्नत विकल्प" के लिए - 1और इसी तरह)। आप इस नंबर का उपयोग ग्रब मेनू में डिफ़ॉल्ट प्रविष्टि सेट करने के लिए करेंगे।
अगली और आखिरी बात, आपको /boot/grub/grub.cfgफ़ाइल को इस प्रकार संपादित करना चाहिए :
टर्मिनल से gedit में खुली हुई फ़ाइल का उपयोग कर:
sudo -H gedit /boot/grub/grub.cfg
वह रेखा ज्ञात करें जहां defaultचर सेट किया गया है; यह कुछ इसी तरह दिखना चाहिए:
set default="..."
उपरोक्त कोड को अगले कोड से बदलें:
insmod datehook
if [ "$HOUR" -ge "0" -a "$HOUR" -lt "6" ]; then set default="0" #Slitaz time
elif [ "$HOUR" -ge "6" -a "$HOUR" -lt "13" ]; then set default="4" #Ubuntu time
elif [ "$HOUR" -ge "13" -a "$HOUR" -lt "19" ]; then set default="5" #Fedora time
else set default="6" #openSUSE time
fi
फ़ाइल को सहेजें और इसे बंद करें।
बस इतना ही! अपने पीसी को पुनरारंभ करें और जांचें कि क्या यह काम कर रहा है।
नोट: इन सेटिंग्स को वापस लाने के लिए, बस
sudo update-grubटर्मिनल में दौड़ें । वास्तव में, यह कमांड स्वचालित रूप/boot/grub/grub.cfgसे से/etc/grub.dऔर सेटिंग्स से टेम्पलेट्स का उपयोग करके फ़ाइल को उत्पन्न और प्रतिस्थापित करेगी/etc/default/grub। इसलिए उपरोक्त कोड को/etc/grub.dनिर्देशिका के अंदर एक टेम्पलेट में रखना बेहतर होगा ।
प्रेरणा का स्रोत: GRUB2 में एक साधारण बूट टाइम स्टेट मशीन की स्क्रिप्टिंग ।
अन्य स्रोत:
आपके पास 2 संभावनाएं हैं। सबसे पहले, आप हर OS में एक क्रॉन स्क्रिप्ट जोड़ सकते हैं जो घड़ी से कॉन्फिग बदलता है। हालाँकि, आपको पसंद नहीं होगा कि अगर ओएस बंद हो रहा है तो यह स्क्रिप्ट क्या होगी, तो सावधान रहें। एक बेहतर विचार अपने पीसी के लिए एक यूईएफआई मदरबोर्ड का अधिग्रहण करना होगा। वहां आप Shellx86 इंस्टॉल कर सकते हैं जो एक प्री-बूटलोडर स्क्रिप्टिंग कंसोल है। Shellx64 में जो आप चाहते हैं, उसके लिए स्क्रिप्ट बनाना बश में स्क्रिप्टिंग से ज्यादा कठिन नहीं है। यदि आप इंटरनेट कनेक्शन रखते हैं तो मैंने इसका उपयोग अलग-अलग ओएस को बूट करने के लिए किया।
/boot/grub/grub.cfgदिए गए घंटे के लिए एक ग्रब प्रविष्टि का चयन केवल फाइलों को संपादित करके संभव हो सकता है/etc/grub.d। लेकिन मुझे लगता है कि ग्रब लोड से पहले की तारीख / समय भी एक कैलिब्रेटेड स्रोत नहीं होगा (जैसे एनटीपी, उदाहरण के लिए)। ताकि आप पीसी आंतरिक घड़ी के साथ छोड़ देंगे।