Editando nomes do sistema operacional em / etc / default / grub - onde o nome do sistema operacional é lido?

3

Onde a entrada

GRUB_DISTRIBUTOR=lsb_release -i -s 2> /dev/null || echo Debian

tirar os nomes de?

Eis porque esta não é uma duplicata de "Como alterar com segurança o nome do sistema operacional no menu de inicialização do grub?":

Eu já sei que os nomes atribuídos aos SOs no menu de inicialização do GRUB podem ser alterados comentando

GRUB_DISTRIBUTOR=lsb_release -i -s 2> /dev/null || echo Debian

e substituindo a entrada por

GRUB_DISTRIBUTOR="Some other name"

(em aspas).

Todas as explicações que encontrei dizem apenas:

GRUB_DISTRIBUTOR=lsb_release -i -s 2> /dev/null || echo Debian -

"Esta linha simplesmente recupera o nome na entrada do menu." Justo! Mas eu gostaria de saber: De onde esse comando recupera o nome real? Os nomes devem estar contidos em algum arquivo em texto simples!

    
por user557506 09.09.2016 / 02:28

2 respostas

9

Se eu strace o comando lsb_release -i -s ...

strace -o strace.out lsb_release -i -s

Eu acho (do arquivo de saída strace.out ) que está lendo /etc/lsb-release

$ cat /etc/lsb-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=16.04
DISTRIB_CODENAME=xenial
DISTRIB_DESCRIPTION="Ubuntu 16.04.1 LTS"

A saída de lsb_release -i -s é Ubuntu

O redirecionamento 2> /dev/null envia algum erro do comando para o esquecimento de dados

O operador || significa se (e somente se) o primeiro comando falhou, faça o segundo:

first command || second command

Portanto, se lsb_release -i -s errar, os erros vão para /dev/null e o comando echo Debian é executado. A saída disso é Debian

Então, para resumir:

Se lsb_release -s -i puder nos fornecer o nome do sistema atual, use-o e exiba a saída. Se não, apenas chame de "Debian"

O arquivo /etc/default/grub é usado para gerar o arquivo de configuração lido pelo GRUB ( /boot/grub/grub.cfg ) quando update-grub é chamado, então é lido quando o sistema de arquivos raiz real é montado.

Você deve executar sudo update-grub após editar o arquivo para que as alterações entrem em vigor.

    
por Zanna 09.09.2016 / 11:19
1

lsb_release é um comando interno para obter o Linux Distro e a versão (número do release). Como o comando funciona e de onde obtém as informações pode ser duplicado por você.

No tipo de terminal cat /proc/version :

Linux version 4.7.3-040703-generic (kernel@tangerine) (gcc version 6.2.0 20160901 (Ubuntu 6.2.0-3ubuntu11) ) #201609070334 SMP Wed Sep 7 07:36:45 UTC 2016

O Ubuntu aparece em / proc / version, mas não da forma como aparece nos menus do grub. Então seguimos em frente ...

Agora digite cat /etc/issue :

Ubuntu 16.04.1 LTS \n \l

Isto é onde lsb_release provavelmente está recebendo o Linux Distro, porque Ubuntu 16.04.1 LTS é o que aparece no meu menu grub.

Antes de afetar indiretamente a variável $ GRUB_DISTRIBUTOR (referenciada na sua pergunta) forçando / etc / issue para uma constante diferente, considere este código em /etc/grub.d/05_debian_theme :

set_default_theme(){
    case $GRUB_DISTRIBUTOR in
        Tanglu|Ubuntu|Kubuntu)
            # Set a monochromatic theme for Tanglu/Ubuntu.
            echo "set menu_color_normal=white/black"
            echo "set menu_color_highlight=black/light-gray"

Mudar o Ubuntu para My Cool Linux pode aparecer no menu, mas o código interno do grub para temas e cores seria quebrado acima. Sem mencionar todas as outras "coisas" que podem quebrar dentro do grub, além das outras aplicações e do SO.

Editar 1:

Como aprendi esta manhã em comando-para-mostrar-versão-linux e, em seguida, descobriu @Zanna já deu uma excelente resposta acima, o comando lsb_release recupera o texto de /etc/lsb-release .

    
por WinEunuuchs2Unix 09.09.2016 / 04:29