Oh, lo he hecho, pero fue una PITA completa y absoluta.
Primero, los archivos habituales de Plymouth, 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
Y luego 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);
Estos luego van en los lugares relevantes /usr/share/plymouth/themes/mytheme
junto con mytheme.png.
Luego habilitas mytheme con el plymouth-set-default-theme
comando.
Ahora algunos trucos. plymouth solo puede leer los primeros 1024 bytes del cmdline del kernel ... pero, el cargador Rpi PREPONE cosas a / proc / cmdline, por lo que puede CREER que lo hizo bien, pero si más cat /proc/cmdline
tarde, puede encontrar que su configuración de hecho caerse del límite de 1024 bytes. Por lo tanto, debe agregar la presentación silenciosa y plymouth ignorar la configuración muy temprano en cmdline.txt.
Tengo mi cmdline.txt configurado para esto (pero usamos la pantalla táctil adafruit, así que 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
Ahora, también debe usar un initramfs, porque la pantalla de inicio está habilitada desde los scripts de inicio temprano. Esto suele ser tan fácil como ejecutar update-initramfs
y especificar initramfs initrd.img-4.1.9-v7
(o similar) en /boot/config.txt.
En mi caso, también tuve que actualizar plymouth porque la versión que se incluye con Jessie sería predeterminada en el controlador de framebuffer y, como resultado, no pude hacerlo funcionar en la pantalla táctil de adafruit.
Después de eso, comenzó a funcionar para mí. Pero también quería una pantalla "segura para apagar" al final, ya que el Rpi no tiene hardware para apagarse. Entonces agregué un script systemd para eso:
[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
Ahora han pasado al menos 6 meses desde que hice esto, pero espero que esto sea útil.
Editar: agregue algunas sugerencias más.
Puede depurar temas de Plymouth así. Inicie plymouthd en modo de depuración, por ejemplo:
plymouthd --debug --debug-file=/tmp/plymouth-debug-out
Y luego puedes probar tu tema usando:
plymouth --show-splash
plymouth --quit
Fue durante esta etapa que descubrí que tenía un defecto de seguridad.
También puede detener su proceso de arranque y colocarlo en un shell para probar esto en un entorno de tiempo de arranque. Edite /boot/cmdline.txt y agregue break=top
, o vea aquí para obtener más información al respecto.
Todos estos son trucos que usé y finalmente llegué allí. Pero como dije, fue una PITA.