О, я сделал это, но это была полная и полная ПИТА.
Во-первых, обычные файлы Плимута, mytheme.plymouth:
[Plymouth Theme]
Name=My theme
Description=Raspberry Pi theme
ModuleName=script
[script]
ImageDir=/usr/share/plymouth/themes/mytheme
ScriptFile=/usr/share/plymouth/themes/mytheme/mytheme.script
И тогда mytheme.script
screen_width = Window.GetWidth();
screen_height = Window.GetHeight();
theme_image = Image("mytheme.png");
resized_wallpaper_image = theme_image.Scale(screen_width, screen_height);
sprite = Sprite(resized_wallpaper_image);
sprite.SetZ(-100);
message_sprite = Sprite();
message_sprite.SetPosition(screen_width * 0.1, screen_height * 0.8, 10000);
fun message_callback (text) {
my_image = Image.Text(text, 1, 1, 1);
message_sprite.SetImage(my_image);
}
Plymouth.SetUpdateStatusFunction(message_callback);
Затем они идут в соответствующие места /usr/share/plymouth/themes/mytheme
вместе с mytheme.png.
Затем включите mytheme с помощью plymouth-set-default-theme
команды.
Теперь немного обмана. plymouth может читать только первые 1024 байта cmdline ядра ... но загрузчик Rpi ПРЕДОСТАВЛЯЕТ вещи в / proc / cmdline, так что вы можете ДУМАТЬ, что сделали все правильно, но если cat /proc/cmdline
позже, вы можете обнаружить, что ваши настройки действительно опускаться до 1024 байтов. Таким образом, вы должны добавить тихий всплеск и игнорировать настройки plymouth очень рано в cmdline.txt.
Мой cmdline.txt настроен на это (но мы используем сенсорный экран adafruit, так что ymmv):
dwc_otg.lpm_enable=0 console=tty3 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait quiet splash plymouth.ignore-serial-consoles fbcon=map:10 fbcon=font:VGA8x8
Теперь вы также должны использовать initramfs, потому что заставка включена из сценариев раннего запуска. Обычно это так же просто, как запустить update-initramfs
и указать initramfs initrd.img-4.1.9-v7
(или аналогично) в /boot/config.txt.
В моем случае мне также пришлось обновить Плимут, потому что версия, поставляемая с Джесси, могла вызвать ошибку в драйвере кадрового буфера, и в результате я не смог заставить его работать на сенсорном экране adafruit.
После этого он начал работать на меня. Но я также хотел, чтобы в конце экрана было «безопасно выключать», так как Rpi не имеет аппаратного обеспечения, чтобы выключать себя. Поэтому я добавил для этого сценарий systemd:
[Unit]
Description=Tell Plymouth to show a safe-to-power-off message
DefaultDependencies=no
After=umount.target
Before=shutdown.target
[Service]
ExecStart=-/bin/plymouth update --status " SAFE TO POWER DOWN"
Type=oneshot
[Install]
WantedBy=shutdown.target
С тех пор, как я это сделал, прошло не менее 6 месяцев, но я надеюсь, что это полезно.
Изменить: добавить еще несколько подсказок.
Вы можете отлаживать темы Плимута так. Запустите plymouthd в режиме отладки, например:
plymouthd --debug --debug-file=/tmp/plymouth-debug-out
И тогда вы можете проверить свою тему, используя:
plymouth --show-splash
plymouth --quit
Именно на этом этапе я узнал, что у меня есть ошибка.
Вы также можете остановить процесс загрузки и перейти в оболочку, чтобы проверить это в среде загрузки. Отредактируйте /boot/cmdline.txt и добавьте break=top
, или посмотрите здесь для получения дополнительной информации об этом.
Это все трюки, которые я использовал, и я наконец-то туда попал. Но, как я уже сказал, это была PITA.