Réponses:
Tout d'abord, exécutez grep -E '(menuentry |submenu )' /boot/grub/grub.cfg
pour obtenir une liste de vos entrées de menu grub. Vous devriez voir quelque chose comme:
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' {
Ici, vous pouvez voir ma première entrée de menu est Ubuntu , suivie d'un sous-menu Options avancées pour Ubuntu (avec quatre autres entrées), 2 tests de mémoire et, enfin, Windows 7 .
Si nous créons un fichier nommé /boot/grub/custom.cfg
, il sera chargé après /boot/grub/grub.cfg
, afin que nous puissions facilement changer la configuration par défaut de GRUB.
J'ai utilisé le module de GRUB datehook
pour obtenir l'heure actuelle.
/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
Le module datehook
met à disposition les variables: DAY, HOUR, MINUTE, MONTH, SECOND, WEEKDAY et YEAR, qui renvoient les valeurs réelles de date / heure en fonction de l'horloge matérielle.
Prenons if [ $TIME -ge 600 -a $TIME -lt 1659 ]; then
un exemple. Cela signifie: si l'heure actuelle est supérieure ou égale à 6 h et inférieure à 16 h 59 (16 h 59), exécutez la commande suivante ( set default="Windows 7 (loader) (on /dev/sda2)"
), qui définit la default
variable avec le nom d'entrée de menu Windows 7 tiré de cette grep
commande ci-dessus.
Le dernier if
bloc illustre la sélection d'une entrée de sous-menu. Dans ce cas, "Ubuntu, avec Linux 3.16.0-25-generic" se trouve dans un sous-menu qui est la deuxième entrée du menu principal. Comme une position d'entrée dans un menu commence à 0, l'entrée de menu nommé « Ubuntu » est 0
et les « Options avancées pour Ubuntu » sous - menu est 1
, ce qui est la raison pour laquelle je devais ajouter 1>
avant le nom d'entrée: set default="1>Ubuntu, with Linux 3.16.0-25-generic"
.
Il n'y a pas besoin de courir update-grub
.
L' horloge matérielle peut ne pas être fiable, surtout si la batterie est morte. Entrez également dans la configuration du BIOS et vérifiez l'heure. Si c'est UTC, vous devrez changer la plage de temps dans le script.
Pour commencer, exécutez la commande suivante dans le terminal :
grep -E '^menuentry|^submenu' /boot/grub/grub.cfg | cut -d '"' -f2 | cut -d "'" -f2
Cela renverra une liste de vos entrées de menu grub. Je suppose que dans votre cas, cette liste ressemble à ceci:
Slitaz
Advanced options
Memory test (memtest86+)
Memory test (memtest86+, serial console 115200)
Ubuntu
Fedora
openSUSE
Maintenant, pour chacune de ces entrées, vous devez attribuer un numéro dans l'ordre croissant commençant par 0 (pour "Slitaz" - 0
, pour "Options avancées" - 1
et ainsi de suite). Vous utiliserez ces chiffres pour définir l'entrée par défaut dans le menu grub.
Ensuite, et la dernière chose, vous devez modifier le /boot/grub/grub.cfg
fichier comme suit:
Depuis le terminal, ouvrez dans gedit le fichier en utilisant:
sudo -H gedit /boot/grub/grub.cfg
Trouvez la ligne où la default
variable est définie; il devrait ressembler à quelque chose de similaire avec:
set default="..."
Remplacez la ligne ci-dessus par le code suivant:
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
Enregistrez le fichier et fermez-le.
C'est tout! Redémarrez votre PC et vérifiez s'il fonctionne.
Remarque: pour rétablir ces paramètres, exécutez simplement
sudo update-grub
dans le terminal. En fait, cette commande générera et remplacera automatiquement le/boot/grub/grub.cfg
fichier en utilisant les modèles/etc/grub.d
et les paramètres de/etc/default/grub
. Il sera donc préférable de mettre le code ci-dessus dans un modèle à l'intérieur du/etc/grub.d
répertoire.
Source d'inspiration: Scripting a Simple Boot Time State Machine in GRUB2 .
Autres sources:
Vous avez 2 possibilités. Tout d'abord, vous pouvez ajouter à chaque système d'exploitation un script cron qui modifie la configuration par horloge. Cependant, vous n'aimerez pas ce qui se passera si ce script se déclenche pendant la fermeture du système d'exploitation, alors méfiez-vous. Une meilleure idée serait d'acquérir une carte mère UEFI pour votre PC. Vous pouvez y installer Shellx86 qui est une console de script de pré-démarrage. Créer un script pour ce que vous voulez dans Shellx64 n'est pas plus difficile que de créer un script en bash. Je l'ai utilisé pour démarrer différents systèmes d'exploitation selon que vous disposez d'une connexion Internet.
/boot/grub/grub.cfg
, le choix d'une entrée grub pour une heure donnée devrait être possible simplement en éditant les fichiers sur/etc/grub.d
. Mais je pense que la date / heure avant les charges de grub ne serait même pas une source calibrée (comme NTP, par exemple). Donc, cela vous laisserait avec l'horloge interne du PC.