Yanıtlar:
İlk olarak grep -E '(menuentry |submenu )' /boot/grub/grub.cfg
grub menü girişlerinin bir listesini almak için çalıştırın . Şuna benzer bir şey görmelisiniz:
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' {
Burada ilk menü girişimi Ubuntu , ardından Ubuntu alt menüsü için Gelişmiş seçenekler (diğer dört girişle), 2 bellek testi ve sonunda Windows 7 görebilirsiniz .
Adında bir dosya oluşturursak /boot/grub/custom.cfg
, daha sonra yüklenir /boot/grub/grub.cfg
, böylece GRUB'un varsayılan yapılandırmasını kolayca değiştirebiliriz.
datehook
Geçerli saati almak için GRUB'un modülünü kullandım .
/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
Modül datehook
, donanım saatine göre gerçek tarih / saat değerlerini döndüren DAY, HOUR, MINUTE, MONTH, SECOND, WEEKDAY ve YEAR değişkenlerini kullanılabilir hale getirir.
if [ $TIME -ge 600 -a $TIME -lt 1659 ]; then
Örnek olarak ele alalım. Bu şu anlama gelir: geçerli saat 6: 00'dan büyük veya eşitse ve 16:59 (16:59) 'dan küçükse set default="Windows 7 (loader) (on /dev/sda2)"
, default
değişkeni grep
yukarıdaki komuttan alınan Windows 7 menü girişi adıyla ayarlayan bir sonraki komutu ( ) yürütün .
Son if
blok, bir alt menü girişinin seçimini örnekler. Bu durumda "Ubuntu, Linux 3.16.0-25-generic" ile ana menüdeki ikinci giriş olan bir alt menünün içinde yer alır. 0'dan bir menü başlar bir giriş pozisyonuna, menü "Ubuntu" adlı girişi olduğu gibi 0
ve alt menüsü olan "Ubuntu için gelişmiş seçenekleri" 1
Ben eklemek zorunda yüzden, işte bu 1>
giriş isminden önce: set default="1>Ubuntu, with Linux 3.16.0-25-generic"
.
Koşmaya gerek yok update-grub
.
Donanım saati pil öldü, eğer özel güvenilmez olabilir. Ayrıca, BIOS kurulumuna girin ve saati kontrol edin. UTC ise, koddaki zaman aralığını değiştirmeniz gerekir.
Başlangıç için, terminalde aşağıdaki komutu çalıştırın :
grep -E '^menuentry|^submenu' /boot/grub/grub.cfg | cut -d '"' -f2 | cut -d "'" -f2
Bu, grub menüsü girişlerinizin bir listesini döndürür. Senin durumunda bu liste böyle bir şey olduğunu varsayalım:
Slitaz
Advanced options
Memory test (memtest86+)
Memory test (memtest86+, serial console 115200)
Ubuntu
Fedora
openSUSE
Şimdi, bu girişlerin her biri için 0'dan başlayarak artan sırada bir sayı atamalısınız ("Slitaz" için - 0
"Gelişmiş seçenekler" için - 1
vb.). Grub menüsünde varsayılan girişi ayarlamak için bu numaraları kullanacaksınız.
Sonra ve son olarak, /boot/grub/grub.cfg
dosyayı aşağıdaki gibi düzenlemelisiniz :
Terminaldeki gedit açık olan dosyayı kullanarak:
sudo -H gedit /boot/grub/grub.cfg
default
Değişkenin ayarlandığı satırı bulun ; şuna benzer bir şey olmalıdır:
set default="..."
Yukarıdaki satırı bir sonraki kodla değiştirin:
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
Dosyayı kaydedin ve kapatın.
Bu kadar! Bilgisayarınızı yeniden başlatın ve çalışıp çalışmadığını kontrol edin.
Not: bu ayarları geri almak için sadece
sudo update-grub
terminalde çalıştırın . Aslında, bu komut,/boot/grub/grub.cfg
şablonları/etc/grub.d
ve ayarlarını kullanarak otomatik olarak dosya oluşturur ve değiştirir/etc/default/grub
. Bu nedenle, yukarıdaki kodu/etc/grub.d
dizin içindeki bir şablona koymak daha iyi olacaktır .
İlham kaynağı: GRUB2'de Basit Önyükleme Zamanı Durum Makinesi için Komut Dosyası Oluşturma .
Diğer kaynaklar:
2 olasılığınız var. İlk olarak, her işletim sistemine yapılandırmayı saatte değiştiren bir cron betiği ekleyebilirsiniz. Ancak, işletim sistemi kapatılırken bu komut dosyası devreye girerse ne olacağını sevmeyeceksiniz, bu yüzden dikkatli olun. PC'niz için bir UEFI anakartı almak daha iyi bir fikir olabilir. Burada, önyükleyici öncesi komut dosyası konsolu olan Shellx86'yı yükleyebilirsiniz. Shellx64'te istediğiniz şey için komut dosyası oluşturmak, bash komut dosyası oluşturmaktan daha zor değildir. İnternet bağlantınız olmasına bağlı olarak farklı işletim sistemlerini önyüklemek için kullandım.
/boot/grub/grub.cfg
, belirli bir saat için grub girdisinin seçilmesi yalnızca dosyaları düzenleyerek mümkün olmalıdır/etc/grub.d
. Ancak grub yüklerinden önceki tarih / saatin kalibre edilmiş bir kaynak bile olmayacağını düşünüyorum (örneğin NTP gibi). Böylece PC iç saati ile bırakacaksınız.