LM 16 Cinnamon: Кастомизируем Grub

/ Просмотров: 3322
Метки: , ,

Вообще-то дело простое, – для тех, кто уже им занимался. Я полагал, что об этом и писать не стóит, однако ребята-мантайнеры не дремлют и подбрасывают нам новые загадки, чтобы и мы не скучали smile

Выяснилось, что в файле /etc/grub.d/06_mint_theme две последние секции вообще закомментированы. Ладно, не проблема; но... Обычный способ, т.е. правка 16-й строки до состояния

for i in {/boot/grub,/usr/share/images/desktop-base}/картинка.{png,tga,jpg,jpeg} ; do

не приводит к появлению в меню grub'a картинки. Перепроверка формата картинок ничего не дала (напомню, они должны быть 8-битные и rgb, а не индексированные, размер и разрешение можно применять по своему монитору, да еще и проверить в консоли grub'a командой vbeinfo, что оно поддерживается). Тут меня слегка заколдобило и я решил добиться желаемого во что бы то ни стало.

Note:   Федорчук однажды заметил, что загрузчик – не та программа, с которой сильно хочется экспериментировать. Я придерживался ровно такого же мнения, но лишь до тех пор, пока не ввел "систему запасных парашютов". Так как у меня три ОСи, и каждая не только установлена на отдельный винт, но и снабжена своим grub'ом, я перестал бояться. В крайнем случае, если удастся-таки угробить один grub, нужно просто зайти в меню выбора загрузочного устройства (у меня F11 при загрузке) и загрузиться с одного из работающих grub'ов. Кроме того, у меня в запасе диск с Super Grub2 Disk, который можно взять на офсайте программы.

Не буду описывать все свои пляски и модели бубнов, просто приведу результат.

Определимся с тем, чего хотим добиться:

1) заменить скучный черный фон меню grub'a своей картинкой;
2) изменить цвет (и, опционально, шрифт) пунктов меню.

Нельзя сказать, чтобы мы хотели чего-нибудь чрезмерного, не правда ли?

Первоначально меню выглядит так:

grub_default

После кастомизации:

grub_custom

Первое

Кстати:   не устану напоминать себе и читателям о необходимости делать бэкапы всех важных, а тем более системных файлов перед их редактированием!

Приводим файл /etc/grub.d/06_mint_theme к следующему виду:

#!/bin/bash -e
 
source /usr/lib/grub/grub-mkconfig_lib
 
set_mono_theme()
{
  cat << EOF
set menu_color_normal=white/black
set menu_color_highlight=white/light-gray
EOF
}
# check for usable backgrounds
use_bg=true
if [ "$GRUB_TERMINAL_OUTPUT" = "gfxterm" ] ; then
# В следующей строке задаём имя картинки и возможные типы
# (саму картинку кладем в /boot/grub)
 for i in {/boot/grub,/usr/share/images/desktop-base}/наша_картинка.{png,tga,jpg,jpeg} ; do
    if is_path_readable_by_grub $i ; then 
      bg=$i
      case ${bg} in
        *.png)		reader=png ;;
        *.tga)		reader=tga ;;
        *.jpg|*.jpeg)	reader=jpeg ;;
      esac
      if test -e /boot/grub/${reader}.mod ; then
        echo "Found Debian background: `basename ${bg}`" >&2
        use_bg=true  # Была изначально закомментирована
        break
      fi
    fi
  done
fi
 
# set the background if possible
if ${use_bg} ; then
  prepare_grub_to_access_device `${grub_probe} --target=device ${bg}`
  cat << EOF
insmod ${reader}
if background_image `make_system_path_relative_to_its_root ${bg}` ; then
# Две строки ниже определяют цвет пунктов меню
  set color_normal=green/black # Шрифт/фон невыделенного пункта
  set color_highlight=red/white # Шрифт/фон выделенного пункта
else
EOF
fi
 
# otherwise, set a monochromatic theme for Ubuntu
if ${use_bg} ; then
  set_mono_theme | sed -e "s/^/  /g"
  echo "fi"
else
set_mono_theme
fi

Второе

Раньше первого шага было достаточно, теперь же, как выяснилось, без явного указания фоновой картинки в файле /etc/default/grub эту картинку grub самостоятельно найти не может.

Опять-таки для простоты приведу полностью файл /etc/default/grub:

# Если правишь этот файл, запусти опосля 'sudo update-grub', чтобы сгенерировать
# /boot/grub/grub.cfg.
# Чтобы поиметь полную документацию по опциям этого файла, забей в консоли:
#   info -f grub -n 'Simple configuration'
GRUB_DEFAULT=0
#GRUB_HIDDEN_TIMEOUT=0
GRUB_HIDDEN_TIMEOUT_QUIET=true
GRUB_TIMEOUT=10
GRUB_DISTRIBUTOR=`lsb_release -i -s 2> /dev/null || echo Debian`
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"
GRUB_CMDLINE_LINUX=""
# Uncomment to enable BadRAM filtering, modify to suit your needs
# Раскомменти, чтобы включить фильтрацию BadRAM, и измени как тебе надо
# This works with Linux (no patch required) and with any kernel that obtains
# the memory map information from GRUB (GNU Mach, kernel of FreeBSD ...)
#GRUB_BADRAM="0x01234567,0xfefefefe,0x89abcdef,0xefefefef"
# Раскомментировать, чтобы выключить графику (grub-pc only)
#GRUB_TERMINAL=console
# The resolution used on graphical terminal
# note that you can use only modes which your graphic card supports via VBE
# you can see them in real GRUB with the command `vbeinfo'
#GRUB_GFXMODE=640x480
GRUB_BACKGROUND=/boot/grub/наша_картинка.png
# Свой шрифт
GRUB_FONT=/boot/grub/fonts/dejavusm.pf2
# Uncomment if you don't want GRUB to pass "root=UUID=xxx" parameter to Linux
#GRUB_DISABLE_LINUX_UUID=true
# Uncomment to disable generation of recovery mode menu entries
#GRUB_DISABLE_RECOVERY="true"
# Uncomment to get a beep at grub start
#GRUB_INIT_TUNE="480 440 1"

Понятное дело, в 23-ей строке надо прописать свою картинку, а в 25-й – свой шрифт, при наличии такового.

Третье — важное послесловие

Если кто решит пойти по моим стопам, должен предупредить: всё вышеописанное касается машины со старой доброй BIOS. Недавно установил ребятишкам, своим родственникам, Росинку 2013 alpha на новый компьютер с EFI, и там этот мой рецепт, механически воспроизведенный, не сработал: при генерации файла /boot/grub/grub.cfg grub начал жаловаться, что не находит путей. Времени у меня не было, и я быстренько вернул всё "взад как было", пообещав как-нибудь прийти к ним в гости и разобраться с этим вопросом. Если разберусь – дополню сей дневниковый топик.

UPD:   ...А потом случилась с этой кастомизацией штука еще хлеще (см. здесь) которая, конечно, сделала жизнь интересней, но отнюдь не легче...
Оставьте комментарий

Комментарий будет опубликован после проверки

(обязательно)