Стартовые красоты с fbsplash

Как правило, то, чем мы собираемся сегодня заняться, не приносит никакой пользы, кроме разве что эстетической. Но иногда хочется красоты. В том числе и при стартовой загрузке системы. Все user-friendly дистрибутивы балуют своих пользователей симпатичными графическими заставками и последним это, вроде бы, нравится. Что касается пользователей дистрибутивов типа "сделай сам", изначально заставка при загрузке считается лишней и не ставится по-умолчанию. Но мы можем это легко исправить. В течение десяти-пятнадцати минут. Тем, кто хотел бы настроить fbsplash, посвящается. Начнём.

Настройки ядра

Входим в директорию с исходниками ядра, запускаем menuconfig:

# cd /usr/src/linux-3.8.2-gentoo/
# make menuconfig

Надо отметить, что рекомендуемое в большинстве источников включение initramfs совершенно необязательно для наших целей (не будет splash-картинки с начала загрузки), у автора этих строк работает и без него. Если читатель собирается поступить также, первые два блока — General Setup и Device Drivers — можно смело игнорировать:

General setup  --->
    [*] Initial RAM filesystem and RAM disk (initramfs/initrd) support
Device Drivers  --->
    [*] Block devices  --->
        <*>   RAM block device support

Device Drivers  --->
    Graphics support  --->
        {*} Support for frame buffer devices  --->
            *** Frame buffer hardware drivers ***

Готово. Собираем ядро:

# make bzImage modules modules_install install

Пока на этом всё. Займёмся поиском и установкой нужного софта.

Настройки fbsplash

Скачиваем нужные заставки. Можно найти стандартные из репозитария gentoo, можно поставить другие. Пойдём по второму пути.

Скачайте этот файл. Имеющиеся там разрешения экрана:

1280×800
1024×768
1280×1024
1600×1200
1680×1050
1440×900

Не будет большой беды, если вашего разрешения нет. Это исправляется путём правки файла .cfg и переименованием его. Пример для экрана с разрешением 1366x768:

# 1440x900.cfg
#
bgcolor=0

tx=32
ty=27
tw=1305
th=684

text_x=7
text_y=741
text_size=13
text_color=0xdedede

pic=/etc/splash/powered_by_gentoo/images/verbose_1366x768.jpg
silentpic=/etc/splash/powered_by_gentoo/images/silent_1366x768.jpg

# progress bar
box silent noover 0 761 1305 768 #221f29
box silent inter 0 762 0 767 #221f29
box silent 0 761 1305 767 #ececec

# border of the progress bar
box silent 0 761 1305 761 #221f29
box silent 0 664 1305 664 #221f29
box silent 0 664 0 664 #221f29
box silent 1305 664 1305 664 #221f29

Переименовываем:

$ mv 1440x900.cfg 1366x768.cfg

Теперь следует изменить в графическом редакторе размер изображений silent_1440x900.jpg и verbose_1440x900.jpg на свои, и также переименовать их.

Обеспечить красоту призван патч bootsplash. Для старых версий ядра его придётся качать отдельно, в новые ядра (3.x ?) он уже включен. Также устанавливаем splashutils, поправив флаги в случае, если того требует emerge:

$ emerge -va splashutils
# emerge splashutils

Распаковываем наши изображения в директорию /etc/splash/ (или копируем туда свои):

# tar xvzf powered_by_gentoo_v0.7.tar.gz -C /etc/splash

Наиболее удобным способом для создания initial ram filesystem автор считает использование genkernel, поэтому решившим собрать ядро с поддержкой initramfs рекомендуется ставить его и делать всё в соответствии со своими настройками. Пример:

# emerge genkernel
# cd /usr/src/linux-3.8.2-gentoo/
# genkernel initramfs --splash=powered_by_gentoo --splash-res=1366x768

Дописываем к строке загрузчика в /boot/grub/menu.lst (справедливо для grub-legasy):

