Ästhetische Bearbeitung von grub.cfg

10

BEARBEITEN: (aus Gründen der Übersichtlichkeit) Ich möchte das Erscheinungsbild des Grub-Boot-Menüs ändern, indem ich die Konfigurationsdateien bearbeite (möglicherweise, aber nicht unbedingt grub.cfg).

Jeder Ubuntu-Benutzer weiß also, wie voll das Boot-Menü nach einigen Kernel-Upgrades ist. In den Tagen von menu.lst konnten Sie das Menü optimieren, um unerwünschte Optionen auszublenden und sie dennoch verfügbar zu halten.

Zum Beispiel, wenn Ihr Grub-Menü so aussah:

A
B
C
D.

Sie können die Optionen C und D unsichtbar machen, indem Sie eine leere Option zwischen B und C einfügen. Auf diese Weise werden die Optionen C und D beim Hochfahren nicht angezeigt, sondern werden sichtbar, wenn Sie im Startmenü zu ihnen scrollen.

Der Versuch, denselben Trick in grub.cfg auszuführen, führte zu keinem Ergebnis. Daher suche ich nach einer Möglichkeit, mit dem neuen Grub-Menü das gleiche Ergebnis zu erzielen, indem ich die Datei grub.cfg bearbeite. Andere ästhetische Verbesserungen sind ebenfalls willkommen.

Vielen Dank

EDIT2: Wenn das Ausblenden von Menüeinträgen nicht möglich ist, möchte ich ein Trennzeichen zwischen ihnen einfügen, damit das Menü folgendermaßen aussieht:

A
B.

- Andere -
C
D.

Malabarba
quelle
Möchten Sie alle Änderungen an grub.cfg vornehmen ? Wenn Sie update-grub ausführen , um es automatisch zu generieren, möchten Sie wahrscheinlich die Skripte unter /etc/grub.d bearbeiten . Eine kurze Übersicht finden Sie unter superuser.com/questions/102692/… .
Quacksalber Quijote
@ ~ Quack: Das hilft ein bisschen und ist ziemlich informativ. Ich hoffe immer noch auf eine Möglichkeit, Menüeinträge auszublenden oder zumindest ein Trennzeichen zwischen sie zu setzen.
Malabarba
Ich denke, nur die alten Kernel zu deinstallieren ist keine Option?
Bobby

Antworten:

8

Verstehen Sie zunächst, wie Ubuntu Grub2 konfiguriert.

  • /boot/grub/grub.cfg ist das Grub2-Menü
  • Der Befehl update-grub generiert diese Datei automatisch
  • ... indem Sie die Standardeinstellungen aus / etc / defaults / grub lesen
  • ... und Shellskripte in /etc/grub.d ausführen

Wenn Sie also grub.cfg nicht nach jedem Kernel-Update bearbeiten möchten , möchten Sie die Skripte in /etc/grub.d optimieren, damit Ihre Änderungen bei jeder Ausführung von update-grub übernommen werden.


Zweitens, um Ihre erste Frage direkt zu beantworten, kenne ich keine Möglichkeit, bestimmte Startoptionen unsichtbar zu machen, aber dennoch über das Grub-Menü zugänglich zu sein. Es gibt viele kleine Dinge an Grub1, die in Grub2 nicht neu implementiert wurden, und es würde mich nicht wundern, wenn dies eines davon wäre.

Stattdessen können Sie alle Menüeinträge unsichtbar machen (bis sie hervorgehoben werden), indem Sie die Schriftfarbe des Menüs auf die gleiche Hintergrundfarbe einstellen. In /etc/grub.d/05_debian_theme , ändert menu_color_normal , so dass die erste Farbe (Schriftart) mit der zweiten Farbe (Hintergrund). Lassen Sie menu_color_highlight anders, damit der Eintrag unter dem Cursor angezeigt wird.

# 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

Ein Trennzeichen in das Grub-Menü aufnehmen.

In Grub1 würden Sie einen neuen Eintrag wie diesen einfügen. Soweit ich mich erinnere, brauchten Sie die Root- Deklaration, um einen gültigen Menüeintrag zu erstellen, andernfalls ignorierte Grub1 sie.

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

Ich vermute, Grub2 könnte ähnlich sein. Ein sehr einfacher Menüeintrag sieht in grub.cfg folgendermaßen aus :

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

Da "irgendetwas" in den doppelten Anführungszeichen als Titel angezeigt wird, können Sie damit ein Trennzeichen vortäuschen. Wie Grub1 möchte Grub2, dass das Linux- Schlüsselwort es als echten Menüeintrag behandelt. Achten Sie also darauf, dass Sie es nicht versehentlich auswählen.

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

Leider bedeutet "alles" nichts ; Während ich dies testete, versuchte ich es mit einer langen Reihe von Strichen ("----------------") und es funktionierte nie. Aber es mag die kurze Punktfolge, die oben gezeigt wird, also können Sie das verwenden.

..... .....

