Come impostare il timeout di GRUB su 0 su Ubuntu 18.04


11

Ho provato ad aggiornare il mio file di configurazione grub al timeout su valore 0, quindi il sistema operativo si avvia rapidamente. Ho modificato il /etc/default/grubfile di configurazione sul mio Ubuntu 18.04 e quindi ho eseguito:

sudo update-grub

e non ha funzionato. Ho anche corso:

sudo grub-mkconfig
sudo update-grub

ma non hanno funzionato.

Ho cercato molto sul web per risolvere questo problema, ma tutte le guide dicono di eseguire il comando update-grub per aggiornare grub con il /etc/default/grubfile di configurazione. Non so se Ubuntu 18.04 gestisce i file grub in modo diverso, ma non riesco ad aggiornare il mio grub con i miei parametri.

Questo è il mio /etc/default/grubfile:

# 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"

3
Modifica la domanda e includi il file di configurazione grub modificato. Altrimenti stiamo solo cercando di indovinare cosa hai fatto.
Marmo organico

Hai altre distribuzioni installate (doppio avvio)?
mook765,

non ha funzionato significa che il mio timeout di grub è ancora impostato su 10 sec come impostazione predefinita @Melebius
Bob91

Ho Windows nello stesso SSD e altre distribuzioni installate su altri HDD, ma il mese scorso avevo fedora 27 (invece di Ubuntu 18) e ha funzionato quando ho cambiato il file di configurazione di GRUB, quindi penso che le altre distribuzioni non siano le cause di questo comportamento @ mook765
Bob91

1
Potresti eseguire Boot-Info e modificare la tua domanda per includere un link al registro delle informazioni risultante? Grazie.
David Foerster,

Risposte:


13

Nel /boot/grub/grub.cfgfile c'è una condizione, quasi alla fine del file, che imposta il timeout su 10 se il timeout è impostato su 0. In altre parole, se si imposta il timeout su 0 nel proprio /etc/default/grube quindi si aggiorna grub, la condizione sopra resettalo a 10 secondi.

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

Tuttavia, /boot/grub/grub.cfgè un file di sola lettura e non riesco a rimuovere quella condizione. Ho effettuato alcuni test con diversi valori di timeout in /etc/default/grub. Ho provato con 1ms (0.001), 0.1s e 1s e ho scoperto che i valori inferiori a 1 (come 0.1 e 0.001) funzionano allo stesso modo e quasi come il timeout impostato su 0.


work in the same way and almost like timeoutquesto perché la matematica in bash supporta solo numeri interi. Il timeout più breve che farebbe la differenza è 1.
Marcin Orlowski,

6

Nel mio caso, il problema era che il mio sistema non supportava "recordfail" che causava l'aggiunta di un blocco separato a grub.cfg che per impostazione predefinita ha un timeout di 30 secondi. Il codice pertinente in /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 correzione consiste semplicemente nell'aggiungere un valore per GRUB_RECORDFAIL_TIMEOUTin /etc/default/grubed eseguire update-grubnuovamente. Per esempio:

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"

3

Come dicono le altre risposte, decommenta GRUB_HIDDEN_TIMEOUTed esegui update-grub. Quindi commentare il

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

sezione in /boot/grub/grub.cfg. In vim puoi semplicemente sovrascrivere la proprietà di sola lettura con un punto esclamativo :x!. Oppure puoi correre

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

per disporre temporaneamente dell'autorizzazione in scrittura durante la modifica del file.


3
Hai ragione, ma penso che ogni volta che aggiorni grub (manualmente o quando ci sono aggiornamenti del sistema operativo) /boot/grub/grub.cfgverrà ricreata con la condizione sopra.
Bob91,

2
È vero, il file viene sovrascritto durante l'aggiornamento, come ho sperimentato di recente.
asantas93,

1

Puoi impostare GRUB_TIMEOUTsu 0.

Il valore di timeout di sovrascrittura della parte è scritto nella ajust_timeoutfunzione nella parte superiore di /etc/grub.d/30_os-prober.

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

Quindi, puoi impostare il valore modificando il file e commentando if-block.


1

Puoi impostare GRUB_TIMEOUTsu -1.

Ex:GRUB_TIMEOUT="-1"


'GRUB_TIMEOUT' Avvia la voce predefinita molti secondi dopo la visualizzazione del menu, a meno che non venga premuto un tasto. L'impostazione predefinita è '5'. Impostare su "0" per avviare immediatamente senza visualizzare il menu o su "-1" per attendere indefinitamente. dal comandoinfo -f grub -n 'Simple configuration
Vijay,


0

Possiamo semplicemente aggiungere la linea

set timeout=0

a /etc/grub.d/40_custom, rendere eseguibile il file con

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

e corri

sudo update-grub

per generare il nuovo /boot/grub/grub.cfg-file. Il set timeoutcomando che abbiamo aggiunto è l'ultimo set timeoutcomando /boot/grub/grub.cfgadesso, questo è ciò che conta.


-1

La soluzione è aggiungere

GRUB_RECORDFAIL_TIMEOUT=0

a /etc/default/grub.

Tutte le altre soluzioni verranno ripristinate sugli aggiornamenti di grub.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.