Ah, eu já fiz, mas foi uma PITA completa e absoluta.
Primeiro, os arquivos comuns 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
E então 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);
Eles são /usr/share/plymouth/themes/mytheme
exibidos nos locais relevantes junto com mytheme.png.
Então você ativa mytheme com o plymouth-set-default-theme
comando
Agora, alguns truques. O plymouth pode ler apenas os primeiros 1024 bytes do cmdline do kernel ... mas, o carregador Rpi PREPENDE as coisas para / proc / cmdline, portanto, você PENSA que fez direito, mas se quiser cat /proc/cmdline
mais tarde poderá achar que suas configurações são de fato cair fora do limite de 1024 bytes. Portanto, você deve adicionar o splash silencioso e o plymouth ignore as configurações muito cedo no cmdline.txt.
Eu tenho meu cmdline.txt definido para isso (mas usamos a tela de toque adafruit, então 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
Agora, você também deve usar um initramfs, porque a tela inicial é ativada nos scripts de inicialização antecipada. Isso geralmente é tão fácil quanto executar update-initramfs
e especificar initramfs initrd.img-4.1.9-v7
(ou semelhante) em /boot/config.txt.
No meu caso, eu também tive que atualizar o plymouth porque a versão que acompanha Jessie falhava no driver do framebuffer e, como resultado, não consegui fazê-lo funcionar na tela de toque adafruit.
Depois disso, começou a trabalhar para mim. Mas eu também queria uma tela "segura para desligar" no final, pois o Rpi não tem hardware para desligar. Então eu adicionei um script systemd para isso:
[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
Agora já se passaram pelo menos seis meses desde que fiz isso, mas espero que seja útil.
Editar: adicione mais algumas dicas.
Você pode depurar temas plymouth como esse. Inicie o plymouthd no modo de depuração, por exemplo:
plymouthd --debug --debug-file=/tmp/plymouth-debug-out
E então você pode testar seu tema usando:
plymouth --show-splash
plymouth --quit
Foi nessa fase que descobri que tinha um segfault.
Você também pode interromper seu processo de inicialização e soltar em um shell para testar isso em um ambiente de tempo de inicialização. Edite /boot/cmdline.txt e adicione break=top
, ou veja aqui para mais informações sobre isso.
Estes são todos os truques que usei e finalmente cheguei lá. Mas como eu disse, era uma PITA.