Estéticamente editando grub.cfg


10

EDITAR: (para mayor claridad) Estoy buscando cambiar la apariencia del menú de arranque de grub, editando los archivos de configuración (posiblemente pero no necesariamente grub.cfg).

Por lo tanto, cualquier usuario de ubuntu sabe cómo se llena el menú de arranque después de algunas actualizaciones del kernel. En los días de menu.lst, podría ajustar el menú para ocultar las opciones no deseadas pero aún así mantenerlas disponibles.

Por ejemplo, si su menú de grub se ve así:

A
B
C
D

Puede hacer que las opciones C y D sean invisibles insertando una opción vacía entre B y C. De esta manera, las opciones C y D no serían visibles durante el arranque, pero serían visibles si se desplaza hacia abajo en el menú de arranque.

Probar este mismo truco en grub.cfg no condujo a ningún resultado. Entonces, estoy buscando una manera de lograr este mismo resultado con el nuevo menú grub, editando el archivo grub.cfg. Otros ajustes estéticos también son bienvenidos.

Gracias

EDIT2: Si no es posible ocultar las entradas del menú, me gustaría una forma de insertar un separador entre ellas, para que el menú se vea así:

A
B

--Otros--
C
D


¿Desea realizar todos los cambios en grub.cfg ? si está ejecutando update-grub para autogenerarlo, probablemente desee editar los scripts en /etc/grub.d ; visite superuser.com/questions/102692/… para obtener una breve descripción general.
quack quijote

@ ~ quack: eso ayuda un poco y es bastante informativo. Todavía espero una forma de ocultar las entradas del menú, o al menos poner un separador entre ellas.
Malabarba

Entonces, ¿supongo que desinstalar los núcleos antiguos no es una opción?
Bobby

Respuestas:


8

Primero, comprenda cómo Ubuntu configura Grub2.

  • /boot/grub/grub.cfg es el menú Grub2
  • el comando update-grub genera automáticamente ese archivo
  • ... leyendo la configuración predeterminada de / etc / defaults / grub
  • ... y ejecutando shellscripts en /etc/grub.d

Por lo tanto, si no desea editar grub.cfg después de cada actualización del núcleo, debe ajustar los scripts en /etc/grub.d para que sus cambios se apliquen cada vez que se ejecute update-grub .


En segundo lugar, para responder a su primera pregunta directamente, no estoy familiarizado con ningún medio para hacer que las opciones de arranque específicas sean invisibles pero aún accesibles a través del menú Grub. Hay muchas pequeñas cosas sobre Grub1 que no se volvieron a implementar en Grub2, y no me sorprendería si esta fuera una de ellas.

En su lugar, puede hacer que todas las entradas del menú sean invisibles (hasta que esté resaltado) configurando el color de fuente del menú al mismo que el color de fondo. En /etc/grub.d/05_debian_theme , cambie menu_color_normal para que el primer color (fuente) coincida con el segundo color (fondo). Deje menu_color_highlight diferente, para que aparezca la entrada debajo del cursor.

# example from a likely-tweaked Karmic /etc/grub.d/05_debian_theme
set menu_color_normal=white/black
set menu_color_highlight=black/white

# ...to this
set menu_color_normal=black/black
set menu_color_highlight=black/white

Obtener un separador en el menú Grub.

En Grub1 insertarías una nueva entrada como esta. Según recuerdo, necesitabas la declaración raíz para convertirla en una entrada de menú válida; de lo contrario, Grub1 la ignoró.

# separator
title  --------------------
root

Sospecho que Grub2 podría ser similar. Una entrada de menú muy básica se ve así en grub.cfg :

# basic example
menuentry "Memory test (memtest86)" {
        linux   /boot/memtest86+.bin
}

Como "cualquier cosa" en las comillas dobles se muestra como el título, puede falsificar un separador con eso. Al igual que Grub1, Grub2 quiere que la palabra clave de Linux lo trate como una entrada de menú real, así que tenga cuidado de no seleccionarlo accidentalmente.

# a separator!  no, really!
menuentry "....." {
        linux   /boot/memtest86+.bin
}

Desafortunadamente, "cualquier cosa" no significa nada ; mientras estaba probando esto probé una larga cadena de guiones ("----------------") y nunca funcionó. Pero le gusta la cadena corta de puntos que se muestra arriba, por lo que puede usar eso.

.....

