lunes, 30 de marzo de 2026

Grub personalizado, Debian 13 - Trixie

Se que existe el paquete grub-customizer para personalizar el gestor de arranque Grub desde una interfaz gráfica. Pero yo prefiero hacer la configuración manualmente.

 

GRUB Debian 13 - personalizado por UsuarioDebian

 

Aconsejo no modificar el archivo: /etc/default/grub para realizar nuestras personalización del grub. Debido a que en una futura actualización de grub, este realice cambios en el fichero original, que previamente hemos modificado nosotros. El sistema nos avisa que existen cambios por defecto en la actualización de dicho fichero, entonces nos pregunta: ¿quieres conservar el archivo actual o quieres la configuración por defecto de dicho paquete?. Si respondemos erróneamente o nos equivocamos, pues nos tocará volver a modificar el archivo original, para dejarlo según nuestros gustos, necesidades o preferencias.

Para evitar que grub vuelva a su configuración por defecto, en lugar de modificar el archivo: /etc/default/grub, nos vamos a crear un nuevo archivo en: /etc/defatult/grub.d y le llamaremos como mas nos interese (Te aconsejo que comience por un numero, mas el guión bajo o signo de subrayado, más un nombre, y tiene que tener la extensión .cfg), por ejemplo: 10_mis_ajustes.cfg y dentro de dicho archivo le ponemos las opciones que nos interesen configurar, cada una en una linea distinta:


GRUB_DISABLE_OS_PROBER=false
GRUB_GFXMODE=640x480
GRUB_TIMEOUT=10
GRUB_BACKGROUND="/boot/grub/themes/mi_fondo.png"

De este modo evitamos modificar el archivo original y que una actualización reescriba dicho archivo.

Para finalizar ejecutamos nuevamente el comando:

sudo update-grub

 

 NOTA MUY IMPORTANTE:  Si hay la misma variable definida en varios lineas y/o en varios ficheros ( /etc/default/grub ó /etc/default/grub.d/10_mis_ajustes.cfg ), la última asignación leída, es la que prevalece (el orden de lectura puede depender de la implementación; normalmente es: primero se lee: /etc/default/grub luego los ficheros personalizados que se encuentran en: /etc/defaukt/grub.d en orden numérico y alfabético).

 

Algunas opciones de: /etc/default/grub

Este archivo define valores por defecto que grub-mkconfig/grub.cfg usa para generar el menú GRUB. A continuación expongo un listado de opciones, con su propósito, formato y ejemplos de uso.

 

