Editar el menú de arranque GRUB2


GRUB2 es el entorno gráfico que nos permite elegir el sistema operativo al que queremos acceder cuando encendemos nuestro ordenador. Desde hace ya mucho tiempo, esta es la versión que la mayoría de distros Linux nos instalan. En este post voy a explicar paso a paso como configurar y editar GRUB2, editando varios archivos de configuración. Si te interesa, sigue leyendo.


Vamos a ver 2 formas de editar GRUB2. Primero voy a explicar la forma más geek, editando archivos del sistema. Si eso te da miedo, o no te atreves a tocar los archivos del sistema, puedes estar tranquil@. Hay una forma gráfica mediante un programa llamado Grub Customizer.


1. Editando archivos del sistema. Archivo de configuración de GRUB2

Por si no lo sabes, vamos a trabajar con archivos VITALES para GRUB y su sistema. Por tanto, recomiendo hacer siempre una copia de seguridad de cada archivo que editemos. Así, te evitas sustos.
Hay varios archivos a editar, según lo que queramos cambiar de nuestro GRUB. El primero de ellos, es el archivo de configuración de GRUB2. Lo abrimos en un editor de texto (nano, gedit, kate...):

sudo nano /etc/default/grub

Voy a explicar que es cada línea de este archivo, y como podemos editarlas para cambiar la configuración de nuestro GRUB.

GRUB_DEFAULT= 0 --> Con la opción 0 hacemos que se seleccione por defecto la primera entrada (sistema), con la opción 1, la segunda... así sucesivamente. Si en cambio ponemos saved, hacemos que siempre se seleccione el último sistema al que se accedió.

#GRUB_HIDDEN_TIMEOUT=0 --> Si descomentamos esta línea (quitamos la almohadilla o hash, #), oculta el menú de entradas del GRUB. Si ponemos un tiempo mas alto lo que hace es esconder el menú, pero esperarse un tiempo hasta continuar. Si en cambio comentamos la línea (añadimos un #), mostrará el menú de entradas del GRUB.

GRUB_HIDDEN_MENU_QUIET=true/false --> Si está a "true" oculta la cuenta atrás , mientras que si está a "false" muestra la cuenta atrás (aparecerá en la zona inferior de la pantalla).

GRUB_TIMEOUT=90 -->  Esta línea indica el tiempo de espera (en segundos) hasta iniciar el sistema que tenemos como DEFAULT.

GRUB_CMDLINE_LINUX_DEFAULT="quiet splash acpi_osi=Linux" --> En esta línea, la opción quiet agrupa las entradas iguales, con splash, tras elegir el sistema, se muestra la imagen de carga en vez de los mensajes del kernel (la típica pantalla negra con letras blancas donde se muestra el proceso de encendido y comprobación de las particiones de los discos duros). La tercera opción, acpi_osi=Linux puede arreglar varios problemas de hardware en nuestro sistema Linux, como por ejemplo el brillo, tal y como explico en este otro post.

#GRUB_GFXMODE=640x480 --> Esta línea permite cambiar la resolución del GRUB. Si se descomenta la línea, se aplica la resolución que pongamos en la línea. Para saber las resoluciones soportadas por nuestro GRUB, debemos poner vbeinfo en la línea de comandos del GRUB (pulsar c para acceder a ella). Eso sí, solo se pueden utilizar resoluciones permitidas por nuestra tarjeta gráfica.

#GRUB_DISABLE_LINUX_RECOVERY="true" --> Al descomentar esta línea, no aparezcerá la opción de recovery mode de los sistemas Linux en el menú.

NOTA: El resto de líneas que no he comentado, o no deben modificarse, o no las he modificado nunca. De acuerdo a como escribí en la página "Acerca de..." (en el panel superior del blog), no voy a explicar algo que no he probado, ya que estaría incumpliendo con una de las cosas que en esa página comento: todo lo escrito en este blog ha sido probado por mí (o al menos, tengo conocimiento de lo que hablo gracias a amigos o compañeros).

Una vez que sabemos que es cada línea, y siempre que modifiquemos alguna de ellas, es importante que actualicemos nuestro GRUB de acuerdo con su archivo de configuración:

sudo update-grub && sudo update-grub2

Si hacemos algún cambio en cuanto al número de entradas, el nombre de estas o alguna cosa más relacionada con las entradas del menú, podemos probar como aparecerían en nuestro GRUB con el siguiente comando (recuérdalo o, si eres humano, anótalo en alguna parte, ya que lo puedes necesitar bastante a lo largo de esta guía):

sudo cat /boot/grub/grub.cfg | grep "menuentry" | cut -d "" -f 2

Cambiar nombre de la distribución Linux (en mi caso, Ubuntu)

Para modificar el nombre con el que nuestra distribución aparece en el menú de entradas del GRUB, vamos a modificar el archivo /etc/grub.d/10_linux , como siempre con nuestro editor preferido (gedit, nano...):

sudo nano /etc/grub.d/10_linux

En él, buscamos las siguientes líneas (según la distribución pueden variar un poco, sin diferenciarse demasiado):


