Bon je vois qu'il y a des clients, donc je vais essayer d'être clair dans mes explications...
Au boot Grub2 se base sur le contenu de '/boot/grub/grub/cfg' pour créer son menu et lancer l'OS choisi.
Mais ce fichier est re-crée à chaque m-a-j et donc toute modification perso est perdue.
La commande
sudo grub-mkconfig -o /boot/grub/grub.cfg
permet de re-créer le fichiers avec les nouvelles options.
Ces options sont contenues dans '/etc/default/grub' dont voici un exemple :
Tout ce qui est contenu ici n'est jamais altéré par une mise à jour
# If you change this file, run 'update-grub' afterwards to update
# /boot/grub/grub.cfg.
GRUB_DEFAULT=saved
#GRUB_HIDDEN_TIMEOUT=0
GRUB_HIDDEN_TIMEOUT_QUIET=true
GRUB_TIMEOUT="4"
GRUB_DISTRIBUTOR=`lsb_release -i -s 2> /dev/null || echo Debian`
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"
GRUB_CMDLINE_LINUX=""
# Uncomment to disable graphical terminal (grub-pc only)
#GRUB_TERMINAL=console
# The resolution used on graphical terminal
# note that you can use only modes which your graphic card supports via VBE
# you can see them in real GRUB with the command `vbeinfo'
#GRUB_GFXMODE=640x480
# Uncomment if you don't want GRUB to pass "root=UUID=xxx" parameter to Linux
#GRUB_DISABLE_LINUX_UUID=true
# Uncomment to disable generation of recovery mode menu entrys
#GRUB_DISABLE_LINUX_RECOVERY="true"
Les variables les plus importante sont :
GRUB_DEFAULT : c'est ce qui définie la ligne du menu qui sera sélectionnée par défaut, normalement il est égal à '0' (première ligne), mais vous pouvez mettre '5', '12' ou comme ici 'saved' ce qui sélectionnera le dernier OS lancé.
GRUB_TIMEOUT : c'est le temps en seconde d'attente avant que Grub2 lance automatiquement l'OS sélectionné, si vous mettez '0', il attendra jusqu'à la fin du monde...
GRUB_GFXMODE : si comme ici la ligne est commentée '#', le mode graphique sera par défaut de 640x480, mais vous pouvez décommenter la ligne et fixer votre propre mode '1024x768', '1280x1024', etc...
Les autre variables peuvent rester en standard.
Passons maintenant aux fichiers de scriptes, ils sont contenus dans le répertoire '/etc/grub.d' et on un nom commençant par deux chiffres.
Ces chiffres fixent leur ordre d'exécution lors de la création du 'grub.cfg'.
En standard, il existe seulement ces fichiers là :
00_header
05_debian_theme
10_linux
20_memtest86+
30_os-prober
40_custom
Seuls les fichiers 10_linux, 20_memtest86+ et 30_os-prober sont généralement touchés par les mises à jour de Grub2.
Le 00_header ne contient rien de bien intéressant pour la customisation.
Par contre, 05_debian_theme lui est très important en ce qui concerne le mode graphique, l'image de fond, les polices de caractères, etc, etc...
Voilà un extrait de ce qu'il contient à l'origine :
# check for usable backgrounds
use_bg=false
if [ "$GRUB_TERMINAL_OUTPUT" = "gfxterm" ] ; then
for i in {/boot/grub,/usr/share/images/desktop-base}/moreblue-orbit-grub.{png,tga} ; do
if is_path_readable_by_grub $i ; then
bg=$i
case ${bg} in
*.png) reader=png ;;
*.tga) reader=tga ;;
*.jpg|*.jpeg) reader=jpeg ;;
esac
if test -e /boot/grub/${reader}.mod ; then
echo "Found Debian background: `basename ${bg}`" >&2
use_bg=true
break
fi
fi
done
fi
# set the background if possible
if ${use_bg} ; then
prepare_grub_to_access_device `${grub_probe} --target=device ${bg}`
cat << EOF
insmod ${reader}
if background_image `make_system_path_relative_to_its_root ${bg}` ; then
set color_normal=black/black
set color_highlight=magenta/black
else
EOF
fi
Pour les non-initié, c'est un peu charabiantesque, mais pas de panique il n'y a que 3 groupes de lignes importantes.
La ligne commençant par 'for' lance une recherche de l'image de fond dans les répertoires précisés entre les accolades ayant pour nom 'moreblue-orbit-blue' et comme extension soit 'png', soit 'tga'.
je l'ai remplacé par ça :
for i in /boot/grub/menu-image.{png,tga,jpg,jpeg} ; do
De ce fait, je place dans '/boot/grub' (avec sudo) une image png, tga, jpg ou jpeg fait-maison que je renome en 'menu-image.xxx' et si je veux la changer j'en mets une autre sans rien toucher au 'grub.cfg'.
Attention, votre image doit avoir la même taille que celle qui est fixée par GRUB_GFXMODE.
Et après, il y a les lignes qui chargent le 'reader' en fonction de l'extension du fichier image.
Elles fixent le nom du module qui est dans '/boot/grub' que Grub2 va charger pour pouvoir afficher l'image (png.mod, tga.mod, jpeg.mod, etc, etc...)
Certains futés verront tout de suite, qu'il existe un module nommé 'video.mod'...(en test)
Enfin les lignes commençant par 'set color_....', elles définissent les couleurs du texte et de la surbrillance du menu.
Il n'y a que 8 couleurs disponibles (white, blue, magenta, cyan, yellow, red, green et black) pour le fond et on y en rajoute 8 autres ( light-gray, light-magenta, dark-gray, light-blue, light-red, light-cyan, light-green, brown) pour les caractères.
Maintenant, parlons de l'ordre des scriptes...
Il existe des trous dans la numérotation des scriptes afin de pouvoir intercaler des scriptes persos (eh oui).
Sur mon PC j'ai une partition Win-XP qui peut booter en mode MS-DOS (je sais c'est dépassé), j'ai donc rajouté un scripte dans '/etc/grub.d' qui s'exécute à la fin et me rajoute une option perso "MS-DOS".
Pour cela, je l'ai appelé '98_perso'.
#!/bin/sh
exec tail -n +3 $0
menuentry "MS-DOS" {
saved_entry=${chosen}
save_env saved_entry
insmod fat
set root=(hd0,1)
search --no-floppy --fs-uuid --set 48c4-0af3
chainloader /bootsect.w98
}
Mais si je l'avais appelé '09_perso', l'option aurait été placée avant Ubuntu et si je l'avais appelé '21_perso', elle serait placée entre Ubuntu et les autres OS.
Evidement ces scriptes persos ne seront jamais affectés par une mise à jour puisque ils sont numérotés autrement que les scriptes standards.
Bon je pense avoir été complet (oui, oui, ça va les chevilles) mais si il y a d'autres questions je veux bien aller fouiner pour y répondre.
A+