⭐⭐GRUB a Deepin: configurar el temps del menú d’arrencada

És clar. Et deixo una versió pensada directament per publicar al blog, amb les comandes i explicacions ordenades, incloent el problema que vam trobar amb Deepin, 11_dde.cfg, 40_custom i update-grub.

GRUB a Deepin: configurar el temps del menú d’arrencada

Quan tenim més d’un sistema operatiu o més d’una instal·lació de Deepin al mateix disc, és molt útil que GRUB mostri el menú d’arrencada durant uns segons abans de seleccionar automàticament l’opció per defecte.

En aquest cas tenia tres possibilitats principals:

  • Deepin 25 de 50 GB, instal·lat a /dev/sda6
  • Deepin 25 de 130 GB, instal·lat a /dev/sda5
  • Windows, instal·lat a /dev/sda3

La configuració de GRUB permet decidir quant temps es mostra el menú i quin sistema s’arrenca automàticament.


1. El fitxer principal de configuració

El fitxer habitual és:

/etc/default/grub

Es pot editar amb:

sudo nano /etc/default/grub

Les línies importants són:

GRUB_DEFAULT=0
GRUB_TIMEOUT=7
GRUB_TIMEOUT_STYLE=menu
GRUB_RECORDFAIL_TIMEOUT=7

Què significa cada opció?

GRUB_DEFAULT

GRUB_DEFAULT=0

Indica quina entrada del menú s’utilitza per defecte.

0 significa la primera entrada.

Per exemple, si la primera entrada és el Deepin de /dev/sda6, aquest serà el sistema que s’arrencarà automàticament si no seleccionem cap altra opció.


2. GRUB_TIMEOUT: temps normal del menú

GRUB_TIMEOUT=7

Indica quants segons espera GRUB abans d’arrencar l’opció per defecte.

Exemples:

GRUB_TIMEOUT=3

→ 3 segons


sudo nano /etc/grub.d/40_custom
sudo update-grub
per veure les linies de set timeout a grub.cng:
grep "set timeout" /boot/grub/grub.cfg

GRUB_TIMEOUT=7

→ 7 segons

GRUB_TIMEOUT=10

→ 10 segons

GRUB_TIMEOUT=0

→ no espera i arrenca immediatament

GRUB_TIMEOUT=-1

→ espera indefinidament fins que l’usuari esculli una opció

Per tenir temps de triar entre diferents sistemes, un valor de 7 o 10 segons sol ser còmode.


3. GRUB_TIMEOUT_STYLE: fer visible el menú

Perquè el menú aparegui directament:

GRUB_TIMEOUT_STYLE=menu

Això és especialment important quan tenim diversos sistemes operatius.

Amb:

GRUB_TIMEOUT_STYLE=menu

GRUB mostra el menú i comença el compte enrere.


4. El temps especial GRUB_RECORDFAIL_TIMEOUT

Hi ha un altre temps que pot intervenir:

GRUB_RECORDFAIL_TIMEOUT=7

Aquest valor s’utilitza quan GRUB detecta que l’arrencada anterior havia quedat marcada com a fallida.

Per exemple:

GRUB_TIMEOUT=7
GRUB_RECORDFAIL_TIMEOUT=8

pot generar al grub.cfg:

if [ "${recordfail}" = 1 ] ; then
    set timeout=8
else
    set timeout=7
fi

Això significa:

arrencada normal       → 7 segons
arrencada amb recordfail → 8 segons

Si volem que el comportament sigui uniforme:

GRUB_TIMEOUT=7
GRUB_RECORDFAIL_TIMEOUT=7

5. Un problema particular de Deepin

En una instal·lació normal de GRUB, sovint n’hi ha prou amb modificar:

/etc/default/grub

Però Deepin pot tenir configuracions addicionals dins:

/etc/default/grub.d/

En el meu cas vaig trobar:

/etc/default/grub.d/11_dde.cfg

