Comment définir le délai d'expiration GRUB sur 0 sur Ubuntu 18.04

11

J'ai essayé de mettre à jour mon fichier de configuration grub pour un délai d'expiration à la valeur 0, donc le système d'exploitation démarre rapidement. J'ai modifié le /etc/default/grubfichier de configuration sur mon Ubuntu 18.04, puis j'ai exécuté:

sudo update-grub

et ça n'a pas marché. J'ai aussi couru:

sudo grub-mkconfig
sudo update-grub

mais ils n'ont pas fonctionné.

J'ai beaucoup cherché sur le Web pour résoudre ce problème, mais tous les guides disent d'exécuter la commande update-grub pour mettre à jour grub par /etc/default/grubfichier de configuration. Je ne sais pas si Ubuntu 18.04 gère les fichiers grub d'une manière différente, mais je ne peux pas mettre à jour mon grub avec mes paramètres.

Voici mon /etc/default/grubdossier:

# If you change this file, run 'update-grub' afterwards to update
# /boot/grub/grub.cfg.
# For full documentation of the options in this file, see:
# info -f grub -n 'Simple configuration'

GRUB_DEFAULT=0
#GRUB_HIDDEN_TIMEOUT=0
GRUB_HIDDEN_TIMEOUT_QUIET=true
GRUB_TIMEOUT=0
GRUB_DISTRIBUTOR=`lsb_release -i -s 2> /dev/null || echo Debian`
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"
GRUB_CMDLINE_LINUX=""

# Uncomment to enable BadRAM filtering, modify to suit your needs
# This works with Linux (no patch required) and with any kernel that obtains
# the memory map information from GRUB (GNU Mach, kernel of FreeBSD ...)
#GRUB_BADRAM="0x01234567,0xfefefefe,0x89abcdef,0xefefefef"

# Uncomment to disable graphical terminal (grub-pc only)
#GRUB_TERMINAL=console

# The resolution used on graphical terminal
# note that you can use only modes which your graphic card supports via VBE
# you can see them in real GRUB with the command `vbeinfo'
#GRUB_GFXMODE=640x480

# Uncomment if you don't want GRUB to pass "root=UUID=xxx" parameter to Linux
#GRUB_DISABLE_LINUX_UUID=true

# Uncomment to disable generation of recovery mode menu entries
#GRUB_DISABLE_RECOVERY="true"

