Customiser GRUB-PC dans Ubuntu 10.04

J’ai la chance de pouvoir écrire assez régulièrement pour le magazine Linux Identity (j’en avais parlé dans un précédent billet d’ailleurs). Ce qui est sympathique, c’est que l’on peut reproduire le contenu des articles que l’on écrit au bout d’un certain temps. Voici donc ma prose sur la customisation de Grub-PC sur Ubuntu 10.04 (mais je pense que ça doit pouvoir s’adapter aux versions ultérieures d’Ubuntu, à toute distribution à base de Debian et peut être même aux autres.)

De GRUB à GRUB-PC

Afin de démarrer, votre ordinateur a besoin de savoir quels sont les systèmes d’exploitation présents, afin de pouvoir choisir celui qui doit être lancé et mettre en marche la procédure de boot.
Dans les versions d’Ubuntu antérieures à la 9.10, GRUB Legacy (GRUB étant l’acronyme de GRand Unified Bootloader) était le programme installé par défaut qui était en charge de cette tâche. Il peut amorcer des systèmes compatibles avec la norme POSIX (GNU/Linux, *BSD, Apple Mac OS, etc.) et possède également la capacité d’enchainer vers un autre amorceur pour les systèmes non compatibles avec la norme POSIX (comme Windows).

Cependant, le projet a choisi de faire évoluer GRUB vers une nouvelle version et un nouveau programme a été écrit, qui a donné naissance à GRUB 2, renommé ensuite GRUB-PC.

Présentation de GRUB-PC
Tout comme GRUB Legacy, GRUB-PC va vous permettre de choisir les entrées qui seront disponibles lors du démarrage de votre ordinateur. Il est également compatible avec les OS de la norme POSIX et ceux qui ne le sont pas. Aucun souci donc pour faire cohabiter par exemple, un ou plusieurs systèmes d’exploitation GNU Linux, une version de Microsoft Windows et une de Mac OS dans le menu.

Grub au démarrage

Cette nouvelle version ayant été réécrite totalement, elle est devenue beaucoup plus puissante. La contrepartie de cette puissance étant une complexité de paramétrage accrue et le nombre d’options disponibles.

Les avantages et inconvénients de GRUB-PC vs GRUB

La majorité des paramétrages de GRUB Legacy tenait dans un seul fichier, « /boot/grub/menu.lst ».

Un simple éditeur de texte en mode super utilisateur suffisait pour paramétrer l’ordre des OS au démarrage, leur nombre, le timeout, …

Aujourd’hui ce n’est plus forcément vrai. En effet, GRUB-PC est plus complexe que son ancêtre. Il est composé de plusieurs fichiers et de scripts répartis dans plusieurs répertoires et la simple édition de ces fichiers n’apportera pas forcément la modification escomptée.

L’avantage de cette complexité étant notamment que le programme possède désormais une interface graphique, est nettement plus modulable et s’adapte à un plus grand nombre d’architectures matérielles.

Afin de s’y retrouver par la suite, voyons quels sont les fichiers utilisés par GRUB-PC

Liste des fichiers utilisés pour la configuration

Voici une brève présentation des fichiers que nous allons rencontrer dans les paragraphes suivants.

  • /boot/grub/grub.cfg : C’est le fichier lu au démarrage de l’ordinateur, remplaçant donc menu.lst sur grub-legacy. En revanche, comme il est généré automatiquement par update-grub, il ne doit donc pas être modifié manuellement, sous peine de voir ses modifications écrasées lors de la prochaine mise à jour.
  • /etc/default/grub : il gère les valeurs par défaut de grub (notamment le délai de lancement, la résolution d’affichage, splash/quiet)
  • les fichiers du dossier /etc/grub.d/