Las líneas que nos interesan son:

title="$(gettext_quoted "%s, with Linux %s (recovery mode)")" 
title="$(gettext_quoted "%s, with Linux %s")" 

Editando estas líneas, podemos cambiar lo que aparece tras el nombre de nuestra distribución (tanto recovery mode como el normal). Por ejemplo, con estas líneas así, GRUB mostraría Ubuntu como se puede ver en la primera imagen del post, la de la cabecera. Podemos por ejemplo, cambiar el mensaje ", with Linux " por otro que nos guste más, o hacer desaparecer el número de la versión de kernel de nuestra distribución eliminando el segundo "%s". Si quitamos el primer "%s", no saldría el nombre de nuestra distribución (Ubuntu en mi caso).

printf "menuentry '${title}' ${CLASS} {\n" "${os}" "${version}"

Hace falta además editar esta línea si por ejemplo eliminamos esos "%s", eliminando las variables "${os}" o "${version}" (comillas incluidas), según hayamos eliminado la primera o la segunda aparición de "%s" en las líneas anteriores.

Una vez terminado de editar, guardamos y cerramos como siempre, y actualizamos la configuración del GRUB:

sudo update-grub && sudo update-grub2


Cambiar nombre de otro SO (por ejemplo Windows)

Vamos a editar el archivo /etc/grub.d/30_os-prober . Como siempre, lo abrimos con nuestro editor favorito, y buscamos las siguientes líneas (si queremos cambiar el nombre de Windows, estarán sobre la línea 180 o así), que identifican la entrada del SO en el GRUB:



Sobre ellas, más arriba, veremos las siguientes líneas, que corresponden con el nombre de la entrada:



Aquí, buscamos:


 if [ -z "${LONGNAME}" ] ; then
    LONGNAME="${LABEL}"
  fi

(líneas 158-160, al menos en mi caso y en la entrada de Windows) y lo cambiamos por lo siguiente:


if [ "${LONGNAME}" = "Nombre literal que aparece en el GRUB actual" ] ; then
   LONGNAME="Nuevo nombre"
elif [ -z "${LONGNAME}" ] ; then
   LONGNAME="${LABEL}"
fi


Así, por ejemplo, si aparece "Windows 7 (loader) (on sda3)", y lo quieres cambiar por "Windows 7", lo dejamos así:




Como siempre, guardamos los cambios y actualizamos la configuración del GRUB.
Si además quieres evitar que aparezca el "(on sdaX)" detrás de estos sistemas, solo hay que eliminar "(on ${DEVICE})" de la línea menuentry del SO en cuestión (3 imágenes más arriba, primera de esta sub-sección).

Si lo que pretendes es simplemente que ese otro SO no aparezca en tu menú del GRUB, basta con eliminar este archivo o cambiarle el nombre, por ejemplo, a 30_os-prober-backup.



Eliminar la entrada del memtest

Esta es una de las cosas más sencillas. Basta con quitarle los permisos de ejecución:

sudo chmod -x /etc/grub.d/20_memtest86+
Y si quieres volver a recuperarlo, solo tienes que cambiar la opción -x por +x en la orden anterior.




Eliminar un kernel de Linux (evitar la entrada "Previous Linux Version")

Siempre que tengas varios kernels de Linux, puedes eliminar los kernels antiguos eliminando (desinstalando) sus respectivos archivos linux-image-X y linux-headers-X. La X es el número de versión. 

Por ejemplo, en mi caso, tengo 2 kernels. Para la versión más nueva, los paquetes serían linux-image-3.2.0-36-generic , linux-headers-3.2.0-36 y  linux-headers-3.2.0-36-generic. Para la versión más antigua, solo hay que cambiar cada 36 por un 23 en los paquetes anteriores. Para eliminar la versión antigua del kernel lo hacemos vía Synaptic o la orden sudo apt-get purge --remove NOMBRE_DE_PAQUETE(S) , en mi caso:

sudo apt-get purge --remove linux-headers-3.2.0-23 linux-headers-3.2.0-23-generic linux-image-3.2.0-23
Esto nos dejaría un único kernel en el sistema. Sin embargo, yo prefiero dejar siempre como mínimo 2 kernels activos en el sistema, por si acaso el kernel más actualizado falla en algún momento, aunque se puede ocultar uno de ellos en el menú de entradas del GRUB, y con esto no nos aparecería la entrada "Previous Linux Version".

Para esto último, simplemente hay que crear una carpeta en /boot y mover a ella los archivos del kernel antiguo:

sudo mkdir /boot/antiguos
sudo mv /boot/vmlinuz-3.2.0-23-generic /boot/antiguos/
sudo mv /boot/initrd.img-3.2.0-23-generic /boot/antiguos/

Una vez terminado el proceso (tanto si has eliminado los kernels como si los has movido a una carpeta), actualiza el archivo de configuración del GRUB.

sudo update-grub && update-grub2

Cambiar la imagen de fondo de GRUB

