GRUB নির্ধারিত হতে পারে? এর অর্থ: স্বয়ংক্রিয়ভাবে নির্ধারিত সময়কালে ডিফল্ট 'এন্ট্রি' (স্বতঃ লগইন) পরিবর্তন করা যায়?


10

উদাহরণ স্বরূপ:

00:00:00 to 06:00:00 -> Slitaz
06:00:01 to 13:00:00 -> Ubuntu
13:00:01 to 19:00:00 -> Fedora
19:00:01 to 23:59:59 -> openSUSE

গ্রাব স্বয়ংক্রিয়ভাবে ডিফল্ট 'এন্ট্রি' পরিবর্তন করতে পারে?


1
তত্ত্ব অনুসারে, আপনি যদি তারিখ এবং সময় সম্পর্কিত কমান্ডগুলি ব্যবহার করতে পারেন তবে নির্দিষ্ট সময়ের /boot/grub/grub.cfgজন্য একটি গ্রাব এন্ট্রি বেছে নেওয়া কেবলমাত্র ফাইলগুলি সম্পাদনা করার মাধ্যমে সম্ভব /etc/grub.d। তবে আমি মনে করি গ্রাব লোডের আগের তারিখ / সময় এমনকি একটি ক্রমাঙ্কিত উত্স হতে পারে না (উদাহরণস্বরূপ এনটিপির মতো)। সুতরাং এটি আপনাকে পিসি অভ্যন্তরীণ ঘড়ির সাথে ছেড়ে দেবে।
এডউইন

উত্তর:


5

প্রথমে 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' {

এখানে আপনি দেখতে পাচ্ছেন আমার প্রথম মেনু প্রবেশটি হ'ল উবুন্টু , তারপরে উবুন্টু সাবমেনু (আরও চারটি এন্ট্রি সহ), দুটি মেমরি পরীক্ষা এবং সর্বশেষে উইন্ডোজ for এর জন্য উন্নত বিকল্প রয়েছে

যদি আমরা নামের একটি ফাইল তৈরি করি তবে /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ভেরিয়েবলগুলি উপলভ্য করে: ডে, আওয়ার, মিনিট, মাস, সেকেন্ড, উইকডে এবং ইয়ার, যা হার্ডওয়্যার ঘড়ির উপর ভিত্তি করে প্রকৃত তারিখ / সময় মান দেয়।

if [ $TIME -ge 600 -a $TIME -lt 1659 ]; thenএকটি উদাহরণ হিসাবে নেওয়া যাক । এর অর্থ: যদি বর্তমান সময়টি 6am এর চেয়ে বেশি বা তার সমান হয় এবং 4:59 অপরাহ্নের (16:59) এর চেয়ে কম হয় তবে পরবর্তী কমান্ডটি কার্যকর করুন ( set default="Windows 7 (loader) (on /dev/sda2)"), যা উপরের কমান্ড defaultথেকে নেওয়া উইন্ডোজ 7 মেনু এন্ট্রি নামের সাথে ভেরিয়েবল সেট করে grep

শেষ ifব্লকটি একটি সাবমেনু এন্ট্রি নির্বাচন উদাহরণ দেয়। সেক্ষেত্রে "উবুন্টু, লিনাক্স ৩.১ -.০-২৫-জেনেরিক সহ" একটি সাবমেনুর ভিতরে রয়েছে যা মূল মেনুতে দ্বিতীয় প্রবেশ। 0 থেকে একটি মেনু শুরু হয় একটি এন্ট্রি অবস্থান, "উবুন্টু" নামে মেনু এন্ট্রি হয় 0এবং "উবুন্টু জন্য উন্নত বিকল্পগুলি" সাবমেনু হয় 1, যে কেন আমি যোগ করতে ছিল 1>এন্ট্রি নাম আগে: set default="1>Ubuntu, with Linux 3.16.0-25-generic"

চালানোর দরকার নেই update-grub

হার্ডওয়্যার ঘড়ি অবিশ্বস্ত হতে পারে, ব্যাটারি মারা গেছে বিশেষভাবে পারেন। এছাড়াও, বিআইওএস সেটআপ প্রবেশ করুন এবং সময়টি পরীক্ষা করুন। এটি ইউটিসি হলে আপনাকে স্ক্রিপ্টের সময়সীমা পরিবর্তন করতে হবে।


এটি /etc/grub.d/00_header এর মাধ্যমে করা ভাল, কারণ কার্নেল আপডেটগুলি (বা ব্যবহারকারী) নতুন এন্ট্রি যুক্ত করার সময় আপডেট-গ্রাব কল করতে পারে। সিএফ: linuxquestions.org/questions/linux-desktop-74/…
কেআইএজে

2

শুরুতে, টার্মিনালে নিম্নলিখিত কমান্ডটি চালান :

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ফাইলটি সম্পাদনা করা উচিত :

  • টার্মিনাল থেকে জিডিট ফাইল খুলুন ব্যবহার করে:

    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 এ একটি সাধারণ বুট টাইম স্টেট মেশিনের স্ক্রিপ্ট করা

অন্যান্য উত্স:


0

আপনার 2 টি সম্ভাবনা রয়েছে। প্রথমত, আপনি প্রতিটি ওএসে একটি ক্রোন স্ক্রিপ্ট যুক্ত করতে পারেন যা ঘড়ি দ্বারা কনফিগারেশন পরিবর্তন করে। তবে, ওএস বন্ধ করার সময় এই স্ক্রিপ্টটি লাথি মারলে কী হবে তা আপনি পছন্দ করবেন না, তাই সাবধান হন। আপনার পিসির জন্য একটি ইউইএফআই মাদারবোর্ড অর্জন করা আরও ভাল ধারণা। সেখানে আপনি Shellx86 ইনস্টল করতে পারেন যা একটি পূর্ব-বুটলোডার স্ক্রিপ্টিং কনসোল। আপনি শেলেক্স 64৪ তে যা চান তার জন্য স্ক্রিপ্ট তৈরি করা বাশ-এ স্ক্রিপ্টিংয়ের চেয়ে শক্ত কিছু নয়। আপনার ইন্টারনেট সংযোগ রয়েছে কিনা তার উপর নির্ভর করে আমি এটি বিভিন্ন ওএস বুট করতে ব্যবহার করেছি।

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