Ce sont avec ces six scripts que nous allons le plus agir, car ils vont nous permettre de modifier les choix et l’ordre des systèmes d’exploitation dans le menu.

  • 00_header : contient le script gérant les options définies dans /etc/default/grub.
  • 05_debian_theme : gère les couleurs du menu et le fond d’écran éventuel.
  • 10_linux : contient le script spécifique au chargement d’un type de noyau. Ce script génère les entrées pour le système par défaut du grub.cfg.
  • 20_memtest86+ : lance le test de mémoire « memtest ».
  • 30_os-prober : contient le script de recherche des autres systèmes installés.
  • 40_custom : configuration perso. C’est là qu’on pourra paramétrer manuellement le lancement des systèmes d’exploitation.

La notion la plus importante à connaitre à propos de ces fichiers est qu’ils seront traités dans l’ordre numérique (00, puis 05, 10, 20 …). Cela aura son importance plus tard.

Modifier l’ordre des différents OS dans le menu

Si vous avez sur votre disque dur Windows et Ubuntu qui cohabitent, il peut arriver que vous souhaitiez modifier l’ordre d’apparition dans le menu des différents systèmes d’exploitation. En effet par défaut, ce sont les entrées Ubuntu qui apparaissent en premier, puis un séparateur et enfin les autres systèmes d’exploitation. Il est plus pratique, si comme moi vous n’utilisez finalement que deux entrées, d’avoir tout sous la main en descendant ou en montant juste d’une entrée avec les touches fléchées du clavier.

La solution la plus simple pour y arriver est de faire remonter les entrées Windows en premier dans la liste. Il suffit de renommer le fichier « 30_OS-prober » en lui donnant un nom qui commence par un nombre compris entre 06 et 09. Ce qui revient à faire traiter ce script entre « 05_debian » et « 10_linux », puisque nous avons vu précédemment que les fichiers sont traités dans l’ordre qui correspond à leur nom.

On se place donc dans le dossier contenant les scripts en tapant dans un terminal :

cd /etc/grub.d

Puis on renomme le fichier « 30_OS-prober » en « 07_OS-prober » pour le faire remonter dans l’ordre numérique des scripts, en tapant la commande suivante :

sudo mv 30_os-prober 07_os-prober

Si le fait de renommer le fichier original vous donne des sueurs froides, vous pouvez également l’enregistrer sous un autre nom, ce qui vous évitera de perdre votre fichier original, on ne sait jamais. En revanche, vous aurez deux fois les entrées Windows (au début du menu et à la fin). Pour ce faire, il suffit de saisir la commande cp (pour copy) au lieu de mv :

sudo cp 30_os-prober 07_os-prober

Liste des scripts grub modifiés

Rien ne vous empêche de supprimer « 30_OS-prober » par la suite quand vous aurez validé que la manipulation fonctionne.

Enfin, on met à jour le GRUB. C’est une manipulation à faire à chaque fois que vous modifiez quoi que ce soit dans les fichiers, car comme je l’ai indiqué plus haut, vos modifications ne seront pas prises en compte si vous ne le faites pas.

Donc toujours dans un terminal, on tape :

sudo update-grub

Et voilà vous devriez maintenant avoir les entrées Windows au dessus de celles d’Ubuntu.

ligne de commande sudo update-grub suite et fin

Supprimer des entrées de noyau dans le menu de démarrage

On continue dans le nettoyage du menu de démarrage avec la suppression des entrées des noyaux superflus. Si vous avez installé votre Ubuntu depuis un certains temps, vous avez certainement plusieurs noyaux qui ont été installé au fil des mises à jour. Le problème, c’est que chacun de ces noyaux apparait dans le menu, l’alourdissant d’autant. Nous n’allons donc garder que le dernier. Cette opération sera bien sûr à renouveler lorsqu’un nouveau noyau sera installé, mais seulement une fois que vous aurez constaté qu’il n’apporte pas de bug à votre installation.

La solution la plus simple, et qui a le mérite de se faire graphiquement, est de cacher les noyaux superflus en les déplaçant manuellement vers un dossier que l’on créera à cette occasion.

On ouvre tout d’abord le dossier « /boot » avec les privilèges de super utilisateur dans nautilus. A vous d’adapter si vous êtes sous Kubuntu ou Xubuntu avec votre gestionnaire de fichier favori.

gksudo nautilus /boot

