Édition esthétique grub.cfg

10

EDIT: (pour plus de clarté) je cherche à changer l'apparence du menu de démarrage de grub, en éditant les fichiers de configuration (éventuellement mais pas nécessairement grub.cfg).

Ainsi, tout utilisateur ubuntu sait à quel point le menu de démarrage est rempli après quelques mises à niveau du noyau. À l'époque de menu.lst, vous pouviez modifier le menu pour masquer les options indésirables, mais les garder disponibles.

Par exemple, si votre menu grub ressemblait à ceci:

A
B
C
D

Vous pouvez rendre les options C et D invisibles en insérant une option vide entre B et C. De cette façon, les options C et D ne seraient pas visibles au démarrage, mais deviendraient visibles si vous les descendiez dans le menu de démarrage.

Essayer cette même astuce dans grub.cfg n'a conduit à aucun résultat. Donc, je cherche un moyen d'obtenir ce même résultat avec le nouveau menu grub, en éditant le fichier grub.cfg. D'autres ajustements esthétiques sont également les bienvenus.

Merci

EDIT2: S'il n'est pas possible de masquer les entrées de menu, j'aimerais pouvoir insérer un séparateur entre elles, de sorte que le menu ressemblerait à ceci:

A
B

--Autres--
C
D

Malabarba
la source
voulez-vous apporter toutes les modifications à grub.cfg ? si vous exécutez update-grub pour le générer automatiquement, vous voudrez probablement éditer les scripts sous /etc/grub.d ; voir superuser.com/questions/102692/… pour un bref aperçu.
Quack Quichote
@ ~ quack: ça aide un peu et c'est assez instructif. J'espère toujours un moyen de masquer les entrées de menu, ou au moins de mettre un séparateur entre elles.
Malabarba
Donc, je suppose que désinstaller les anciens noyaux n'est pas une option?
Bobby

Réponses:

8

Tout d'abord, comprenez comment Ubuntu configure Grub2.

  • /boot/grub/grub.cfg est le menu Grub2
  • la commande update-grub génère automatiquement ce fichier
  • ... en lisant les paramètres par défaut dans / etc / defaults / grub
  • ... et en cours d' exécution dans shellscripts /etc/grub.d

Donc, si vous ne voulez pas modifier grub.cfg après chaque mise à jour du noyau, vous voulez modifier les scripts dans /etc/grub.d afin que vos modifications soient appliquées à chaque fois que update-grub est exécuté.


Deuxièmement, pour répondre directement à votre première question, je ne connais aucun moyen de rendre invisibles des options de démarrage spécifiques mais toujours accessibles via le menu Grub. Il y a beaucoup de petites choses à propos de Grub1 qui n'ont pas été réimplémentées dans Grub2, et cela ne m'étonnerait pas si c'était l'une d'entre elles.

Au lieu de cela, vous pouvez rendre toutes les entrées de menu invisibles (jusqu'à ce qu'elles soient mises en surbrillance) en définissant la couleur de police du menu sur la même couleur que l'arrière-plan. Dans /etc/grub.d/05_debian_theme , changez menu_color_normal pour que la première couleur (police) corresponde à la deuxième couleur (arrière-plan). Laissez menu_color_highlight différent, de sorte que l'entrée sous le curseur s'affiche.

# example from a likely-tweaked Karmic /etc/grub.d/05_debian_theme
set menu_color_normal=white/black
set menu_color_highlight=black/white

# ...to this
set menu_color_normal=black/black
set menu_color_highlight=black/white

Obtenir un séparateur dans le menu Grub.

Dans Grub1, vous insérez une nouvelle entrée comme celle-ci. Si je me souviens bien, vous aviez besoin de la déclaration racine pour en faire une entrée de menu valide, sinon Grub1 l'ignorait.

# separator
title  --------------------
root

Je soupçonne que Grub2 pourrait être similaire. Une entrée de menu très basique ressemble à ceci dans grub.cfg :

# basic example
menuentry "Memory test (memtest86)" {
        linux   /boot/memtest86+.bin
}

Étant donné que "n'importe quoi" dans les guillemets doubles s'affiche comme titre, vous pouvez simuler un séparateur avec cela. Comme Grub1, Grub2 veut que le mot clé linux le traite comme une véritable entrée de menu, alors faites attention de ne pas le sélectionner accidentellement.

# a separator!  no, really!
menuentry "....." {
        linux   /boot/memtest86+.bin
}

Malheureusement, «n'importe quoi» ne veut rien dire ; pendant que je testais cela, j'ai essayé une longue chaîne de tirets ("----------------") et cela n'a jamais fonctionné. Mais il aime la courte chaîne de points ci-dessus, vous pouvez donc l'utiliser.

.....

Voilà comment créer un séparateur. Pour créer un groupe et les placer où vous le souhaitez automatiquement, vous devez les ajouter dans les scripts dans /etc/grub.d .

