Cómo configurar el tiempo de espera de GRUB a 0 en Ubuntu 18.04

11

Traté de actualizar mi archivo de configuración de grub para agotar el tiempo a valor 0, por lo que el sistema operativo se inicia rápidamente. Modifiqué el /etc/default/grubarchivo de configuración en mi Ubuntu 18.04 y luego ejecuté:

sudo update-grub

Y no funcionó. También corrí:

sudo grub-mkconfig
sudo update-grub

Pero no funcionaron.

Busqué mucho en la web para resolver este problema, pero todas las guías dicen que ejecute el comando update-grub para actualizar grub por /etc/default/grubarchivo de configuración. No sé si es Ubuntu 18.04 que maneja los archivos grub de una manera diferente, pero no puedo actualizar mi grub con mis parámetros.

Este es mi /etc/default/grubarchivo:

# 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
fuente
3
Edite su pregunta e incluya su archivo de configuración de grub modificado. De lo contrario, solo estamos tratando de adivinar lo que hiciste.
Mármol orgánico
¿Tiene otras distribuciones instaladas (arranque dual)?
mook765
no funcionó, significa que mi tiempo de espera de grub todavía está configurado en 10 segundos, ya que de forma predeterminada @Melebius
Bob91
Tengo ventanas en el mismo SSD y otras distribuciones instaladas en otro disco duro, pero el mes pasado tuve Fedora 27 (en lugar de Ubuntu 18) y funcionó cuando cambié el archivo de configuración de Grub, así que creo que las otras distribuciones no son las causas de este comportamiento @ mook765
Bob91
1
¿Podría ejecutar Boot-Info y editar su pregunta para incluir un enlace a su registro de información resultante? Gracias.
David Foerster

Respuestas:

13

En el /boot/grub/grub.cfgarchivo hay una condición, casi al final del archivo, que establece el tiempo de espera en 10 si el tiempo de espera se establece en 0. En otras palabras, si establece el tiempo de espera en 0 en su /etc/default/gruby luego actualiza grub, la condición anterior restablecerlo a 10 segundos.

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

Sin embargo, /boot/grub/grub.cfges un archivo de solo lectura y no puedo eliminar esa condición. Hice algunas pruebas con diferentes valores del tiempo de espera en /etc/default/grub. Intenté con 1ms (0.001), 0.1s y 1s y descubrí que los valores por debajo de 1 (como 0.1 y 0.001) funcionan de la misma manera y casi como el tiempo de espera establecido en 0.

Bob91
fuente
work in the same way and almost like timeouteso se debe a que las matemáticas en bash solo admiten enteros. El tiempo de espera más corto que marcaría la diferencia es 1.
Marcin Orlowski, el
6

En mi caso, el problema era que mi sistema no admitía "recordfail", lo que provocaba que se agregara un bloque separado al grub.cfg que por defecto tiene un tiempo de espera de 30 segundos. El código relevante en /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

La solución es simplemente agregar un valor para GRUB_RECORDFAIL_TIMEOUTin /etc/default/gruby ejecutar update-grubnuevamente. Por ejemplo:

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
fuente
3

Como dicen las otras respuestas, descomenta GRUB_HIDDEN_TIMEOUTy corre update-grub. Luego comente el

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

sección en /boot/grub/grub.cfg. En vim, puede anular la propiedad de solo lectura con un signo de exclamación :x!. O puedes correr

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

tener temporalmente permiso de escritura mientras edita el archivo.

asantas93
fuente
3
Tiene razón, pero creo que cada vez que actualiza grub (manualmente o cuando hay una actualización del sistema operativo) /boot/grub/grub.cfgse recreará con la condición anterior.
Bob91
2
Eso es cierto, el archivo se sobrescribe en la actualización, como lo experimenté recientemente.
asantas93
1

Se puede establecer GRUB_TIMEOUTa 0.

El valor de tiempo de espera de sobrescritura de parte se escribe en ajust_timeoutfunción en la parte superior de /etc/grub.d/30_os-prober.

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

Por lo tanto, puede establecer el valor editando el archivo y comentando if-block.

huésped
fuente
1

Se puede establecer GRUB_TIMEOUTa -1.

Ex:GRUB_TIMEOUT="-1"

Giceu Cassiano
fuente
'GRUB_TIMEOUT' Arranca la entrada predeterminada varios segundos después de que se muestre el menú, a menos que se presione una tecla. El valor predeterminado es '5'. Establezca en '0' para arrancar inmediatamente sin mostrar el menú, o en '-1' para esperar indefinidamente. desde el comandoinfo -f grub -n 'Simple configuration
Vijay
1

Descomenta GRUB_HIDDEN_TIMEOUT=0y corre de update-grubnuevo.

hiigaran
fuente
no funciona
Bob91
GRUB_HIDDEN_TIMEOUT = -1
kuhajeyan
1
GRUB_HIDDEN_TIMEOUT=-1trabajó en Ubuntu 18.10.
Manish Raj
0

Simplemente podemos agregar la línea

set timeout=0

a /etc/grub.d/40_custom, hacer que el archivo ejecutable con

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

y correr

sudo update-grub

para generar el nuevo /boot/grub/grub.cfgarchivo. El set timeoutcomando que agregamos es el último set timeoutcomando /boot/grub/grub.cfgahora, eso es lo que cuenta.

mook765
fuente
-1

La solución es agregar

GRUB_RECORDFAIL_TIMEOUT=0

a /etc/default/grub.

Todas las demás soluciones se restablecerán en las actualizaciones de grub.

Piloto6
fuente