Editando esteticamente o grub.cfg

10

EDIT: (para maior clareza) Estou procurando alterar a aparência do menu de inicialização do grub, editando os arquivos de configuração (possivelmente mas não necessariamente o grub.cfg).

Portanto, qualquer usuário do ubuntu sabe como o menu de inicialização fica cheio depois de algumas atualizações do kernel. Nos dias de menu.lst, você pode ajustar o menu para ocultar opções indesejadas, mas ainda mantê-las disponíveis.

Por exemplo, se o seu menu grub se parecer com o seguinte:

A
B
C
D

Você pode tornar as opções C e D invisíveis inserindo uma opção vazia entre B e C. Dessa forma, as opções C e D não ficariam visíveis durante a inicialização, mas ficariam visíveis se você as rolasse para baixo no menu de inicialização.

Tentar esse mesmo truque no grub.cfg não resultou em nenhum resultado. Então, estou procurando uma maneira de alcançar esse mesmo resultado com o novo menu grub, editando o arquivo grub.cfg. Outros ajustes estéticos também são bem-vindos.

obrigado

EDIT2: Se não for possível ocultar as entradas do menu, gostaria de inserir um separador entre elas, para que o menu fique assim:

A
B

- Outros--
C
D

Malabarba
fonte
Deseja fazer todas as alterações no grub.cfg ? se você estiver executando o update-grub para gerá-lo automaticamente, provavelmente desejará editar os scripts em /etc/grub.d ; consulte superuser.com/questions/102692/… para uma breve visão geral.
quack quixote
@ ~ charlatão: isso ajuda um pouco e é bastante informativo. Ainda estou esperando uma maneira de ocultar as entradas do menu, ou pelo menos colocar um separador entre elas.
Malabarba
Então, acho que apenas desinstalar os kernels antigos não é uma opção?
Bobby

Respostas:

8

Primeiro, entenda como o Ubuntu configura o Grub2.

  • /boot/grub/grub.cfg é o menu do Grub2
  • o comando update-grub gera automaticamente esse arquivo
  • ... lendo as configurações padrão em / etc / defaults / grub
  • ... e executando shellscripts em /etc/grub.d

Portanto, se você não deseja editar o grub.cfg após cada atualização do kernel, você deve ajustar os scripts em /etc/grub.d para que suas alterações sejam aplicadas sempre que o update-grub for executado.


Segundo, para responder sua primeira pergunta diretamente, não conheço nenhum meio de tornar invisíveis as opções específicas de inicialização, mas ainda acessíveis através do menu Grub. Existem muitas pequenas coisas sobre o Grub1 que não foram reimplementadas no Grub2 e não me surpreenderia se esse fosse um deles.

Em vez disso, você pode tornar todas as entradas do menu invisíveis (até destacadas) configurando a cor da fonte do menu para a mesma cor de fundo. Em /etc/grub.d/05_debian_theme , altere menu_color_normal para que a primeira cor (fonte) corresponda à segunda cor (plano de fundo). Deixe menu_color_highlight diferente, para que a entrada abaixo do cursor seja exibida.

# 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

Colocando um separador no menu Grub.

No Grub1, você inseria uma nova entrada como esta. Pelo que me lembro, você precisava da declaração raiz para torná-la uma entrada de menu válida, caso contrário, o Grub1 a ignorou.

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

Eu suspeito que o Grub2 possa ser semelhante. Uma entrada de menu muito básica se parece com isso no grub.cfg :

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

Como "qualquer coisa" entre aspas duplas é exibida como título, você pode falsificar um separador com isso. Como o Grub1, o Grub2 deseja que a palavra-chave linux a trate como uma entrada de menu real, portanto, tenha cuidado para não selecioná-la acidentalmente.

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

Infelizmente, "qualquer coisa" não significa nada ; enquanto testava isso, tentei uma longa sequência de traços ("----------------") e nunca funcionou. Mas ele gosta da pequena sequência de pontos mostrada acima, para que você possa usá-lo.