Esta es una de las partes que más me gusta. A diferencia del menú de arranque de Windows (MBR), en GRUB y GRUB2 (el segundo es el que ocupa el tema de este post) se puede cambiar la imagen de fondo, y poner la que quieras. Las dimensiones de la imagen debe estar dentro de la dimensión que esté configurada en la línea GRUB_GFXMODE, del fichero /etc/default/grub explicado más arriba. Además, la imagen debe estar en formato png o jpg. Otra de las restricciones que he encontrado, es que como nombre, debe tener como nombre desktop-grub.

Una vez tengamos la imagen que queremos, tan solo debemos moverla a la carpeta /boot/grub . Por ejemplo, si tenemos la imagen en la carpeta "Imágenes" de nuestra carpeta personal:

sudo mv ~/Imágenes/desktop-grub.png /boot/grub

Hecho esto, ya tenemos el fondo del menú de entradas del GRUB con un toque más personal.



2. Instalar Grub Customizer

Grub Customizer es un programa que hace lo que he explicado en la sección anterior, pero gráficamente. Permite, entre otras cosas, cambiar el nombre de las entradas, activar o desactivar entradas, eliminar entradas, editarlas... es bastante completo, y para aquellos que le tengan miedo a la terminal o a la edición de archivos del sistema, está bastante bien.
Su instalación es sencilla, solo hay que añadir su repositorio e instalarlo, sin configurar nada.
Primero vamos a añadir el repositorio de su autor, y posteriormente actualizamos los nuestros:

sudo add-apt-repository ppa:danielrichter2007/grub-customizer
sudo apt-get update


Tras terminar, instalamos el programa:

sudo apt-get install grub-customizer

Grub Customizer

Sobra decir que cada vez que hagamos un cambio en la configuración del GRUB, habrá que darle al botón de "Guardar" para que los cambios hagan efecto. Para probar los cambios, siempre podemos acudir a la orden del principio del post, o bien reiniciar nuestro PC.


Con todo esto, Linux nos permite, una vez más, configurar y personalizar nuestro PC a nuestro antojo. En este caso, podemos cambiar el arranque de nuestro sistema de tantas maneras, y con tantas posibilidades, que dudo que haya más de 1 PC con la misma configuración del GRUB.


9 comentarios :

  1. Raúl Mastronardi3 de julio de 2014, 19:17

    Muy bien explicado el tema, lo unico que me quedo una duda acerca del grub timeout, cuanto es el maximo de tiempo que se puede poner? o si existe alguna manera de que quede en la pantalla de grub hasta que elijamos una opción?

    ResponderEliminar
  2. Pues en cuanto al máximo de tiempo, creo que no hay límite. Es un tiempo en segundos, por lo que para lo que preguntas, yo suelo poner un tiempo de "9999999999" segundos (un poco bruto, lo sé, pero funciona jajaja). Un saludo y gracias! ^^

    ResponderEliminar
  3. Muy bueno el tutorial, gracias por el programa Grub Customizer no lo conocía. Saludos

    ResponderEliminar
  4. en teoria debes poner -1 y asi no habra ni cuenta atras ni tiempo máximo, hasta que no lo elijas un SO.

    ResponderEliminar
  5. Uno que pasaba por aquí11 de junio de 2015, 12:01

    Hola, para cambiar el tiempo de espera del arranque, abro terminal y escribo sudo nautilus, luego voy al grub.cfg y lo edito y guardo con el timeout=02, pues tengo arranque dual. El problema es que cuando actualizo el SO vuelve al 10 y tengo que volver a hacerlo una vez al mes o así. Había una opción de proteger el archivo y dejarlo como sólo lectura, pero no la recuerdo y no sé si será la mejor solución. ¿Se te ocurre alguna otra mejor?, gracias y un saludo.

    ResponderEliminar
  6. Uno que pasaba por aquí11 de junio de 2015, 12:06

    Ah, y comparto una instrucción que limpia los kernel menos el último, es útil para liberar espacio, la encontré por ahí, no es mía:

    sudo dpkg -l 'linux-*' | sed '/^ii/!d;/'"$(uname -r | sed "s/\(.*\)-\([^0-9]\+\)/\1/")"'/d;s/^[^ ]* [^ ]* \([^ ]*\).*/\1/;/[0-9]/!d' | xargs sudo apt-get -y purge

    Probada en Ubuntu 15.04 64 y funciona bien

    ResponderEliminar
  7. Buenas! Lo único que se me ocurre es quitar los permisos de escritura a todos los usuarios salvo root, por lo que los permisos del archivo deben ser los siguientes:

    $ ls -l /etc/default/grub
    -rw-r--r-- 1 root root 1541 feb 2 16:47 /etc/default/grub

    Aún así, estos permisos se suponen son los que viene por defecto, y el archivo no debería cambiar. Una duda que me surge es, ¿estás modificando el fichero adecuado? El fichero es /etc/default/grub, y como comentas algo de grub.cfg, puede que no estés editando el archivo correcto.


    Un saludo y gracias por lo que compartes! :D

    ResponderEliminar