Modifica estetica grub.cfg


10

EDIT: (per chiarezza) sto cercando di cambiare l'aspetto del menu di avvio di GRUB, modificando i file di configurazione (possibilmente ma non necessariamente grub.cfg).

Quindi, qualsiasi utente di Ubuntu sa quanto viene riempito il menu di avvio dopo alcuni aggiornamenti del kernel. Ai tempi di menu.lst, potevi modificare il menu per nascondere le opzioni indesiderate ma tenerle comunque disponibili.

Ad esempio, se il tuo menu di grub è simile al seguente:

A
B
C
D

È possibile rendere invisibili le opzioni C e D inserendo un'opzione vuota tra B e C. In questo modo, le opzioni C e D non sarebbero visibili durante l'avvio, ma diventerebbero visibili scorrendo verso il basso nel menu di avvio.

Provare questo stesso trucco in grub.cfg non ha prodotto alcun risultato. Quindi, sto cercando un modo per ottenere lo stesso risultato con il nuovo menu di grub, modificando il file grub.cfg. Altre modifiche estetiche sono benvenute.

Grazie

EDIT2: Se non è possibile nascondere le voci del menu, vorrei un modo per inserire un separatore tra loro, quindi il menu sarebbe simile al seguente:

A
B

--Altri--
C
D


vuoi apportare tutte le modifiche a grub.cfg ? se stai eseguendo update-grub per generarlo automaticamente, probabilmente vorrai modificare gli script in /etc/grub.d ; consultare superuser.com/questions/102692/… per una breve panoramica.
Quack Quixote,

@ ~ ciarlatano: aiuta un po 'ed è piuttosto informativo. Spero ancora un modo per nascondere le voci di menu o almeno mettere un separatore tra di loro.
Malabarba,

Quindi, suppongo che disinstallare i vecchi kernel non sia un'opzione?
Bobby,

Risposte:


8

Innanzitutto, capire come Ubuntu configura Grub2.

  • /boot/grub/grub.cfg è il menu Grub2
  • il comando update-grub genera automaticamente quel file
  • ... leggendo le impostazioni predefinite da / etc / defaults / grub
  • ... ed eseguendo shellscripts in /etc/grub.d

Quindi, se non si desidera modificare grub.cfg dopo ogni aggiornamento del kernel, si desidera modificare gli script in /etc/grub.d in modo che le modifiche vengano applicate ogni volta che viene eseguito update-grub .


In secondo luogo, per rispondere direttamente alla tua prima domanda, non ho familiarità con alcun modo per rendere invisibili le opzioni di avvio specifiche ma comunque accessibili tramite il menu di Grub. Ci sono molte piccole cose su Grub1 che non sono state reimplementate in Grub2 e non mi sorprenderebbe se questo fosse uno di questi.

Invece, è possibile rendere invisibili tutte le voci di menu (fino a quando evidenziate) impostando il colore del carattere del menu sullo stesso colore di sfondo. In /etc/grub.d/05_debian_theme , cambia menu_color_normal in modo che il primo colore (carattere) corrisponda al secondo colore (sfondo). Lascia menu_color_highlight diverso, quindi viene visualizzata la voce sotto il cursore.

# 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

Ottenere un separatore nel menu di Grub.

In Grub1 inseriresti una nuova voce come questa. Per quanto ricordo, hai bisogno della dichiarazione di root per renderla una voce di menu valida, altrimenti Grub1 l'ha ignorata.

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

Sospetto che Grub2 potrebbe essere simile. Una voce di menu molto semplice si presenta così in grub.cfg :

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

Poiché "qualsiasi" tra virgolette viene visualizzato come titolo, è possibile simulare un separatore. Come Grub1, Grub2 vuole che la parola chiave linux la tratti come una vera voce di menu, quindi fai attenzione a non selezionarla accidentalmente.

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

Sfortunatamente, "nulla" non significa nulla ; mentre stavo provando questo ho provato una lunga serie di trattini ("----------------") e non ha mai funzionato. Ma gli piace la breve stringa di punti mostrata sopra, quindi puoi usarla.

