Estetyczna edycja grub.cfg

10

EDYCJA: (dla przejrzystości) Chcę zmienić wygląd menu rozruchowego grub, edytując pliki konfiguracyjne (prawdopodobnie, ale niekoniecznie grub.cfg).

Tak więc, każdy użytkownik Ubuntu wie, jak wypełnia się menu startowe po kilku aktualizacjach jądra. W czasach menu.lst można dostosować menu, aby ukryć niepożądane opcje, ale nadal je udostępniać.

Na przykład, jeśli menu Grub wyglądało tak:

A
B
C
D

Możesz sprawić, aby opcje C i D były niewidoczne, wstawiając pustą opcję między B i C. W ten sposób opcje C i D nie byłyby widoczne podczas uruchamiania, ale stałyby się widoczne, gdybyś przewinął je w dół w menu uruchamiania.

Wypróbowanie tej samej sztuczki w grub.cfg nie przyniosło żadnych rezultatów. Tak więc szukam sposobu na osiągnięcie tego samego rezultatu za pomocą nowego menu grub, edytując plik grub.cfg. Inne poprawki estetyczne są również mile widziane.

Dzięki

EDYCJA 2: Jeśli ukrywanie pozycji menu nie jest możliwe, chciałbym wstawić między nimi separator, aby menu wyglądało następująco:

A
B.

--Inne--
C
D

Malabarba
źródło
czy chcesz wprowadzić wszystkie zmiany w grub.cfg ? jeśli korzystasz z update-grub, aby go automatycznie wygenerować, prawdopodobnie chcesz edytować skrypty w /etc/grub.d ; krótki przegląd znajduje się na superuser.com/questions/102692/ ...
quack quixote
@ ~ quack: to trochę pomaga i jest dość pouczające. Nadal mam nadzieję na sposób na ukrycie pozycji menu lub przynajmniej umieszczenie między nimi separatora.
Malabarba
Więc chyba odinstalowanie starych jąder nie wchodzi w grę?
Bobby

Odpowiedzi:

8

Po pierwsze, dowiedz się, jak Ubuntu konfiguruje Grub2.

  • /boot/grub/grub.cfg to menu Grub2
  • polecenie update-grub automatycznie generuje ten plik
  • ... czytając domyślne ustawienia z / etc / defaults / grub
  • ... i uruchamianie skryptów powłoki w /etc/grub.d

Tak więc, jeśli nie chcesz edytować grub.cfg po każdej aktualizacji jądra, chcesz dostosować skrypty w /etc/grub.d, aby zmiany były stosowane przy każdym uruchomieniu aktualizacji-grub .


Po drugie, aby odpowiedzieć bezpośrednio na twoje pierwsze pytanie, nie znam żadnego sposobu na uczynienie określonych opcji rozruchu niewidocznymi, ale nadal dostępnymi poprzez menu Grub. W Grub1 jest wiele drobiazgów, które nie zostały ponownie zaimplementowane w Grub2 i nie zdziwiłoby mnie, gdyby to była jedna z nich.

Zamiast tego możesz sprawić, że wszystkie pozycje menu będą niewidoczne (dopóki nie zostaną podświetlone), ustawiając kolor czcionki menu na taki sam jak kolor tła. W /etc/grub.d/05_debian_theme zmień menu_color_normal, aby pierwszy kolor (czcionka) pasował do drugiego koloru (tło). Pozostaw menu_kolor_wyróżnienie inne, aby pojawił się wpis pod kursorem.

# 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

Przeniesienie separatora do menu Grub.

W Grub1 wstawiłbyś nowy wpis w ten sposób. O ile pamiętam, potrzebujesz deklaracji roota, aby uczynić ją prawidłową pozycją menu, w przeciwnym razie Grub1 zignoruje ją.

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

Podejrzewam, że Grub2 może być podobny. Bardzo prosta pozycja menu wygląda tak w grub.cfg :

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

Ponieważ „cokolwiek” w podwójnych cudzysłowach jest wyświetlane jako tytuł, można o tym podrobić separator. Podobnie jak Grub1, Grub2 chce, aby słowo kluczowe linux traktowało je jako prawdziwą pozycję menu, więc uważaj, aby przypadkowo go nie wybrać.

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

Niestety, „coś” nie oznacza nic ; podczas testowania tego wypróbowałem długi ciąg myślników („----------------”) i to nigdy nie zadziałało. Ale lubi krótki ciąg kropek pokazany powyżej, więc możesz go użyć.

.....