Pour cet exemple, mettons un simple séparateur entre les différentes sections de grub.cfg . Si vous regardez /etc/grub.d , vous voyez les scripts suivants:

  • 00_header
  • 05_debian_theme
  • 10_linux - entrées pour les noyaux Ubuntu et la récupération
  • 20_memtest86 + - entrée pour Memtest86 +
  • 30_os-prober - entrées pour Windows et autres distributions Linux
  • 40_custom - rien par défaut; les entrées utilisateur spéciales peuvent aller ici

Nous allons créer un nouveau script, un séparateur et y placer les éléments suivants:

#!/bin/sh
# create a separator menu entry
cat << EOF
menuentry "....." {
  linux /boot/memtest86+.bin
}
EOF

Maintenant, déplacez ce script en place pour le premier séparateur et liez-le en place pour les autres. Les scripts sont exécutés dans l'ordre, donc si vous voulez que le premier arrive avant 10_linux , nommez-le 09_separator ou quelque chose.

cd /etc/grub.d

# start the editor, paste in the script above, save, and exit
sudo nano separator

# set executable
sudo chmod +x separator

# rename into the first position
mv separator 09_separator

# link into remaining positions (can also use cp)
ln -s 09_separator 19_separator
ln -s 09_separator 29_separator
# not really necessary since 40_custom is empty by default
ln -s 09_separator 39_separator

Si une entrée spécifique est définie par défaut dans / etc / default / grub , vous devrez peut-être la mettre à jour - Grub2 commence à compter les entrées de menu à 0, et chacun de ces "séparateurs" est une entrée valide, donc ils comptent aussi. Si votre entrée par défaut précédente était 0 et que vous avez ajouté un séparateur avant, n'oubliez pas de remplacer GRUB_DEFAULT par 1

Maintenant, lancez update-grub et examinez /boot/grub/grub.cfg - vous devriez voir les séparateurs là-dedans. Si vous le faites, redémarrez et vérifiez-les.

....

Si vous souhaitez placer des séparateurs ailleurs, disons entre différentes versions du noyau, vous devrez modifier 10_linux (ou un autre script) directement et trouver l'endroit approprié pour ajouter le séparateur. Vous pouvez utiliser les lignes du script ci-dessus; inclure tout sauf la première ligne #! / bin / sh .


Si vous voulez quelque chose de plus joli, utilisez des images ou des thèmes de démarrage Grub. Je dois vous donner une vérification de la pluie sur ces sujets, mais consultez les ressources ci-dessous.


Ressources:

Il y a deux grands guides Grub2 sur UbuntuForums que j'ai appris à connaître et à aimer:

GNU Grub 2 est une autre excellente ressource. Il a un ensemble de scripts pour peaufiner le Grub2 de Karmic ( divulgation complète: je ne les ai pas essayés ).

La page Format de thème de Grub Wiki est un must pour le piratage des thèmes Grub2.

Quack Quichotte
la source
Wow, merci pour la réponse. Dommage de voir que certaines fonctionnalités n'ont pas atteint cette version. J'avais déjà essayé d'insérer un séparateur, cela n'a pas fonctionné car je l'ai laissé vide entre les crochets. Tout ce qui précède semble fonctionner. Merci encore.
Malabarba
@D Connors - oui, il y a deux ou trois choses qui me manquent à propos de Grub1, mais dans l'ensemble, je pense que Grub2 est une amélioration. il a sa propre courbe d'apprentissage. Je m'attends à ce que les développeurs aient mis plus d'efforts dans les capacités graphiques de Grub2 au détriment du menu texte, mais cela changera peut-être au fur et à mesure du développement du projet.
Quack Quichote
5

Le séparateur peut être composé de tirets si son premier caractère est l'espace. De plus, il n'est pas nécessaire d'utiliser la commande linux pour la section séparateur, vous pouvez utiliser n'importe quelle commande comme celle-ci:

menuentry " -----------------------------------------------------------" {
  echo "It is just a separator, select another item!"
}

Ou même "vrai" pour revenir en silence:

menuentry " -----------------------------------------------------------" {
  true
}
MarSoft
la source
0

Si vous n'utilisez pas les autres noyaux, vous pouvez simplement les supprimer à l'aide de l'interface du gestionnaire de paquets qui vous convient. Cela les supprime automatiquement de grub.cfg

ajackbot
la source
Je les utilise rarement pour le dépannage, quand il m'arrive de bousiller l'installation actuelle. De plus, les noyaux ne sont qu'un exemple, j'ai également 3 autres partitions amorçables que je voudrais masquer mais les avoir toujours disponibles.
Malabarba
(pour éviter toute confusion. Quand j'ai dit "cacher", je ne voulais pas dire "cacher la partition", je voulais seulement dire "cacher l'entrée du système d'exploitation correspondante dans le menu de démarrage")
Malabarba