Manual de imagem de fundo grub.cfg

6

Estou tentando instalar manualmente uma imagem de segundo plano para o grub em uma unidade flash inicializável. Como a unidade só inicializa com ISOs e não possui SO instalado, não posso tirar proveito de scripts como update-grub para fazer isso para mim e as postagens relacionadas à edição de / etc / default / grub não se aplicam à minha situação. Eu vi Como colocar uma imagem de plano de fundo no GRUB? mas não se aplica pelas razões que mencionei. Eu consegui obter todos os meus ISO's para inicializar corretamente, mas estou preso na aplicação da imagem de fundo. Aqui está a seção relevante do meu grub.cfg o resto é todas as entradas do menu que funcionam corretamente (voltando ao modo de texto).

set timeout=10
set default=0
set root=(hd0,msdos1)
### BEGIN background setup ###
function load_video {
  if [ x$feature_all_video_module = xy ]; then
    insmod all_video
  else
    insmod efi_gop
    insmod efi_uga
    insmod ieee1275_fb
    insmod vbe
    insmod vga
    insmod video_bochs
    insmod video_cirrus
  fi
}
load_video
insmod gfxterm
insmod part_msdos
insmod png
GRUB_TERMINAL=gfxterm
GRUB_GFXMODE=auto
GRUB_BACKGROUND="splash.png"
### END background setup ###

A imagem de fundo é um arquivo PNG 640x480 (que dimensionei para dimensionar com o gimp) Usando o GRUB 2.02 Beta2

Outras pesquisas indicam que esta parte:

GRUB_TERMINAL=gfxterm
GRUB_GFXMODE=auto
GRUB_BACKGROUND="splash.png"

usa variáveis que são usadas pelos scripts de atualização e pertencem ao / etc / default / grub e não aparecem desta forma no grub.cfg, então estou certo de que essas linhas estão erradas.

EDIT: Eu fiz alguns ajustes, mas ainda não há alegria. Aqui está um pastebin da seção relevante (eu excluí as entradas de menu irrelevantes, pois elas funcionam bem no modo de texto e não são o problema)

    
por Elder Geek 16.11.2016 / 18:05

2 respostas

2

Você precisa adicionar a próxima linha ao seu grub.cfg antes dos menus. Uma vez que é feito sob encomenda e você não vai usar update-grub você não deve ter nenhum problema:

 background_image /boot/Your_image.png

Agora, se você quiser ter um plano de fundo diferente para suas distros, basta adicionar a linha no menu. Por exemplo, esta é a parte onde meus menus começam; Como você pode ver, eu tenho um fundo padrão antes dos menus para que, quando o grub iniciar, tenha um fundo, e depois disso cada menu / submenu tenha seu próprio fundo:

background_image /boot/SolusOS-splash.png

set color_normal=white/black
set color_highlight=black/white

submenu "Debian 8.1 -->"{
     submenu "Debian 8.1 i386 -->"{         
            background_image    /boot/DebianLava-splash.png         
            set iso=/boot/ISOs/debian-live-8.1.0-i386-gnome-desktop.iso
          ....

EDITAR: Aqui estão as entradas do caminho de pesquisa (lembre-se de que o uuid é o ID do meu usb) não sei se isso pode ser o seu problema:

set boot_uuid=D042-8A53    
set root_uuid=D042-8A53

search --fs-uuid $root_uuid --set=root
search --fs-uuid $boot_uuid --set=grub_boot
if [ $boot_uuid == $root_uuid ]
then
    set grub_boot=($grub_boot)/boot
else
    set grub_boot=($grub_boot)
fi
    
por 24.01.2017 / 13:51
0

Como minhas habilidades de codificação claramente não estavam à altura dessa tarefa, desenvolvi um método para resolver esse problema instalando temporariamente um sistema Lubuntu ao vivo na unidade flash e utilizando o grub customizer para me dar um ponto de partida de trabalho. Eu sistematicamente passei o código comentando linhas e seções que eu achava que poderiam ser desnecessárias para os meus propósitos, testando mudanças enquanto eu prosseguia. Um exemplo com comentários (sem as entradas do menu) pode ser encontrado aqui para aqueles que possam estar interessados no processo. Abaixo está a seção de código testada (usada para o Boot Legacy ) após a edição que acabei removendo a maioria dos comentários e das seções desnecessárias. Parece que a maioria dos meus problemas estava relacionada ao manuseio inadequado de linux_gfx_mode , terminal_output e background_image (e definição de raiz). Como suponho na minha edição, as variáveis são expressas diferentemente no arquivo grub.cfg do que nos scripts do grub. Não duvido que isso possa ser melhorado e, à medida que descobrir as simplificações, vou editá-las.

  set have_grubenv=true
  load_env
   set timeout=10 #added
   set default=2 #added
  menuentry_id_option=""
export menuentry_id_option
function load_video {
  if [ x$feature_all_video_module = xy ]; then
    insmod all_video
  else
    insmod efi_gop
    insmod efi_uga
    insmod ieee1275_fb
    insmod vbe
    insmod vga
    insmod video_bochs
    insmod video_cirrus
  fi
}
#if [ x$feature_default_font_path = xy ] ; then
#font=unicode
#else
##Scrapped if-then-else above required? - NO?
insmod part_msdos
insmod ext2
search --no-floppy --set=root --label freedom
    font=/boot/grub/fonts/unicode.pf2
fi
if loadfont $font ; then
  set gfxmode=auto
  load_video
  insmod gfxterm
  set locale_dir=/boot/grub/locale
  set lang=en_US
  insmod gettext
fi
terminal_output gfxterm
insmod part_msdos
insmod ext2
search --set=root --label freedom
### Begin Background setup ###
insmod png
set menu_color_normal=yellow/black
set menu_color_highlight=black/light-gray
if background_image /boot/grub/splash.png; then
  true
else
  set menu_color_normal=green/black
  set menu_color_highlight=black/light-gray
fi
### END Background setup ###

### BEGIN setup graphics ###
function gfxmode {
    set gfxpayload="${1}"
    if [ "${1}" = "keep" ]; then
        set vt_handoff=vt.handoff=7
    else
        set vt_handoff=
    fi
}
if [ "${recordfail}" != 1 ]; then
  if [ -e ${prefix}/gfxblacklist.txt ]; then
    if hwmatch ${prefix}/gfxblacklist.txt 3; then
      if [ ${match} = 0 ]; then
        set linux_gfx_mode=keep
      else
        set linux_gfx_mode=text
      fi
    else
      set linux_gfx_mode=text
    fi
  else
    set linux_gfx_mode=keep
  fi
else
  set linux_gfx_mode=text
fi
export linux_gfx_mode
### End setup graphics ###

Fontes:

link

link

link

    
por 30.01.2017 / 23:23

Tags