# menu.lst
#
default 0
timeout 30
splashimage=(hd0,1)/boot/grub/splash.xpm.gz
title Gentoo Linux 3.8.2-gentoo-iniram root (hd0,1)
kernel /boot/vmlinuz-3.8.2-gentoo root=/dev/ram0 real_root=/dev/sda3 splash=silent,theme:powered_by_gentoo console=tty1
initrd /boot/initramfs-genkernel-x86_64-3.8.2-gentoo

Если intramfs не используется, прописывать всё то же самое, но без root=/dev/ram0 real_root=/dev/sda3 и без указания последней строки.

В случае с Grub2:

# /etc/default/grub
GRUB_DISTRIBUTOR="Gentoo"

GRUB_DEFAULT=0
GRUB_HIDDEN_TIMEOUT=0
GRUB_HIDDEN_TIMEOUT_QUIET=true
GRUB_TIMEOUT=10
GRUB_CMDLINE_LINUX_DEFAULT="vga=0x0362 splash=silent,theme:powered_by_gentoo console=tty1 quiet
GRUB_GFXPAYLOAD_LINUX=1024x768x24
GRUB_GFXMODE=1024x768x24

Перезагружаемся. Наслаждаемся стартовыми красотами.

silent mode

silent mode

verbose mode

fbspash verbose mode

Готово! При нажатии клавиши F2 вы сможете перейти в режим verbose.

Кстати, вопреки утверждениям сторонников systemd, которые как мантру повторяют, что systemd загружает ОС намного быстрее, OpenRC не дал автору сего поста вдоволь налюбоваться содеянным. Gentoo загрузилась очень быстро.

Мы пойдём дальше. Заставка в tty

Да, все дистрибутивы, ориентированные на новичков, имеют splash-картинку. Но многие ли из них могут похвастаться красивым терминалом? Не эмулятором терминала, а самим терминалом. Мы же пойдём дальше и настроим эту фичу.

Это уже не укладывается в указанные в начале поста 10-15 минут. Это дополнительное действо, вы можете от него отказаться.

В ядре должно быть отключено!:

Device Drivers  --->
    Graphics support  --->
        Support for frame buffer devices
            [ ] Enable Tile Blitting Support

И, наоборот, включена опция:

Graphics support  --->
    Console display driver support
        [*] Support for the Framebuffer Console decorations

Вот так:

vesa vga framebuffer

Теперь пересоберите splashutils с флагом "fbcondecor" или добавьте этот флаг в make.conf и скомандуйте:

# emerge --update --newuse --deep @world

Следующие шаги достаточно просты:

Прописать в /etc/conf.d/fbcondecor:

#fbcondecor
#
FBCONDECOR_TTYS="1 2 3 4 5 6"
FBCONDECOR_TTY_MAP="1:powered_by_gentoo 2:powered_by_gentoo 3:powered_by_gentoo 4:powered_by_gentoo 5:powered_by_gentoo 6:powered_by_gentoo"

где TTYS — терминалы, на которых будет запускаться изображение

TTY_MAP — отображение в формате "номер tty:тема"

Как вы уже, вероятно, поняли на разных терминалах могут быть разные темы.

Стартовать fbcondecor при запуске системы:

# rc-update add fbcondecor default

Менять тему можно так:

$ splash_manager -c set -t powered_by_gentoo --tty=2

где powered_by_gentoo — название темы, а --tty=2 — номер терминала, где будет запущена тема.

И последний штрих: поправить загрузчик. На этот раз пример для ядра без initramfs:

# menu.lst
#
title Gentoo Linux 3.8.2-gentoo
root (hd0,1)
kernel /boot/vmlinuz-3.8.2-gentoo root=/dev/sda3 splash=silent,theme:powered_by_gentoo console=tty1 video=vesafb:ywrap,mtrr:3 vga=0x0362

Параметр vga должен быть указан для вашего разрешения экрана. В примере это 1366x678.

Итог:

powered_by_gentoo

Теперь можно отказаться от мыши и иксов ;)