So macht man ein Trennzeichen. Um ein Bündel zu erstellen und sie automatisch dort zu platzieren, wo Sie sie möchten, müssen Sie sie zu den Skripten in /etc/grub.d hinzufügen .

In diesem Beispiel setzen wir ein einfaches Trennzeichen zwischen die verschiedenen Abschnitte von grub.cfg . Wenn Sie sich /etc/grub.d ansehen , sehen Sie die folgenden Skripte:

  • 00_header
  • 05_debian_theme
  • 10_linux - Einträge für Ubuntu-Kernel & Recovery
  • 20_memtest86 + - Eintrag für Memtest86 +
  • 30_os-prober - Einträge für Windows und andere Linux-Distributionen
  • 40_custom - standardmäßig nichts; spezielle Benutzereinträge können hier gehen

Wir erstellen ein neues Skript, ein Trennzeichen und fügen Folgendes ein:

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

Verschieben Sie nun das Skript für das erste Trennzeichen und verknüpfen Sie es für die anderen. Die Skripte werden der Reihe nach ausgeführt. Wenn Sie also möchten, dass das erste vor 10_linux kommt , nennen Sie es 09_separator oder so.

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

Wenn Sie in / etc / default / grub einen bestimmten Eintrag als Standard festgelegt haben , müssen Sie ihn möglicherweise aktualisieren. Grub2 beginnt mit der Zählung der Menüeinträge bei 0, und jedes dieser "Trennzeichen" ist ein gültiger Eintrag, sodass auch diese zählen. Wenn Ihr vorheriger Standardeintrag 0 war und Sie zuvor ein Trennzeichen hinzugefügt haben, müssen Sie GRUB_DEFAULT in 1 ändern

Führen Sie nun update-grub aus und untersuchen Sie /boot/grub/grub.cfg - Sie sollten die Trennzeichen dort sehen. Wenn Sie dies tun, starten Sie neu und checken Sie sie aus.

....

Wenn Sie Trennzeichen an einer anderen Stelle platzieren möchten, z. B. zwischen verschiedenen Kernelversionen, müssen Sie 10_linux (oder ein anderes Skript) direkt bearbeiten und den geeigneten Ort zum Hinzufügen des Trennzeichens finden. Sie können die Zeilen aus dem obigen Skript verwenden. Fügen Sie alles außer der ersten Zeile #! / bin / sh hinzu.


Wenn Sie etwas Schöneres wünschen, verwenden Sie Grub-Splash-Bilder oder -Themen. Ich muss Ihnen einen Regencheck zu diesen Themen geben, aber überprüfen Sie die Ressourcen unten.


Ressourcen:

Es gibt zwei große Grub2-Anleitungen auf UbuntuForums, die ich kennen und lieben gelernt habe:

GNU Grub 2 ist eine weitere großartige Ressource. Er hat eine Reihe von Skripten, mit denen er Karmics Grub2 optimieren kann ( vollständige Offenlegung: Ich habe sie nicht ausprobiert ).

Die Theme Format- Seite von Grub Wiki ist ein Muss für das Hacken von Grub2-Themes.

Quacksalber
quelle
Wow, danke für die Antwort. Schade, dass einige Funktionen es nicht in diese Version geschafft haben. Ich hatte bereits versucht, ein Trennzeichen einzufügen, es funktionierte nicht, weil ich es zwischen den Klammern leer ließ. Alles oben scheint zu funktionieren. Danke noch einmal.
Malabarba
@D Connors - Ja, es gibt ein paar Dinge, die ich an Grub1 vermisse, aber insgesamt denke ich, dass Grub2 eine Verbesserung ist. es hat seine eigene Lernkurve. Ich gehe davon aus, dass die Entwickler auf Kosten des Textmenüs mehr Aufwand in die grafischen Fähigkeiten von Grub2 gesteckt haben, aber vielleicht ändert sich dies im Verlauf des Projekts.
Quacksalber Quijote
5

Das Trennzeichen kann aus Bindestrichen bestehen, wenn das erste Zeichen ein Leerzeichen ist. Es ist auch nicht erforderlich, den Linux-Befehl für den Trennabschnitt zu verwenden. Sie können einen beliebigen Befehl wie den folgenden verwenden:

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

Oder sogar "wahr", um still zurückzukehren:

menuentry " -----------------------------------------------------------" {
  true
}
MarSoft
quelle
0

Wenn Sie die anderen Kernel nicht verwenden, können Sie sie einfach über die für Sie geeignete Paketmanager-Oberfläche entfernen. Dadurch werden sie automatisch aus grub.cfg entfernt

ajackbot
quelle
Ich verwende sie selten zur Fehlerbehebung, wenn ich die aktuelle Installation vermassle. Außerdem waren die Kernel nur ein Beispiel. Ich habe auch 3 andere bootfähige Partitionen, die ich gerne ausblenden würde, aber immer noch verfügbar habe.
Malabarba
(Um Verwirrung zu vermeiden. Als ich "Verstecken" sagte, meinte ich nicht "Verstecke die Partition", sondern nur "Verstecke den entsprechenden Betriebssystemeintrag aus dem Startmenü")
Malabarba