Archives quotidiennes :

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