# Uncomment to get a beep at grub start
#GRUB_INIT_TUNE="480 440 1"
Bob91
la source
3
Veuillez modifier votre question et inclure votre fichier de configuration grub modifié. Sinon, nous essayons juste de deviner ce que vous avez fait.
Marbre organique
Avez-vous installé d'autres distributions (double démarrage)?
mook765
cela n'a pas fonctionné signifie que mon délai d'expiration grub est toujours défini sur 10 secondes comme par défaut @Melebius
Bob91
J'ai des fenêtres dans le même SSD et d'autres distributions installées sur d'autres disques durs, mais le mois dernier, j'avais Fedora 27 (au lieu d'Ubuntu 18) et cela a fonctionné lorsque j'ai changé le fichier de configuration grub, donc je pense que les autres distributions ne sont pas les causes de ce comportement @ mook765
Bob91
1
Pourriez-vous s'il vous plaît exécuter Boot-Info et modifier votre question pour inclure un lien vers son journal d'informations résultant? Merci.
David Foerster

Réponses:

13

Dans le /boot/grub/grub.cfgfichier, il y a une condition, presque à la fin du fichier, qui définit le délai d'expiration à 10 si le délai d'expiration est défini sur 0. En d'autres termes, si vous définissez le délai d'expiration sur 0 dans votre /etc/default/grubpuis mettez à jour grub, la condition ci-dessus réinitialisez-le à 10 secondes.

if [ "${timeout}" = 0 ]; then
     set timeout=10
fi

Cependant, /boot/grub/grub.cfgest un fichier en lecture seule et je ne peux pas supprimer cette condition. J'ai fait quelques tests avec différentes valeurs de timeout dans /etc/default/grub. J'ai essayé avec 1 ms (0,001), 0,1 s et 1 s et j'ai découvert que les valeurs inférieures à 1 (comme 0,1 et 0,001) fonctionnent de la même manière et presque comme un délai d'attente défini sur 0.

Bob91
la source
work in the same way and almost like timeoutc'est parce que les mathématiques en bash ne prennent en charge que les entiers. Le délai le plus court qui ferait une différence est 1.
Marcin Orlowski
6

Dans mon cas, le problème était que mon système ne prenait pas en charge "recordfail", ce qui provoquait l'ajout d'un bloc distinct dans le grub.cfg, qui par défaut correspond à un délai d'expiration de 30 secondes. Le code correspondant dans /etc/grub.d/00_header:

if [ "$recordfail_broken" = 1 ]; then
  cat << EOF
if lsefi; then
  set timeout=${GRUB_RECORDFAIL_TIMEOUT:-30}
  if [ x\$feature_timeout_style = xy ] ; then
    set timeout_style=menu
  fi
fi
EOF

Le correctif consiste simplement à ajouter une valeur pour GRUB_RECORDFAIL_TIMEOUTin /etc/default/grubet à réexécuter update-grub. Par exemple:

GRUB_CMDLINE_LINUX_DEFAULT=""
GRUB_CMDLINE_LINUX=""

# Adjusted timeout for system which doesn't support recordfail
GRUB_RECORDFAIL_TIMEOUT=2

# Uncomment to enable BadRAM filtering, modify to suit your needs
# This works with Linux (no patch required) and with any kernel that obtains
# the memory map information from GRUB (GNU Mach, kernel of FreeBSD ...)
#GRUB_BADRAM="0x01234567,0xfefefefe,0x89abcdef,0xefefefef"
Alex Malinovich
la source
3

Comme le disent les autres réponses, décommentez GRUB_HIDDEN_TIMEOUTet courez update-grub. Commentez ensuite le

if [ "${timeout}" = 0 ]; then
  set timeout=10
fi

section /boot/grub/grub.cfg. Dans vim, vous pouvez simplement remplacer la propriété en lecture seule par un point d'exclamation :x!. Ou vous pouvez courir

sudo chmod +w /boot/grub/grub.cfg
sudo vim /boot/grub/grub.cfg
sudo chmod -w /boot/grub/grub.cfg

d'avoir temporairement l'autorisation d'écriture lors de la modification du fichier.

asantas93
la source
3
Vous avez raison, mais je pense que chaque fois que vous mettez à jour grub (manuellement ou lorsqu'il y a une mise à niveau du système d'exploitation), le /boot/grub/grub.cfgsera recréé avec la condition ci-dessus.
Bob91
2
C'est vrai, le fichier est écrasé lors de la mise à jour, comme j'ai pu le constater récemment.
asantas93
1

Vous pouvez définir GRUB_TIMEOUTsur 0.

La valeur de délai d'écrasement de la pièce est écrite en ajust_timeoutfonction en haut de /etc/grub.d/30_os-prober.

ajust_timeout () {
...
if [ "\${timeout}" = 0]; then
  set timeout=10
fi
...
}

Ainsi, vous pouvez définir la valeur en modifiant le fichier et en commentant if-block.

client
la source
1

Vous pouvez définir GRUB_TIMEOUTsur -1.

Ex:GRUB_TIMEOUT="-1"

Giceu Cassiano
la source
'GRUB_TIMEOUT' Démarre l'entrée par défaut autant de secondes après l'affichage du menu, sauf si une touche est enfoncée. La valeur par défaut est «5». Réglez sur «0» pour démarrer immédiatement sans afficher le menu, ou sur «-1» pour attendre indéfiniment. de la commandeinfo -f grub -n 'Simple configuration
Vijay
1

Décommentez GRUB_HIDDEN_TIMEOUT=0et exécutez à update-grubnouveau.

hiigaran
la source
ça ne marche pas
Bob91
GRUB_HIDDEN_TIMEOUT = -1
kuhajeyan
1
GRUB_HIDDEN_TIMEOUT=-1travaillé sur Ubuntu 18.10.
Manish Raj
0

Nous pouvons simplement ajouter la ligne

set timeout=0

pour /etc/grub.d/40_custom, rendre le fichier exécutable avec

chmod +x /etc/grub.d/40_custom

et courir

sudo update-grub

pour générer le nouveau /boot/grub/grub.cfgfichier. La set timeoutcommande-que nous avons ajoutée est la dernière set timeout-commande /boot/grub/grub.cfgmaintenant, c'est ce qui compte.

mook765
la source
-1

La solution est d'ajouter

GRUB_RECORDFAIL_TIMEOUT=0

à /etc/default/grub.

Toutes les autres solutions seront réinitialisées lors des mises à jour de grub.

Pilot6
la source