Oto jak zrobić jeden separator. Aby utworzyć wiązkę i automatycznie umieścić je tam, gdzie chcesz, musisz dodać je do skryptów w /etc/grub.d .

W tym przykładzie umieśćmy prosty separator między różnymi sekcjami grub.cfg . Jeśli spojrzysz na /etc/grub.d , zobaczysz następujące skrypty:

  • 00_header
  • 05_debian_theme
  • 10_linux - wpisy dotyczące jądra i odzyskiwania Ubuntu
  • 20_memtest86 + - pozycja dla Memtest86 +
  • 30_os-prober - wpisy dla systemu Windows i innych dystrybucji Linuksa
  • 40_custom - domyślnie nic; specjalne wpisy użytkowników mogą przejść tutaj

Utworzymy nowy skrypt, separator i umieścimy w nim następujące elementy:

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

Teraz przenieś ten skrypt na miejsce pierwszego separatora i połącz go na miejscu z innymi. Skrypty są wykonywane w kolejności, więc jeśli chcesz, aby pierwszy pojawił się przed 10_linux , nazwij go 09_separator lub coś takiego.

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

Jeśli masz określony wpis ustawiony jako domyślny w / etc / default / grub , może być konieczna jego aktualizacja - Grub2 zaczyna zliczać wpisy menu od 0, a każdy z tych „separatorów” jest prawidłowym wpisem, więc i one się liczą. Jeśli twój poprzedni domyślny wpis wynosił 0 i dodałeś przed nim jeden separator, pamiętaj, aby zmienić GRUB_DEFAULT na 1

Teraz uruchom update-grub i sprawdź /boot/grub/grub.cfg - powinieneś zobaczyć tam separatory. Jeśli to zrobisz, uruchom ponownie i sprawdź je.

Jeśli chcesz umieścić separatory w innym miejscu, powiedzmy, między różnymi wersjami jądra, musisz bezpośrednio edytować 10_linux (lub inny skrypt) i znaleźć odpowiednie miejsce do dodania separatora. Możesz użyć wierszy ze skryptu powyżej; obejmują wszystko oprócz pierwszej linii #! / bin / sh .


Jeśli chcesz czegoś ładniejszego, użyj grubych obrazów lub motywów powitalnych. Muszę dać ci kontrolę nad tymi tematami, ale sprawdź poniższe zasoby.


Zasoby:

Istnieją dwa duże przewodniki Grub2 na UbuntuForums, które poznałem i uwielbiam:

GNU Grub 2 to kolejny świetny zasób. Ma zestaw skryptów do poprawiania Grub2 Karmica ( pełne ujawnienie: nie próbowałem ich ).

Format strony Grub Wiki jest niezbędny do zhakowania tematów Grub2.

quack quixote
źródło
Wow, dzięki za odpowiedź. Szkoda, że ​​niektóre funkcje nie dotarły do ​​tej wersji. Próbowałem już wstawić separator, ale to nie działało, ponieważ zostawiłem go pustym między nawiasami. Wszystko powyżej wydaje się działać. Dzięki jeszcze raz.
Malabarba
@D Connors - tak, w Grub1 było kilka rzeczy, za którymi tęsknię, ale ogólnie myślę, że Grub2 to poprawa. ma swoją własną krzywą uczenia się. spodziewam się, że deweloperzy włożyli więcej wysiłku w graficzne możliwości Grub2 kosztem menu tekstowego, ale może to się zmieni w miarę rozwoju projektu.
quack quixote
5

Separator może składać się z myślników, jeśli jego pierwszą postacią jest spacja. Ponadto nie jest konieczne użycie polecenia linux dla sekcji separatora, możesz użyć dowolnego takiego polecenia:

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

Lub nawet „prawda”, aby powrócić cicho:

menuentry " -----------------------------------------------------------" {
  true
}
MarSoft
źródło
0

Jeśli nie używasz innych jąder, możesz je po prostu usunąć, używając dowolnego interfejsu menedżera pakietów. To automatycznie usuwa je z grub.cfg

ajackbot
źródło
Rzadko używam ich do rozwiązywania problemów, kiedy zdarza mi się popsuć bieżącą instalację. Ponadto jądra były tylko przykładem, mam też 3 inne partycje rozruchowe, które chciałbym ukryć, ale nadal mam je dostępne.
Malabarba
(aby uniknąć nieporozumień. Kiedy powiedziałem „ukryj”, nie miałem na myśli „ukryć partycję”, miałem na myśli jedynie „ukryć odpowiedni wpis systemu operacyjnego w menu rozruchu”)
Malabarba