GRUB por defecto

 

  • GRUB_DISABLE_OS_PROBER 

    • Propósito: Activa la detección y añadido automático de otros sistemas operativos (os-prober) como Windows, Ubuntu.... Se necesita tener instalar el paquete: os-prober

    • Valores: true/false.

    • Nota: útil para seguridad o si provoca entradas duplicadas.

    • Ejemplo:

      GRUB_DISABLE_OS_PROBER=false

       
      GRUB_DISABLE_OSPROBER=false


  • GRUB_GFXMODE 

    • Propósito: Resolución gráfica que usará GRUB en el menú.

    • Formato: resolución o "auto", p. ej. "1024x768" o "auto".

    • Ejemplo:

      GRUB_GFXMODE=800x600

       

      GRUB_GFXMODE=800x600

        

  • GRUB_DEFAULT
    • Propósito: Entrada por defecto que GRUB arrancará.

    • Formato: índice, comienza por el 0 (0, 1, …) o subíndice (1>1, 1>2 ...), nombre exacto de la entrada entre comillas, o "saved". Enlace (clic aquí) a un manual mas detallado

    • Ejemplos:

      GRUB_DEFAULT=0 → primera entrada.

      GRUB_DEFAULT=2>1 → tercera entrada (Submenú) primera entrada  

      GRUB_DEFAULT="Advanced options for Debian GNU/Linux>Debian GNU/Linux, with Linux 6.12.74+deb13+1-amd64" → arranca entrada por nombre.

      GRUB_DEFAULT=saved junto con GRUB_SAVEDEFAULT=true → recuerda última selección. 

       

      GRUB_DEFAULT=0
       
      GRUB_DEFAULT=4>2

  • GRUB_TIMEOUT

    • Propósito: Segundos que GRUB muestra el menú antes de arrancar la entrada por defecto.

    • Formato: segundos enteros (5, 10, 30...). -1 mantiene el menú indefinidamente.

    • Ejemplos:

      GRUB_TIMEOUT=30

      GRUB_TIMEOUT=-1

       

      GRUB_TIMEOUT=30

  • GRUB_TIMEOUT_STYLE

    • Propósito: Estilo de tiempo de espera.

    • Valores: "menu" (muestra menú), "hidden" (oculta menú y espera), "countdown" (muestra cuenta atrás).

    • Ejemplo:

      GRUB_TIMEOUT_STYLE=menu 

       

      GRUB_TIMEOUT_STYLE=hidden

      GRUB_TIMEOUT_STYLE=countdown

      GRUB_TIMEOUT=30


  • GRUB_TIMEOUT_RECOVERY

    • Propósito: (en algunas distribuciones) segundos de timeout para entradas de recuperación.

    • Formato: segundos enteros (5, 10, 30...). No siempre presente. 

      GRUB_TIMEOUT_RECOVERY=30 

       

  • GRUB_DISTRIBUTOR

    • Propósito: Nombre que GRUB usará para la entrada de la distribución.

    • Formato: cadena. Por defecto suele obtenerse dinámicamente (ej. lsb_release).

    • Ejemplo:

      GRUB_DISTRIBUTOR=`( . /etc/os-release && echo ${NAME} )` 

       

  • GRUB_CMDLINE_LINUX

    • Propósito: Parámetros kernel que se añaden a todas las entradas normales (no recovery).

    • Formato: cadena con parámetros separados por espacios.

    • Ejemplos:

      GRUB_CMDLINE_LINUX="quiet splash"

      GRUB_CMDLINE_LINUX="nomodeset acpi=off"

       

  • GRUB_CMDLINE_LINUX_DEFAULT

    • Propósito: Parámetros kernel añadidos solo a la entrada por defecto normal (y que suelen ser adecuados para arranque normal, no recovery).

    • Formato: cadena.

    • Ejemplo:

      GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"

       

  • GRUB_SAVEDEFAULT

    • Propósito: Si se usa con GRUB_DEFAULT=saved, controla si GRUB guarda la última entrada seleccionada.

    • Valores: true/false.

    • Ejemplo:

      GRUB_SAVEDEFAULT=true 

       

      GRUB_SAVEDEFAULT=true

  • GRUB_DISABLE_RECOVERY

    • Propósito: Si se establece a true, evita generar entradas de recuperación en grub.cfg.

    • Valores: true/false.

    • Ejemplo:

      GRUB_DISABLE_RECOVERY=true 

       

      GRUB_DISABLE_RECOVERY=true

  • GRUB_TERMINAL

    • Propósito: Define terminales de salida para GRUB (texto, gfxterm, serial).

    • Valores: por ejemplo: console   o gfxterm o serial.

    • Ejemplo:

      GRUB_TERMINAL=console

       

  • GRUB_GFXPAYLOAD_LINUX

    • Propósito: Controla la resolución que el kernel usará después de que GRUB transfiera control.

    • Valores: "keep" para mantener la resolución de GRUB, o una resolución concreta.

    • Ejemplo:

      GRUB_GFXPAYLOAD_LINUX=keep 

       

  • GRUB_FONT

    • Propósito: Ruta a una fuente TTF/GRUB para usar en el menú (mejora legibilidad en altas resoluciones).

    • Ejemplo:

      GRUB_FONT=/boot/grub/fonts/unicode.pf2

       

  • GRUB_BACKGROUND

    • Propósito: Imagen de fondo para el menú GRUB.

    • Formato: ruta a imagen (PNG/JPEG/TGA) soportada por GRUB.

    • Ejemplo:

      GRUB_BACKGROUND="/boot/grub/themes/mi_fondo.png"

       

      GRUB_BACKGROUND="/boot/grub/themes/usuariodebian.png"

  • GRUB_THEME

    • Propósito: Ruta a un tema completo para GRUB.

    • Formato: ruta al archivo theme.txt del tema.

    • Ejemplo: 

      GRUB_THEME="/boot/grub/themes/mytheme/theme.txt"

       

  • GRUB_DISABLE_LINUX_UUID

    • Propósito: Forzar uso de dispositivos (e.g., /dev/sda1) en lugar de UUID en entradas kernel.

    • Valores: true/false.

    • Ejemplo:

      GRUB_DISABLE_LINUX_UUID=true 

       

  •  GRUB_DISABLE_SUBMENU

    • Propósito: Evita que se generen submenús (p. ej. "Advanced options") agrupando versiones de kernel.

    • Valores: true/false.

    • Ejemplo:

      GRUB_DISABLE_SUBMENU=true

       

      GRUB_DISABLE_SUBMENU=true

       

 

 Muy Importante 

  • Tras editar /etc/default/grub hay que regenerar grub.cfg con:update-grub

  • No todas las variables existen en todas las distribuciones; algunas son específicas de Debian/Ubuntu y derivadas. Si una variable no está en tu archivo, puedes añadirla siguiendo el formato VAR=valor.

  • Valores booleanos suelen usarse como true/false o y/n según distribuciones; seguir estilo local.