.....

Agora, é assim que se faz um separador. Para criar um monte e colocá-lo onde você deseja automaticamente, você precisa adicioná-lo aos scripts em /etc/grub.d .

Neste exemplo, vamos colocar um separador simples entre as várias seções do grub.cfg . Se você olhar para /etc/grub.d , verá os seguintes scripts:

  • 00_header
  • 05_debian_theme
  • 10_linux - entradas para kernels e recuperação do Ubuntu
  • 20_memtest86 + - entrada para Memtest86 +
  • 30_os-prober - entradas para Windows e outras distribuições de Linux
  • 40_custom - nada por padrão; entradas especiais de usuário podem ir aqui

Criaremos um novo script, separador e colocaremos o seguinte nele:

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

Agora, mova esse script para o primeiro separador e vincule-o para os outros. Os scripts são executados em ordem; portanto, se você quiser que o primeiro venha antes do 10_linux , nomeie-o 09_separator ou algo assim.

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 você tem uma entrada específica definida como padrão em / etc / default / grub , pode ser necessário atualizá-la - o Grub2 começa a contar as entradas do menu em 0 e cada um desses "separadores" é uma entrada válida, portanto eles também contam. Se sua entrada padrão anterior foi 0 e você adicionou um separador antes, lembre-se de alterar GRUB_DEFAULT para 1

Agora execute update-grub e examine /boot/grub/grub.cfg - você deve ver os separadores lá. Se o fizer, reinicie e verifique-os.

....

Se você deseja colocar separadores em outro lugar, digamos, entre diferentes versões do kernel, precisará editar 10_linux (ou outro script) diretamente e encontrar o local apropriado para adicionar o separador. Você pode usar as linhas do script acima; inclua tudo, exceto a primeira linha #! / bin / sh .


Se você quiser algo mais bonito, use imagens ou temas especiais do Grub. Preciso fazer uma verificação geral sobre esses tópicos, mas verifique os recursos abaixo.


Recursos:

Existem dois grandes guias do Grub2 no UbuntuForums que eu conheci e adoro:

O GNU Grub 2 é outro ótimo recurso. Ele tem um conjunto de scripts para ajustar o Grub2 do Karmic ( divulgação completa: eu não os experimentei ).

A página de formato de tema do Grub Wiki é uma obrigação para hackers em temas do Grub2.

charlatão quixote
fonte
Uau, obrigado pela resposta. É uma pena ver que alguns recursos não chegaram a esta versão. Eu já havia tentado inserir um separador, não funcionou porque o deixei em branco entre os colchetes. Tudo acima parece estar funcionando. Obrigado novamente.
Malabarba
@ Connors - Sim, houve algumas coisas que eu sinto falta no Grub1, mas no geral acho que o Grub2 é uma melhoria. ele tem sua própria curva de aprendizado. Espero que os desenvolvedores tenham se esforçado mais nas habilidades gráficas do Grub2 às custas do menu de texto, mas talvez isso mude à medida que o projeto se desenvolve.
quack quixote
5

O separador pode ser feito de traços se seu primeiro caractere for espaço. Além disso, não é necessário usar o comando linux para a seção separadora, você pode usar qualquer comando como este:

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

Ou mesmo "true" para retornar silenciosamente:

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

Se você não usar os outros kernels, poderá removê-los usando a interface do gerenciador de pacotes que mais lhe convier. Isso os remove automaticamente do grub.cfg

ajackbot
fonte
Eu raramente os uso para solucionar problemas, quando estrago a instalação atual. Além disso, os kernels eram apenas um exemplo, também tenho 3 outras partições inicializáveis ​​que gostaria de ocultar, mas ainda as tenho disponíveis.
Malabarba
(para evitar confusão. Quando eu disse "ocultar", eu não quis dizer "ocultar a partição", eu quis dizer apenas "ocultar a entrada reiterada do SO no menu de inicialização")
Malabarba 20/02/10