El seu contingut era:

# Written by org.deepin.dde.Grub2
DEEPIN_GFXMODE_ADJUSTED=1
DEEPIN_GFXMODE_DETECT=
GRUB_BACKGROUND="/boot/grub/themes/deepin/background.jpg"
GRUB_DEFAULT=0
GRUB_GFXMODE=1920x1080
GRUB_THEME="/boot/grub/themes/deepin/theme.txt"
GRUB_TIMEOUT=1

Aquí estava el problema.

Al fitxer principal tenia:

GRUB_TIMEOUT=7

però Deepin tenia:

GRUB_TIMEOUT=1

Per tant, hi havia dues configuracions diferents.

Per comprovar-ho:

sudo cat /etc/default/grub

i:

sudo cat /etc/default/grub.d/11_dde.cfg

Si Deepin ha posat un altre valor a 11_dde.cfg, aquest fitxer s’ha de tenir en compte.

En el meu cas vaig canviar:

GRUB_TIMEOUT=1

per:

GRUB_TIMEOUT=7

El fitxer va quedar:

# Written by org.deepin.dde.Grub2
DEEPIN_GFXMODE_ADJUSTED=1
DEEPIN_GFXMODE_DETECT=
GRUB_BACKGROUND="/boot/grub/themes/deepin/background.jpg"
GRUB_DEFAULT=0
GRUB_GFXMODE=1920x1080
GRUB_THEME="/boot/grub/themes/deepin/theme.txt"
GRUB_TIMEOUT=7

6. Fer una còpia de seguretat abans de modificar 11_dde.cfg

És recomanable guardar una còpia:

sudo cp /etc/default/grub.d/11_dde.cfg \
/etc/default/grub.d/11_dde.cfg.backup

Així sempre podem tornar enrere.

Per restaurar-la:

sudo cp /etc/default/grub.d/11_dde.cfg.backup \
/etc/default/grub.d/11_dde.cfg

7. Com comprovar d’on surt un GRUB_TIMEOUT

Si no sabem quin fitxer està modificant el temps, podem buscar-ho:

sudo grep -RniE 'timeout|GRUB_TIMEOUT' \
/etc/grub.d /etc/default/grub.d 2>/dev/null

Això permet descobrir configuracions ocultes o addicionals.

En el meu cas va trobar:

/etc/grub.d/00_header
/etc/grub.d/30_os-prober
/etc/grub.d/40_custom
/etc/default/grub.d/11_dde.cfg

8. Compte amb /etc/grub.d/40_custom

També vaig trobar:

/etc/grub.d/40_custom

que contenia:

set timeout=3

El fitxer era:

#!/bin/sh
exec tail -n +3 $0
# This file provides an easy way to add custom menu entries.
# ...
set timeout=3

Aquesta línia no era necessària i podia provocar confusió.

La vaig eliminar:

sudo sed -i '/^set timeout=3$/d' /etc/grub.d/40_custom

Després 40_custom va quedar sense cap ordre set timeout.

És millor no utilitzar 40_custom per controlar el temps general de GRUB. Aquest fitxer està pensat principalment per afegir entrades personalitzades al menú.


9. grub.cfg és el fitxer que GRUB acaba utilitzant

Un error habitual és modificar directament:

/boot/grub/grub.cfg

No és recomanable.

Aquest fitxer es genera a partir de les configuracions anteriors.

El procediment correcte és:

/etc/default/grub
        +
/etc/default/grub.d/
        +
/etc/grub.d/
        ↓
sudo update-grub
        ↓
/boot/grub/grub.cfg

Per tant, després de modificar la configuració cal executar:

sudo update-grub

10. Com comprovar el timeout real generat

Després de:

sudo update-grub

podem comprovar què ha generat GRUB:

sudo grep -n -B4 -A4 \
-E 'set timeout=8|set timeout=7|set timeout=3' \
/boot/grub/grub.cfg