Como añadir entradas personalizadas

 

Vamos añadir 4 entradas en el GRUB que permitan: "Separar entradas", "Reiniciar el ordenador" y "Apagar el ordenador".

 

GRUB Personalizado por UsuarioDebian

 

Vamos a crear 4 nuevos archivos personalizados en: /etc/grub.d/ con los siguientes nombres:

 

15_separador_debian

30_separador_os-prober

35_separador_uefi

50_reiniciar_apagar

 

y por ultimo volvemos a generar grub.cfg

 

 OBSERVACIÓN:  Para crear cada archivo podemos seleccionar y copiar el contenido que se encuentra entre las dobles líneas discontinuas de color azul (==============)

 

15_separador_debian 

===================================
sudo tee /etc/grub.d/15_separador_debian > /dev/null <<'EOF'
#!/bin/sh
exec tail -n +3 "$0"
menuentry "=====================================================================" {
savedefault
}
EOF

===================================
 

Y ahora hacemos ejecutable dicho archivo, con el siguiente comando:

 
sudo chmod +x /etc/grub.d/15_separador_debian

 
 

30_separador_os-prober 

===================================
sudo tee /etc/grub.d/30_separador_os-prober > /dev/null <<'EOF'
#!/bin/sh
exec tail -n +3 "$0"
menuentry "=====================================================================" {
savedefault
}
EOF

===================================
 

Y ahora hacemos ejecutable dicho archivo, con el siguiente comando:

sudo chmod +x /etc/grub.d/30_separador_os-prober

 

35_separador_uefi

===================================
sudo tee /etc/grub.d/35_separador_uefi > /dev/null <<'EOF'
#!/bin/sh
exec tail -n +3 "$0"
menuentry "=====================================================================" {
savedefault
}
EOF

===================================
 

Y ahora hacemos ejecutable dicho archivo, con el siguiente comando:


sudo chmod +x /etc/grub.d/35_separador_uefi 

 

50_reiniciar_apagar

===================================
sudo tee /etc/grub.d/50_reiniciar_apagar > /dev/null <<'EOF'
#!/bin/sh
exec tail -n +3 "$0"
menuentry "Reiniciar el ordenador" {
reboot
}
menuentry "Apagar el ordenador" {
halt
}
EOF

===================================

 

Y ahora hacemos ejecutable dicho archivo, con el siguiente comando:

 

sudo chmod +x /etc/grub.d/50_reiniciar_apagar
 

Por ultimo actualizamos el grub, usando el siguiente comando:

 

sudo update-grub

 

 Observación muy importante 

  • Las instrucciones usan las órdenes internas de GRUB: reboot y halt. En la mayoría de configuraciones funcionarán, pero en algunos sistemas con UEFI/secure boot o ciertas combinaciones de firmware pueden no funcionar.

  • Si quieres que aparezcan en una posición concreta del menú, elige el prefijo numérico y el nombre apropiado, (los archivos en /etc/default/grub.d/ se ordenan por numero y orden alfabético).

     

 

GRUB: Tecla Esc, Cursores (flechas), Intro (Enter)
 

Tecla Esc = Retroceder / Cancelar
 

- Sale de la pantalla o diálogo actual y vuelve al nivel de menú anterior (incluido el menú principal).

- Si se pulsa repetidamente, sigue retrocediendo hasta el menú principal.

- En el menú principal, Esc puede llevar al minimal grub (pantalla reducida o modo diagnóstico) según la configuración o tema.

- Si Plymouth está activo, Esc muestra el arranque detallado (mensajes del kernel y servicios). Pulsar Esc otra vez vuelve al splash gráfico (Plymouth). 



Timeout / cuenta atrás
 

 - Si hay una cuenta atrás para arrancar la entrada por defecto, pulsar Esc, cancela y muestra el menú de selección.



Teclas de dirección
 

- Teclas de cursores (flechas) Arriba / Abajo / Izquierda / Derecha: al navegar con cualquiera de las flechas, se detiene la cuenta atrás para el arranque automático.

- Derecha sobre una entrada: en muchas configuraciones, pulsar → (derecha) selecciona/arranca inmediatamente la entrada destacada (comportamiento que puede variar según versiones/temas).

- Enter: arranca la entrada seleccionada.


Consola de GRUB
 

- La tecla: C, abre la consola de comandos (grub>). La tecla: Esc, abre la consola cuando estamos posicionado en el menú principal




 Actualizar/Activar la configuración 

 

Después de realizar alguna modificación en el archivo: /etc/default/grub o en: /etc/default/grub.d/10_mis_ajustes.cfg. tenemos que usar uno de estos dos comandos para que los cambios surtan efectos:

 

sudo update-grub

# update-grub




No hay comentarios: