Splash
Splash — заставка при загрузке. Их на самом деле две, и они разные:
- заставка GRUB — оформление меню загрузчика: картинка, цвета, шрифт, рамка выбранного пункта. Видна до запуска ядра, анимации почти не бывает;
- заставка Plymouth — экран с логотипом после GRUB: пока грузится ядро и службы. Здесь и делают анимацию.
Обе служат одному: чтобы вместо служебного текста на корпоративной машине был логотип компании. Настраиваются они отдельно и в разных местах.
Заставка GRUB
Это тема меню загрузчика. GRUB рисует меню сам, поэтому картинку и цвета ему задают файлом темы.
Где живёт тема
/boot/grub/themes/linux-doc/
├── theme.txt # описание: что и где рисовать
├── background.png # фон меню
└── roboto16.pf2 # шрифт (формат GRUB)
Тема включается в /etc/default/grub (см. GRUB 2):
GRUB_THEME="/boot/grub/themes/linux-doc/theme.txt"
GRUB_TIMEOUT=5
GRUB_TIMEOUT_STYLE=menu
GRUB_TIMEOUT_STYLE=menu нужен, чтобы меню показывалось всегда, даже если система одна. После правки — sudo update-grub.
Как описать тему
Файл theme.txt — набор свойств и блоков. Минимальный вариант с фоном, меню и подписью:
# Общие свойства
title-text: ""
desktop-image: "background.png"
desktop-color: "#1f2430"
terminal-font: "Roboto Regular 16"
# Меню выбора
+ boot_menu {
left = 20%
top = 30%
width = 60%
height = 40%
item_font = "Roboto Regular 16"
item_color = "#c9d1d9"
selected_item_color = "#ffffff"
item_height = 24
item_spacing = 6
item_padding = 8
scrollbar = false
}
# Подпись внизу
+ label {
left = 0
top = 88%
width = 100%
align = "center"
color = "#8b93a1"
text = "linux-doc.ru"
}
Что здесь что:
desktop-image— фон меню (PNG, JPEG или TGA);desktop-color— цвет, если картинки нет;+ boot_menu— список систем: шрифт, цвета обычного и выбранного пункта, отступы;+ label— произвольная надпись (логотип, домен компании);- можно добавить
+ progress_bar { … }— полоска времени до автозагрузки.
Шрифт
GRUB не понимает обычные TTF — ему нужен формат .pf2. Конвертация:
sudo grub-mkfont -s 16 -o /boot/grub/themes/linux-doc/roboto16.pf2 \
/usr/share/fonts/truetype/roboto/Roboto-Regular.ttf
Имя шрифта для theme.txt команда печатает при конвертации — его и подставляют в item_font.
Простой вариант — только картинка
Если меню оформлять не нужно, а нужен лишь фон, хватит одной строки в /etc/default/grub:
GRUB_BACKGROUND="/boot/grub/themes/linux-doc/background.png"
и sudo update-grub.
Заставка Plymouth
Это экран, который показывается после GRUB, пока грузится ядро и службы. Здесь и делают анимацию: «дыхание» логотипа, вертушку, полоску прогресса.
Где заставка в загрузке
- прошивка → POST;
- загрузчик GRUB 2 — своя заставка (меню);
- ядро и initramfs — здесь стартует Plymouth;
- systemd — Plymouth продолжает работать как служба;
- окно входа — Plymouth завершается.
Важная деталь: Plymouth запускается из initramfs, поэтому тему обязательно нужно «зашить» в initramfs — иначе заставка не появится на раннем этапе.
Что нужно
- пакет plymouth;
- параметры ядра
quiet splash—splashвключает заставку,quietубирает сообщения ядра; - тема — каталог с описанием, скриптом и картинками.
Параметры задаются в /etc/default/grub:
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"
после чего — sudo update-grub.
Как устроена тема
/usr/share/plymouth/themes/linux-doc/
├── linux-doc.plymouth # описание темы
├── linux-doc.script # сценарий: что и как рисовать
├── background.png # фон
├── logo.png # логотип
└── progress.png # полоска прогресса
Описание темы — linux-doc.plymouth:
[Plymouth Theme]
Name=Linux Doc
Description=Заставка linux-doc.ru
ModuleName=script
[script]
ImageDir=/usr/share/plymouth/themes/linux-doc
ScriptFile=/usr/share/plymouth/themes/linux-doc/linux-doc.script
Сценарий — linux-doc.script. Язык у Plymouth свой, не JavaScript и не shell: это набор вызовов вроде Image(), Sprite(), Plymouth.Set…. Минимальная рабочая тема — фон, логотип по центру и мягкая пульсация:
# Размеры экрана
screen_width = Window.GetWidth();
screen_height = Window.GetHeight();
# Фон
background = Image("background.png");
background_sprite = Sprite(background);
background_sprite.SetX(0);
background_sprite.SetY(0);
# Логотип по центру экрана
logo = Image("logo.png");
logo_sprite = Sprite(logo);
logo_sprite.SetX(screen_width / 2 - logo.GetWidth() / 2);
logo_sprite.SetY(screen_height / 2 - logo.GetHeight() / 2);
# Пульсация: обратный вызов вызывается на каждом кадре
pulse = 0;
fun refresh_callback() {
pulse = pulse + 0.04;
logo_sprite.SetOpacity(0.7 + 0.3 * Math.Sin(pulse));
}
Plymouth.SetRefreshFunction(refresh_callback);
Анимация загрузки
Анимацию дают две вещи: «дыхание» логотипа (выше) и прогресс загрузки, который Plymouth отдаёт сам.
Прогресс приходит в обратный вызов Plymouth.SetBootProgressFunction — там progress меняется от 0 до 1. Из него делают полоску под логотипом:
# Полоска прогресса под логотипом
bar_width = 320;
bar_height = 3;
bar_x = screen_width / 2 - bar_width / 2;
bar_y = screen_height / 2 + logo.GetHeight() / 2 + 48;
bar = Image("progress.png");
bar_sprite = Sprite(bar);
bar_sprite.SetX(bar_x);
bar_sprite.SetY(bar_y);
fun boot_progress_callback(time, progress) {
if (progress < 0.02) {
bar_sprite.SetOpacity(0);
} else {
bar_sprite.SetOpacity(1);
bar_sprite.SetImage(bar.Scale(bar_width * progress, bar_height));
}
}
Plymouth.SetBootProgressFunction(boot_progress_callback);
Второй способ анимации — «вертушка»: несколько кадров spinner-1.png … spinner-8.png, которые подменяются по кругу в том же refresh_callback. Так сделана стандартная тема spinner — её стоит открыть как пример:
sudo ls /usr/share/plymouth/themes/spinner/
Язык сценариев Plymouth мало документирован — быстрее всего учиться на готовых темах из /usr/share/plymouth/themes/ и менять их под себя.
Установка темы
# пакет и стандартные темы (Debian/Ubuntu)
sudo apt install plymouth plymouth-themes
# своя тема
sudo mkdir -p /usr/share/plymouth/themes/linux-doc
sudo cp linux-doc.plymouth linux-doc.script background.png logo.png progress.png \
/usr/share/plymouth/themes/linux-doc/
# сделать темой по умолчанию и пересобрать initramfs (-R)
sudo plymouth-set-default-theme -R linux-doc
# список тем и текущая
plymouth-set-default-theme -l
plymouth-set-default-theme
Флаг -R важен: без него тема не попадёт в initramfs и не покажется на раннем этапе.
Проверка и отладка
Предпросмотр работает в текстовой консоли, а не в терминале графической сессии (переключитесь по Ctrl+Alt+F3):
sudo plymouthd --debug --debug-file=/tmp/plymouth.log
sudo plymouth --show-splash
sudo plymouth --quit
sudo cat /tmp/plymouth.log
Если заставки нет вовсе — проверьте по порядку: есть ли splash в параметрах ядра, собрана ли тема в initramfs (-R), установлен ли пакет plymouth.
Пример: оформление для Линукс Док
Одна визуальная айдентика на обе заставки — та, которую мы потом нарисуем:
- Фон
background.png(1920×1080) — тёмный, в цвете кода на сайте (#1f2430), без градиентов: чтобы не «мигало» на разных матрицах. Один и тот же файл годится и для GRUB, и для Plymouth. - Логотип
logo.png(около 400×480, с прозрачностью) — тот же пингвин, что в шапке сайта (/images/other-linux-logo.png), и под ним надпись «Линукс Док» шрифтом Roboto (как на сайте). - Полоска прогресса
progress.png— тонкая (3 px), в цвете ссылок сайта (#3a6ea5). - GRUB: фон + меню с цветами сайта (
item_color#c9d1d9, выбранный пункт — белый) + подписьlinux-doc.ruвнизу. - Plymouth: «дыхание» логотипа плюс полоска прогресса; при ожидании пароля от шифрованного диска Plymouth сам показывает поле ввода, его оформление наследуется из темы.
Файлы темы Plymouth положим в /usr/share/plymouth/themes/linux-doc/, тему GRUB — в /boot/grub/themes/linux-doc/, а исходники (PNG, theme.txt, скрипт) — в репозиторий, чтобы всё можно было пересобрать.
Как убрать заставки
- GRUB: убрать строки
GRUB_THEMEиGRUB_BACKGROUNDиз/etc/default/grub, затемsudo update-grub. - Plymouth: убрать
splashизGRUB_CMDLINE_LINUX_DEFAULTи выполнитьsudo update-grub. Параметрquietможно оставить — тогда не будет ни картинки, ни потока сообщений.
Комментарии
Пока комментариев нет.