.....

Ora, ecco come creare un separatore. Per creare un gruppo e posizionarli dove li desideri automaticamente, devi aggiungerli negli script in /etc/grub.d .

Per questo esempio, mettiamo un semplice separatore tra le varie sezioni di grub.cfg . Se guardi /etc/grub.d , vedi i seguenti script:

  • 00_header
  • 05_debian_theme
  • 10_linux - voci per kernel Ubuntu e recupero
  • 20_memtest86 + - voce per Memtest86 +
  • 30_os-prober - voci per Windows e altre distribuzioni Linux
  • 40_custom: niente per impostazione predefinita; voci utente speciali possono andare qui

Creeremo un nuovo script, separatore e inseriremo quanto segue:

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

Ora sposta lo script in posizione per il primo separatore e collegalo in posizione per gli altri. Gli script vengono eseguiti in ordine, quindi se vuoi che il primo venga prima di 10_linux , chiamalo 09_separator o qualcosa del genere.

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

Se hai una voce specifica impostata come predefinita in / etc / default / grub , potresti aver bisogno di aggiornarla - Grub2 inizia a contare le voci di menu su 0, e ciascuno di questi "separatori" è una voce valida, quindi contano anche loro. Se la voce predefinita precedente era 0 e prima hai aggiunto un separatore, ricordati di cambiare GRUB_DEFAULT su 1

Ora esegui update-grub ed esamina /boot/grub/grub.cfg - dovresti vedere i separatori lì dentro. In tal caso, riavviare e controllarli.

....

Se vuoi posizionare separatori altrove, diciamo, tra diverse versioni del kernel, dovrai modificare direttamente 10_linux (o un altro script) e trovare il posto appropriato per aggiungere il separatore. Puoi usare le linee dello script sopra; includi tutto tranne la prima riga #! / bin / sh .


Se vuoi qualcosa di più bello, usa immagini o temi splash di Grub. Devo darti un controllo di pioggia su questi argomenti, ma controlla le risorse di seguito.


risorse:

Ci sono due grandi guide di Grub2 su UbuntuForums che ho imparato a conoscere e ad amare:

GNU Grub 2 è un'altra grande risorsa. Ha una serie di script per modificare Grub2 di Karmic ( divulgazione completa: non li ho provati ).

La pagina del formato del tema di Grub Wiki è un must per l'hacking sui temi di Grub2.


Wow, grazie per la risposta. Peccato vedere che alcune funzionalità non sono arrivate a questa versione. Avevo già provato a inserire un separatore, non funzionava perché l'ho lasciato vuoto tra parentesi. Tutto sopra sembra funzionare. Grazie ancora.
Malabarba

@D Connors - sì, ci sono un paio di cose che mi mancano di Grub1, ma nel complesso penso che Grub2 sia un miglioramento. ha una sua curva di apprendimento. mi aspetto che gli sviluppatori abbiano fatto uno sforzo maggiore nelle capacità grafiche di Grub2 a spese del menu di testo, ma forse questo cambierà man mano che il progetto si sviluppa.
Quack Quixote,

5

Il separatore può essere composto da trattini se il suo primo carattere è spazio. Inoltre, non è necessario utilizzare il comando linux per la sezione separatore, è possibile utilizzare qualsiasi comando come questo:

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

O anche "vero" per tornare in silenzio:

menuentry " -----------------------------------------------------------" {
  true
}

0

Se non usi gli altri kernel, puoi semplicemente rimuoverli usando qualsiasi interfaccia di gestione dei pacchetti adatta a te. Questo li rimuove automaticamente da grub.cfg


Li uso raramente per la risoluzione dei problemi, quando mi capita di rovinare l'installazione corrente. Inoltre, i kernel erano solo un esempio, ho anche altre 3 partizioni avviabili che vorrei nascondere ma che sono ancora disponibili.
Malabarba,

(per evitare confusione. Quando ho detto "nascondi" non intendevo "nascondi la partizione", intendevo solo "nascondi la voce relativa del sistema operativo dal menu di avvio")
Malabarba,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.