Il existe des applications graphiques pour paramétrer Grub. Ici on exposera l'intervention directe sur les fichiers de paramètres de Grub.
Nous n'intervenons pas directement sur un fichier de configuration mais sur des fichiers de paramètres qui sont pris en compte uniquement lors du lancement d'une commande de mise à jour (update-grub).
Les paramétrages sont situés uniquement dans le fichier /etc/default/grub et dans le dossier /etc/grub.d/.
Dans ce fichier, on peut activer ou désactiver un paramètre en le commentant / décommentant avec le caractère dièse « # »(croisillon).
Ce dossier contient tous les scripts qui seront utilisés (en respectant l'ordre de numérotation) par update-grub pour créer le fichier grub.cfg.
Nous n'utiliserons pour nos paramétrages que les fichiers 'custom'.
De même, aucun script de configuration présent dans /etc/grub.d/ ne doit être effacé.
Par exemple, pour ne pas détecter les autres OS, il est préférable d'utiliser le paramètre GRUB_DISABLE_OS_PROBER="true" de /etc/default/grub.
Pour tous nos paramétrages, on éditera, avec les droits d’administration, quasi exclusivement les fichiers /etc/default/grub et /etc/grub.d/40_custom.
Une fois toutes les modifications opérées, on lancera la commande de mise à jour :
sudo update-grub
Pour afficher ou non le menu Grub, on utilisera les paramètres GRUB_HIDDEN_TIMEOUT et GRUB_HIDDEN_TIMEOUT_QUIET du fichier /etc/default/grub.
Caché sans attendre le choix
Remarque : avec GRUB_HIDDEN_TIMEOUT_QUIET=true, impossible de mettre en pause le démarrage en tapotant la touche Shift lors de l'affichage du menu.
Pour Ubuntu 16.04 :
GRUB_HIDDEN_TIMEOUT=0 GRUB_HIDDEN_TIMEOUT_QUIET=true GRUB_TIMEOUT=0 # dépendance: lorsque GRUB_HIDDEN_TIMEOUT est actif, ce paramètre doit être défini à 0
À partir d'Ubuntu 18.04 :
GRUB_TIMEOUT_STYLE=hidden GRUB_TIMEOUT=0
Caché avec un décompte de 5 secondes pendant lequel on peut appuyer sur les touches Échap ou majuscule (Shift) pour afficher le menu. Sans action de notre part, le choix par défaut est lancé.
Remarque : puisque GRUB_HIDDEN_TIMEOUT_QUIET=false, alors on peux mettre en pause le démarrage en tapotant la touche Shift pour afficher le menu.
Pour Ubuntu 16.04 :
GRUB_HIDDEN_TIMEOUT=5 GRUB_HIDDEN_TIMEOUT_QUIET=false GRUB_TIMEOUT=0 # dépendance: lorsque GRUB_HIDDEN_TIMEOUT est actif, ce paramètre doit être défini à 0
À partir d'Ubuntu 18.04 :
GRUB_TIMEOUT_STYLE=hidden GRUB_TIMEOUT=5
Affiché directement avec un décompte de 10s.
Pour Ubuntu 16.04 :
#GRUB_HIDDEN_TIMEOUT=0 GRUB_HIDDEN_TIMEOUT_QUIET=true GRUB_TIMEOUT=10 # ne pas laisser à zéro si vous voulez avoir le temps de sélectionner éventuellement un autre système.
À partir d'Ubuntu 18.04 :
GRUB_TIMEOUT_STYLE=menu GRUB_TIMEOUT=10
Par défaut, la ligne du menu grub concernant la distribution sur laquelle vous êtes affiche « Ubuntu GNU/Linux ». Que vous soyez sur une variante (Xubuntu, Lubuntu, Kubuntu,..) ou sur un dérivé (Linux Mint,..), l'intitulé reste le même car il dépend de la commande 'lsb_release'.
Voici comment on peut influencer ce comportement en modifiant le paramètre GRUB_DISTRIBUTOR du fichier /etc/default/grub selon les possibilités suivantes :
GRUB_DISTRIBUTOR=`lsb_release -is 2> /dev/null || echo Debian` # donne : Ubuntu GNU/Linux GRUB_DISTRIBUTOR=`lsb_release -ds 2> /dev/null || echo Debian` # donne : Ubuntu 16.04.1 LTS GNU/Linux GRUB_DISTRIBUTOR=`echo -n $(lsb_release -cds 2> /dev/null || echo Debian)` # donne : Ubuntu 16.04.1 LTS xenial GNU/Linux GRUB_DISTRIBUTOR=`echo -n TITRE PERSONNALISÉ $(lsb_release -rs 2> /dev/null || echo Debian)` # donne : TITRE PERSONNALISÉ 16.04 GNU/Linux GRUB_DISTRIBUTOR=`echo -n TITRE PERSONNALISÉ` # donne : TITRE PERSONNALISÉ GNU/Linux
On utilisera ici les paramètres GRUB_DEFAULT et GRUB_TIMEOUT du fichier /etc/default/grub
Pour changer le système d'exploitation sur lequel grub démarre par défaut on paramètrera GRUB_DEFAULT= au choix avec :
La temporisation avant un lancement automatique se définit avec le paramètre GRUB_TIMEOUT :
Si on ne souhaite plus voir dans les menus Memtest, on changera le statut du script pour qu'il ne soit plus exécutable à la prochaine commande de mise à jour :
sudo chmod -x /etc/grub.d/20_memtest86+
Pour le réactiver, on mettra '+x' au lieu de '-x' avec la même commande.
On peut demander à grub d'éviter de scanner certaines partitions par leur UUID (sudo blkid pour avoir leur liste). On utilisera le paramètre GRUB_OS_PROBER_SKIP_LIST du fichier /etc/default/grub :
GRUB_OS_PROBER_SKIP_LIST="3a43c682-cb67-47e6-83cf-e647a72abb5d@/dev/sda3","1397cb72-27f1-4e01-acaf-86495341c71d@/dev/sda4"
Attention : Il semble que la bonne syntaxe soit :
GRUB_OS_PROBER_SKIP_LIST="3a43c682-cb67-47e6-83cf-e647a72abb5d@/dev/sda3 1397cb72-27f1-4e01-acaf-86495341c71d@/dev/sda4"
On peut renommer les scripts utilisés par 'update-grub' dans le dossier /etc/grub.d/ pour en changer l'ordre, par exemple :
On peut copier les entrées des menus dans 40_custom (depuis /boot/grub/grub.cfg) dans l'ordre qu'on souhaite et désactiver la détection automatique en mettant le paramètre GRUB_DISABLE_OS_PROBER="true" dans /etc/default/grub. On peut renommer 41_custom en 07_custom pour qu'il se place avant 10_linux (on y mettra le menu qu'on veut en premier).
Quand on édite un menu, c'est galère de retrouver la ponctuation, les parenthèses ou encore le signe égal sur un clavier qwerty. La solution est de paramétrer la disposition azerty :
sudo mkdir /boot/grub/layouts sudo grub-kbdcomp -o /boot/grub/layouts/fr.gkb fr
# Clavier fr insmod keylayouts keymap fr
GRUB_DEFAULT=saved GRUB_SAVEDEFAULT=true
Ceci est un ajout du 15/08/2017 dont le contenu demande encore à être confirmé. Lorsqu'on dispose de plusieurs OS ubuntu et qu'on passe souvent de l'un à l'autre et que les noyaux se mettent à jour, on arrive rapidement à avoir un énorme fichier boot.cfg. Afin de l'épurer, il existe un outil
L'idéal étant de ne pas arriver à cette situation. Il existe quelques palliatifs pour retarder cet état de fait. Pour tous les OS qui ne sont pas l'OS dirigeant (souvent la version LTS):
IL faut demander à ne faire aucune recherche d'OS complémentaires via la commande
<code>sudo chmod -x /etc/grub.d/30_os-prober</code>
il est preferable de modifier le fichier "/etc/default/grub " et d' y inserer l ' option apropriée :
GRUB_DISABLE_OS_PROBER=true
Il faut aussi ne pas ré-écraser le démarrage du boot prioritaire. Ce qui se fait à chaque fois qu'un nouveau noyau arrive. Je n'ai pas vu d'option dans ce fichier de paramétrage pour le faire. En attendant:
sudo chmod -x /usr/sbin/grub-install
Tous ces contenus sont ajoutés à /etc/grub.d/40_custom
sudo cat /boot/grub/grub.cfg | grep -A20 'menuentry .*Windows' | awk '/^###/{exit} {print}'
chainloader vous permettra de lancer un autre gestionnaire d’amorçage présent sur le premier secteur des partitions concernées : Windows, Lilo…. Ça ne fonctionne pas toujours bien donc on préfère souvent une autre alternative. Voici quelques exemples.
Remarque : l’entête du fichier 40_custom doit comporter ces lignes :
#!/bin/sh exec tail -n +3 $0
menuentry "Windows 10" { insmod ntfs search --set=root --label WINDOWS_10 --hint hd0,msdos2 ntldr /bootmgr } menuentry "Windows 10b" { insmod ntfs search --set=root --label WINDOWS_10b --hint hd0,msdos2 ntldr /bootmgr } menuentry "Windows 7" { insmod ntfs set root='(hd0,3)' search --no-floppy --fs-uuid --set 94E84428E8440B46 chainloader +1 } menuentry "Windows 10 en mode bios legacy" { insmod ntfs set root='(hd1,msdos2)' chainloader +1 } # Windows en bios legacy, disque MBR : menuentry 'Windows 11 (on /dev/sdb1)' --class windows --class os $menuentry_id_option 'osprober-chain-062ADE8A0C7254A8' { insmod part_msdos insmod ntfs set root='hd1,msdos1' if [ x$feature_platform_search_hint = xy ]; then search --no-floppy --fs-uuid --set=root --hint-bios=hd1,msdos1 --hint-efi=hd1,msdos1 --hint-baremetal=ahci1,msdos1 062ADE8A0C7254A8 else search --no-floppy --fs-uuid --set=root 062ADE8A0C7254A8 fi parttool ${root} hidden- drivemap -s (hd0) ${root} chainloader +1 } # Windows en EFI sur disque GPT : menuentry 'Windows Boot Manager (on /dev/sda1)' --class windows --class os $menuentry_id_option 'osprober-efi-3333-3333' { insmod part_gpt insmod fat set root='hd0,gpt1' if [ x$feature_platform_search_hint = xy ]; then search --no-floppy --fs-uuid --set=root --hint-bios=hd0,gpt1 --hint-efi=hd0,gpt1 --hint-baremetal=ahci0,gpt1 3333-3333 else search --no-floppy --fs-uuid --set=root 3333-3333 fi chainloader /EFI/Microsoft/Boot/bootmgfw.efi } menuentry 'Bootloader Lilo sur sda7' { set root=(hd0,7) chainloader +1 } menuentry "Menu grub2 sur sda8" { set root=(hd0,8) configfile /boot/grub/grub.cfg } menuentry "Menu grub-legacy sur sda6" { set root=(hd0,6) legacy_configfile /boot/grub/menu.lst }
Pour ajouter des lignes vides, de sous-titres,.. on procédera ainsi avec juste un 'true' pour qu'elles soient prises en compte :
## ligne vide menuentry " " { true } ## ligne de sous-titre menuentry "------------------- Dérivés Ubuntu -------------------" { true }
Dans les options de boot d’un Linux, on trouve parfois le paramètre « vga=788 » avec une définition d’écran donné. Consultez ce tableau pour pouvoir ajouter un 'set gfxpayload' équivalent dans votre 'menuentry'.
Donc, par exemple, au lieu de vga=788 dans la ligne 'linux', on ajoutera au-dessus une ligne set gfxpayload=800x600 à la place.
Dans ce tutoriel vous aurez des exemples de menus « prêts à l'emploi » pour lancer les livecd Ubuntu ou autres depuis leur fichier iso :
menuentry 'Arrêt du système' { halt } menuentry 'Redémarrage du système' { reboot }
Comme toujours, après tous ces paramétrages, on lancera la commande de mise à jour :
sudo update-grub
Quand on est sur le menu grub, on appuie sur « c ». On est ainsi en ligne de commande. On lancera alors la commande :
vbeinfo
Toutes les résolutions supportées par grub s'affichent. La plus haute est la dernière sur la liste. On la note (par exemple: 1280x1024x32)
Sur le fichier /etc/default/grub, on modifiera le paramètre GRUB_GFXMODE qui définit la résolution d'affichage pour Grub ainsi (sans « # » devant) :
GRUB_GFXMODE=1280x1024,1024x768x32
La deuxième valeur sera prise en compte si la première n’est pas supportée par votre matériel. Le x32 est la profondeur de codage des couleurs en bits.
Si le démarrage se bloque sur un écran noir ou sur l'image de fond, appuyez sur 'c' pour passer en ligne de commande et saisissez, par exemple :
set gfxpayload=1024x768
On fera la même chose qu'au paragraphe précédent pour les résolutions après Grub avec les paramètres GRUB_GFXPAYLOAD et GRUB_GFXPAYLOAD_LINUX.
Si vous avez Gimp d'installé ou au moins ImageMagick, vous pourrez lancer cette commande de conversion en l'adaptant à vos besoins :
convert ~/Images/"image exemple.jpg" -resize 1280x1024! -depth 16 ~/Bureau/"00_image_de_fond.jpg" sudo mv ~/Bureau/"00_image_de_fond.jpg" /boot/grub/.
Pour l'utiliser, on ajoutera le paramètre GRUB_BACKGROUND au fichier /etc/default/grub
GRUB_BACKGROUND="/boot/grub/00_image_de_fond.jpg"
Lancer ensuite la commande de mise à jour :
sudo update-grub
Si le fond d'écran n'est pas détecté lors de cette mise à jour, c'est qu'il n'est pas dans un format compatible pour Grub.
Pour définir les couleurs utilisées par grub, on ajoutera au fichier /etc/grub.d/40_custom les lignes suivantes :
set color_normal=light-gray/black # définit les couleurs de texte/fond d'écran autour du cadre de menu set menu_color_normal=light-gray/black # définit les couleurs de texte/fond d'écran dans le cadre de menu set menu_color_highlight=yellow/light-blue # définit les couleurs de texte/surbrillance pour la ligne de menu sélectionnée
Les couleurs à notre disposition sont : black, blue, brown, cyan, dark-gray, green, light-cyan, light-blue, light-green, light-gray, light-magenta, light-red, magenta, red, white, yellow. 'black' devient une couleur transparente si on a une image de fond.
Lancer ensuite la commande de mise à jour :
sudo update-grub
On peut tester sa compatibilité en la définissant comme fond d'écran (→ voir plus haut) et en regardant si elle est détectée par la commande de mise à jour.
On peut installer le theme inclus dans les dépots : grub2-themes-ubuntu-mate. On en trouve aussi ici (en cherchant bien 'themes Grub2' et non pas seulement 'gfx')
Par défaut, ils sont installés dans le dossier /boot/grub/themes.
Dans le fichier /etc/default/grub, on renseignera le paramètre GRUB_THEME ainsi :
GRUB_THEME="/boot/grub/themes/ubuntu-mate/theme.txt"
Il s'agit du chemin vers le fichier de configuration. Il peut très bien porter un autre nom (par exemple theme-fr.txt sur un autre theme).
Lancer ensuite la commande de mise à jour :
sudo update-grub
On peut protéger Grub avec un mot de passe, pour quelques entrées ou tout le menu.
Exécutez cette commande pour créer le mot de passe chiffré :
grub-mkpasswd-pbkdf2
Copier le résultat obtenu après les mots « password is » tel que
grub.pbkdf2.sha512.10000.095DB0192324CCACC86DB81455C7E45B266FA9570CAFE8FC413A4C756F6666A35CD907EB73BE95D2C469CAA9C8FEB0F278365738B1FD7AB96EDFA15D0442D8D7.2EC836CCB165599D63799071B2069D058E5F42FCEC6804ACCD2C7EA6CF722380F1FF4E5191D7B0385152482E829F3FBB44AA626D59CE609092B8150E610C502B
Editez ce fichier
sudo nano /etc/grub.d/00_header
et ajoutez ce code tout à la fin du fichier, en remplaçant david par l’identifiant souhaité et le mot de passe chiffré. Par exemple :
cat << EOF set superusers="david" password_pbkdf2 david grub.pbkdf2.sha512.10000.095DB0192324CCACC86DB81455C7E45B266FA9570CAFE8FC413A4C756F6666A35CD907EB73BE95D2C469CAA9C8FEB0F278365738B1FD7AB96EDFA15D0442D8D7.2EC836CCB165599D63799071B2069D058E5F42FCEC6804ACCD2C7EA6CF722380F1FF4E5191D7B0385152482E829F3FBB44AA626D59CE609092B8150E610C502B EOF
Enregistrez avec Ctrl+O, fermez le fichier avec Ctrl+X, mettez à jour Grub et redémarrez
sudo update-grub
Ne modifiez pas le fichier `/etc/grub.d/00_header`, mais éditez le fichier `/etc/grub.d/40_custom`. Il faut donc créer ce fichier manuellement, regardez les rubriques dédiées ci-dessus, sur cette page.
sudo nano /etc/grub.d/40_custom
et ajoutez juste après l’entête des commentaires, en remplaçant david par l’identifiant souhaité et le mot de passe chiffré. En ajoutant –users et l’identifiant dans menuentry. Par exemple :
set superusers="david" password_pbkdf2 david grub.pbkdf2.sha512.10000.095DB0192324CCACC86DB81455C7E45B266FA9570CAFE8FC413A4C756F6666A35CD907EB73BE95D2C469CAA9C8FEB0F278365738B1FD7AB96EDFA15D0442D8D7.2EC836CCB165599D63799071B2069D058E5F42FCEC6804ACCD2C7EA6CF722380F1FF4E5191D7B0385152482E829F3FBB44AA626D59CE609092B8150E610C502B # Windows en EFI sur disque GPT : menuentry 'Windows Boot Manager (on /dev/sda1)' --class windows --class os $menuentry_id_option 'osprober-efi-3333-3333' –users david { insmod part_gpt insmod fat set root='hd0,gpt1' if [ x$feature_platform_search_hint = xy ]; then search --no-floppy --fs-uuid --set=root --hint-bios=hd0,gpt1 --hint-efi=hd0,gpt1 --hint-baremetal=ahci0,gpt1 3333-3333 else search --no-floppy --fs-uuid --set=root 3333-3333 fi chainloader /EFI/Microsoft/Boot/bootmgfw.efi }
enregistrez avec Ctrl+O, fermez le fichier avec Ctrl+X, mettez à jour Grub et redémarrez
sudo update-grub
Contributeurs : Frombenny (rédaction de la page), Theozzfancometh, f.x0, albanmartel, perco, floxyz51.