On crée ensuite un dossier. Dans un espace vide, on clique droit de la souris et on choisit « Créer un dossier », que l’on nommera « NoyauxCachés ». On peut aussi utiliser le raccourci clavier Ctrl + Shift + N.

On sélectionne ensuite à la souris (ou en maintenant la touche Ctrl du clavier enfoncé entre chaque clic) tous les fichiers désignant un ancien noyau et on les fait glisser dans le dossier « NoyauxCachés ». Dans l’exemple ci-dessous ce sont tous les fichiers dont le nom contient la version du noyau 2.6.32-21.

Noyaux à supprimer

Attention cependant à ne pas cacher le noyau sur lequel votre système s’est lancé, car cela pourra poser des problèmes lors du prochain redémarrage. Soyez donc bien sûr des noyaux que vous déplacez.

Pour finir, on met à jour GRUB :

sudo update-grub

Maintenant, vous devriez voir que le ou les noyaux que vous avez déplacés n’apparaissent plus lors de la création du fichier grub.cfg

ligne commande sudo update-grub

Supprimer les entrées Memtest86 au boot

De la même manière que nous avons caché les noyaux superflus, les entrées Memtest peuvent être cachées également. Pour cela, il suffit de déplacer le script « 20_memtest86+ » dans un dossier que l’on va créer.

Pour changer, on va créer le dossier « memtest » dans le dossier dans /etc/grub.d/ en ligne de commande :

sudo mkdir /etc/grub.d/memtest

Puis, on déplace graphiquement le script « 20_memtest86+ » dans le dossier créé dans nautilus (toujours avec les droits de super utilisateur) :

gksudo nautilus /etc/grub.d
Fichiers dans grub.d

Et on n’oublie surtout pas de mettre à jour GRUB :

sudo update-grub
Ligne de commande sudo update-grub suite

Modifier le système d’exploitation sur lequel démarrer par défaut

Par défaut, c’est la première entrée du menu de démarrage qui est sélectionnée et qui provoquera le démarrage du système. Or, on peut avoir envie parfois de ne pas démarrer par défaut sur cette première ligne (par exemple pour démarrer sur Windows si on partage son PC avec d’autres

personnes). Pour modifier ce paramétrage, il faut tout d’abord comprendre la règle de comptage des entrées par GRUB, car c’est le numéro de la ligne qui va déterminer le système qui sera lancé.

Si on se base sur mon menu de démarrage avant que nous ayons appliqué toutes nos modifications, ça ressemble à cela :

Ubuntu, avec Linux 2.6.32-23-generic
Ubuntu, avec Linux 2.6.32-23-generic(mode de récupération)
Ubuntu, avec Linux 2.6.32-21-generic
Ubuntu, avec Linux 2.6.32-21-generic(mode de récupération)
Memory Test, (memtest86+)
Memory Test, (memtest86+, serial console 115200)
Microsoft Windows XP  Professionnel (on /dev/sda3)

Voici le même menu avec les numéros correspondants sur la gauche :

0	Ubuntu, avec Linux 2.6.32-23-generic
1	Ubuntu, avec Linux 2.6.32-23-generic(mode de récupération)
2	Ubuntu, avec Linux 2.6.32-21-generic
3	Ubuntu, avec Linux 2.6.32-21-generic(mode de récupération)
4	Memory Test, (memtest86+)
5	Memory Test, (memtest86+, serial console 115200)
6	Microsoft Windows XP  Professionnel (on /dev/sda3)

L’entrée de Windows XP correspondra donc au N° 6 car on commence à compter à partir de zéro.

Le plus simple pour choisir la ligne et donc le système d’exploitation sur lequel l’ordinateur sera positionné par défaut dans le menu est de saisir la ligne de commande ci-dessous, où « x » est bien sûr le nombre que l’on a trouvé à l’étape précédente,

sudo grub-set-default x

Cependant, sur certaines configurations, cette commande ne fonctionne pas. Il faut alors aller modifier manuellement le fichier /etc/default/grub, en modifiant la variable GRUB_DEFAULT= avec le nombre que l’on a trouvé précédemment.