Ahora, así es como hacer un separador. Para hacer un grupo y colocarlos donde los desee automáticamente, debe agregarlos a los scripts en /etc/grub.d .

Para este ejemplo, pongamos un separador simple entre las diferentes secciones de grub.cfg . Si observa /etc/grub.d , verá los siguientes scripts:

  • 00_header
  • 05_debian_theme
  • 10_linux - entradas para kernels y recuperación de Ubuntu
  • 20_memtest86 + - entrada para Memtest86 +
  • 30_os-prober - entradas para Windows y otras distribuciones de Linux
  • 40_custom - nada por defecto; entradas especiales de usuario pueden ir aquí

Crearemos un nuevo script, separador y colocaremos lo siguiente en él:

#!/bin/sh
# create a separator menu entry
cat << EOF
menuentry "....." {
  linux /boot/memtest86+.bin
}
EOF

Ahora, mueva ese guión a su lugar para el primer separador y vincúlelo a su lugar para los demás. Los scripts se ejecutan en orden, así que si quieres que el primero venga antes de 10_linux , llámalo 09_separator o algo así.

cd /etc/grub.d

# start the editor, paste in the script above, save, and exit
sudo nano separator

# set executable
sudo chmod +x separator

# rename into the first position
mv separator 09_separator

# link into remaining positions (can also use cp)
ln -s 09_separator 19_separator
ln -s 09_separator 29_separator
# not really necessary since 40_custom is empty by default
ln -s 09_separator 39_separator

Si tiene una entrada específica establecida como predeterminada en / etc / default / grub , es posible que deba actualizarla: Grub2 comienza a contar las entradas del menú en 0, y cada uno de estos "separadores" es una entrada válida, por lo que también cuentan. Si su entrada predeterminada anterior era 0, y ha agregado un separador antes, recuerde cambiar GRUB_DEFAULT a 1

Ahora ejecute update-grub y examine /boot/grub/grub.cfg : debería ver los separadores allí. Si lo hace, reinicie y compruébelo.

....

Si desea colocar separadores en otro lugar, por ejemplo, entre diferentes versiones de kernel, deberá editar 10_linux (u otro script) directamente, y encontrar el lugar apropiado para agregar el separador. Puede usar las líneas del guión anterior; incluya todo excepto la primera línea #! / bin / sh .


Si quieres algo más bonito, usa imágenes o temas de bienvenida de Grub. Necesito darle una lluvia de lluvia sobre esos temas, pero revise los recursos a continuación.


Recursos:

Hay dos grandes guías Grub2 en UbuntuForums que he llegado a conocer y amar:

GNU Grub 2 es otro gran recurso. Tiene un conjunto de secuencias de comandos para ajustar Grub2 de Karmic ( revelación completa: no las he probado ).

La página de formato de tema de Grub Wiki es imprescindible para hackear temas de Grub2.


Wow, gracias por la respuesta. Es una pena ver que algunas características no han llegado a esta versión. Ya había intentado insertar un separador, no funcionó porque lo dejé en blanco entre los corchetes. Todo lo anterior parece estar funcionando. Gracias de nuevo.
Malabarba

@D Connors: sí, ha habido un par de cosas que extraño de Grub1, pero en general creo que Grub2 es una mejora. tiene su propia curva de aprendizaje. Espero que los desarrolladores hayan puesto más esfuerzo en las habilidades gráficas de Grub2 a expensas del menú de texto, pero tal vez eso cambie a medida que se desarrolle el proyecto.
quack quijote

5

El separador puede estar hecho de guiones si su primer carácter es el espacio. Además, no es necesario usar el comando de Linux para la sección de separación, puede usar cualquier comando como este:

menuentry " -----------------------------------------------------------" {
  echo "It is just a separator, select another item!"
}

O incluso "verdadero" para volver en silencio:

menuentry " -----------------------------------------------------------" {
  true
}

0

Si no utiliza los otros núcleos, puede eliminarlos utilizando la interfaz del administrador de paquetes que más le convenga. Esto los elimina automáticamente de grub.cfg


Raramente los uso para solucionar problemas, cuando me equivoco con la instalación actual. Además, los núcleos fueron solo un ejemplo, también tengo otras 3 particiones de arranque que me gustaría ocultar, pero aún las tengo disponibles.
Malabarba

(para evitar confusiones. Cuando dije "ocultar" no quise decir "ocultar la partición", solo quise decir "ocultar la entrada respetuosa del sistema operativo del menú de arranque")
Malabarba
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.