També podem fer una comprovació més senzilla:

sudo grep -E 'set timeout=|set timeout_style=' \
/boot/grub/grub.cfg

Per exemple, una configuració normal de 7 segons pot mostrar:

set timeout_style=menu
set timeout=7

11. Un detall important: timeout=8 no sempre és un error

Si trobem:

if [ "${recordfail}" = 1 ] ; then
    set timeout=8
else
    set timeout=7
fi

no significa necessàriament que la configuració estigui malament.

Simplement significa que:

recordfail=1 → 8 segons
recordfail=0 → 7 segons

En el meu cas, inicialment tenia:

GRUB_RECORDFAIL_TIMEOUT=8

i per això GRUB generava el 8.

Si volem sempre 7 segons:

GRUB_RECORDFAIL_TIMEOUT=7

12. Configuració final recomanada

Per al meu cas, amb dos Deepin i Windows, una configuració clara és:

/etc/default/grub

GRUB_DEFAULT=0
GRUB_TIMEOUT=7
GRUB_TIMEOUT_STYLE=menu
GRUB_RECORDFAIL_TIMEOUT=7

/etc/default/grub.d/11_dde.cfg

Mantenir les configuracions gràfiques de Deepin i:

GRUB_DEFAULT=0
GRUB_TIMEOUT=7

Per exemple:

# Written by org.deepin.dde.Grub2
DEEPIN_GFXMODE_ADJUSTED=1
DEEPIN_GFXMODE_DETECT=
GRUB_BACKGROUND="/boot/grub/themes/deepin/background.jpg"
GRUB_DEFAULT=0
GRUB_GFXMODE=1920x1080
GRUB_THEME="/boot/grub/themes/deepin/theme.txt"
GRUB_TIMEOUT=7

/etc/grub.d/40_custom

No posar-hi:

set timeout=...

si no tenim un motiu específic per fer-ho.


13. Procediment ràpid per canviar el temps

Si volem canviar el temps a 10 segons, per exemple:

sudo nano /etc/default/grub

Canviar:

GRUB_TIMEOUT=7

per:

GRUB_TIMEOUT=10

I, si existeix el mateix paràmetre a Deepin:

sudo nano /etc/default/grub.d/11_dde.cfg

posar també:

GRUB_TIMEOUT=10

Finalment:

sudo update-grub

I comprovar:

sudo grep -E 'set timeout=|set timeout_style=' \
/boot/grub/grub.cfg

14. Resum de la meva incidència

El problema que tenia era una combinació de configuracions.

Jo havia posat:

/etc/default/grub

GRUB_TIMEOUT=7

però Deepin tenia:

/etc/default/grub.d/11_dde.cfg

GRUB_TIMEOUT=1

A més, havia quedat una ordre:

/etc/grub.d/40_custom

set timeout=3

I també existia:

GRUB_RECORDFAIL_TIMEOUT=8

que explicava el set timeout=8 que apareixia al grub.cfg quan GRUB detectava recordfail.

La solució va ser:

  1. Posar GRUB_TIMEOUT=7 també a 11_dde.cfg.
  2. Eliminar el set timeout=3 de 40_custom.
  3. Posar GRUB_RECORDFAIL_TIMEOUT=7.
  4. Executar sudo update-grub.
  5. Comprovar el resultat a /boot/grub/grub.cfg.

El resultat és una configuració coherent amb:

MENÚ GRUB VISIBLE
       ↓
7 segons
       ↓
┌───────────────────────────────┐
│ Deepin 25 Community  (sda6)  │ ← per defecte
│ Deepin 25          (sda5)    │
│ Windows             (sda3)   │
└───────────────────────────────┘

Això permet tenir diversos sistemes instal·lats i escollir fàcilment quin volem arrencar.

Si vols, també et puc preparar una segona versió molt més curta, tipus “xuleta de butxaca”, amb només les comandes imprescindibles per tenir-la al costat del PC.