On peut aussi choisir de fonctionner autrement et décider de mettre par défaut le système qui a été choisi lors du dernier démarrage. Dans ce cas la variable GRUB_DEFAULT= sera suivi de « saved » (sans guillemet), Pour que cela fonctionne, il faudra rajouter une ligne en dessous de celle que l’on vient de modifier avec l’entrée GRUB_SAVEDEFAULT=true.

Changement du fond d’écran du menu

La couleur noire du menu de démarrage est assez tristounette, il faut bien le dire. Nous allons donc ajouter une image en « fond d’écran » pour l’égayer.

On modifie tout d’abord le fichier /etc/default/grub. On l’ouvre dans un éditeur de texte et on décommente la ligne suivante (en enlevant le # qui se trouve devant) :

# GRUB_GFXMODE=640×480

On va fixer une résolution de 800×600 qui devrait convenir à la plupart des PC, en modifiant la ligne comme suit :

GRUB_GFXMODE=800x600x32,800×600

Le plus important dans la taille à donner est de conserver le ratio de votre écran (4:3, 16:10, …).

On renomme l’image en « 00_image_de_fond.jpg » puis on la copie dans le dossier /boot/grub/ avec les droits de super utilisateur.

Maintenant, nous allons modifier le script « 05_debian_theme » qui, comme on l’a vu précédemment, gère toute les customisations graphiques du menu. On l’ouvre avec son éditeur de texte :

sudo gedit /etc/grub.d/05_debian_theme

On modifie les lignes 10, 11 et 12 comme suit et on sauvegarde :

WALLPAPER= »00_image_de_fond.jpg »

COLOR_NORMAL= »white/black »

<COLOR_HIGHLIGHT= »blue/magenta »

En résumé, on a fait les choses suivantes :

  • donné le nom du fichier qui sera notre fond d’écran (WALLPAPER)
  • défini une couleur pour le texte (COLOR_NORMAL) : blanc sur fond transparent (le noir en deuxième correspond à transparent)
  • défini une couleur pour le texte sélectionné (COLOR_HIGHLIGHT) : bleu sur fond en magenta.

Et on n’oublie pas de mettre à jour :

sudo update-grub

Une fois toutes ces modifications effectuées, vous devriez avoir un magnifique menu de démarrage mis en forme comme vous le souhaitez et avec une belle image de fond. Ce ne sont pas des modifications compliquées et elles ne prennent pas des heures à mettre en place. Mais le résultat permet d’obtenir une meilleure ergonomie et un look largement amélioré.

GRUB2

10 réflexions sur « Customiser GRUB-PC dans Ubuntu 10.04 »

  1. Bonjour,

    Je viens de découvrir votre blog par le biais de ce billet et ai été immédiatement séduit. Enfin un endroit où on peut configurer son GRUB-PC tout en apprenant le secret de la sauce tomate pour pizza ! Moi qui essaye depuis 2 ans, toutes ces tomates torturées pour rien… il suffisait donc de laisser cuire. Argh.

    Allez hop, direct dans mes flux RSS sur le PC du boulot, la productivité va encore en prendre un coup… tant pis ^o^

    Cela fait un petit moment que je nage dans les méandres de GRUB-PC, peinant à retrouver mes marques. Vos explications synthétiques m’ont permis d’y mettre bon ordre, ça va expérimenter dur dans les prochains temps, après avoir réalisé une copie de sauvegarde des fichiers quand même.
    Question subsidiaire tout de même : GRUB 1er permettait d’affecter facilement un mot de passe pour éviter au premier venu de pouvoir tripoter les options de démarrage. Je n’ai rien trouvé de *compréhensible* par ma petite tête à ce sujet pour GRUB-PC qui est, comme vous le notez fort justement, sensiblement plus complexe; avez-vous l’une ou l’autre piste à conseiller ?

    Enthousias’tement,
    Okram

  2. Parmi les modif un peu plus « hardues » (genre modification des scripts en eux même), il y a une option particulièrement utile pour modifier la résolution des consoles TTY, c’est GFX_PAYLOAD.

    Ce fil de discussion (http://forums.debian.net/viewtopic.php?f=5&t=41881) explique bien la manip, en particulier le dernier post qui a parfaitement fonctionné sur ma debian squeeze. Peut être la situation est-elle différente pour Ubuntu sur ce point.

  3. @ Supajohn : ouh là … C’est du sérieux. On est au delà de mes compétences ici.
    Mais quel est l’intérêt de modifier la résolution des consoles en TTY (pas de troll, juste pour la culture perso) ?

  4. Alors, perso, j’ai toujours pas compris ce qu’est devenu GRUB2. Enfin, c’est un sujet sur lequel je suis assez sensible, ayant perdu un nombre d’heures incalculable à cause de ce programme. (Je suis bricoleur, et il m’arrive souvent de tout briser sur mon PC). Avoir un bootloader simple, efficace et fiable est pour moi une chose hyper importante, et un gain de temps non négligeable quand j’ai tout cassé. Surtout quand on a un seul PC, qui est eeePC.

    Alors, ce que je ne comprends pas, c’est pourquoi ils nous ont sortis un système de script configurant lui même un autre script (grub.cfg)? Ces premiers sont complètement ilisible pour l’utilisateur lambda, et nécéssite un effort de plus pour l’utilisateur avancé. De plus, ils ne sont pas portable. Le OS prober me semble complètement inutile, il n’a jamais fonctionné chez moi, que ce soit sur Arch, Debian ou Ubuntu. De plus la doc de GRUB est juste nulle (incomplète, difficile de trouver les options dispo dans le grub.cfg), mais bon, mettons ça à la jeunesse du programme, et que ce soit encore en version beta.

    Dans cette histoire, j’ai vraiment eu l’impression qu’on a tout complexifié pour rien. Si je me souviens bien, ces même scripts sont documentés dans la doc de GRUB, alors que l’utilisation de ces scripts devraient être du ressort de la distribution (IMHO). Et puis j’explique même pas la galère pour gérer un GRUB à partir de plusieurs distribution à la fois…

    Enfin, bon, j’ai trouvé ‘ma’ solution parfaite ( et c’est pour ça que j’aime le monde du libre <3 ): le stand-alone GRUB. Une partoche (100mo) dédiée en sda1, un boot sur le MBR, et un grub.cfg que l'on configure à la main. Comme ça, on sait exactement ce qu'il se passe dans GRUB, pas de surprises, et pas de scripts bizarres. Les désavantages sont tout de même qu'il faut bien connaitre ses OS, savoir les lancer à la main, et éventuellement savoir les mettre à jour en cas de mise à jour de noyau.

    Mais bon, je suis pas un utilisateur de ouf, et encore pas mal de choses m'échappent. Mais je voudrais savoir qu'est ce qui a poussé les développeurs à nous faire un truc aussi compliqué?

    L'idéal pour moi serait une distrib dédiée à grub, juste utilisée pour sa configuration. Bon, voila, si quelqu'un peut m'expliquer 🙂

  5. Hey,
    Après un bail, je retombe ici, et parmi les petits derniers (articles), je tombe sur celui-ci… J’avais essayé Grub 1.98 il y a quelques semaines avec succès (sans trop y toucher), et je me demandais si tu avais réussi à y mettre une interface graphique.
    Ça paraît bête mais ça m’intéresse, et si tu as une photo, ce serait excellent de l’ajouter à cet article !

  6. Wouaah, merci ! Va falloir que je me penche sur la tâche dans les quelques jours à venir. Ça n’est qu’un écran affiché pendant 10 secondes, mais bon, personnaliser ce genre de choses est souvent amusant.

  7. @ Lovelive : et dangereux … garde un liveCD à portée de main si jamais un truc ne se passe pas comme prévu.
    Il y a un programme qui est censé faire ces manip avec une interface graphique (là je ne me souviens plus du nom, BURG je crois), mais chez moi, il n’a fait que mettre le souk …

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *