Tela de apresentação personalizada em Jessie Raspbian?

8

Muitos sites explicam como fazer uma tela inicial no Pi com o SysV init, mas não consegui encontrar nenhuma informação sobre como fazê-lo com o systemd em Jessie. Tentei apenas "converter" o script init em um serviço systemd, mas ele não faz nada.

Alguém conseguiu fazer isso ou algum conselho útil?

Kirby
fonte
você tentou pesquisar sem especificar o Pi?
9788 Steve Rogillard #
fazer uma pesquisa sem especificar Pi, seria o plymouth? wiki.debian.org/plymouth . Eu ainda estou usando Wheezy, então não pode ter certeza ...
eri0o
Eu também estou procurando uma solução em Jessie / RPi ... você teve alguma sorte? As soluções Plymouth parecem exigir Plymouth-drm que falha para instalar
jpw

Respostas:

2

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/mythemeexibidos nos locais relevantes junto com mytheme.png.

Então você ativa mytheme com o plymouth-set-default-themecomando

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/cmdlinemais 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-initramfse 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.

izak
fonte
Não consigo fazer funcionar. Talvez eu precise colocar os comandos anteriores no cmdline? EDIT: cat /proc/cmdline|wc -cdiz que são apenas 508 bytes, no entanto.
Kirby
Adicionei mais alguns detalhes sobre um shell de depuração na inicialização e testei o tema separadamente.
Izak 22/03/16
Legal, obrigado. Vou dar uma olhada amanhã ou na próxima semana.
Kirby
Como você conseguiu atualizar o plymouth?
Eu compilei da fonte. Eu sou experiente na criação de pacotes debian, então baixei o código fonte de packages.debian.org e usei o dpkg-buildpackage para compilá-lo. Isso pode ser feito no pi, se você quiser, mas acho que o construí em um ambiente chroot. Não me lembro exatamente, você vê :-)
izak
1

Você pode usar asplashscreen. Tela de inicialização personalizada

Alfredo Pons Menargues
fonte
Esta é a maneira de fazê-lo nas versões antigas do Debian que usavam o SysV Init. Jessie usa systemd, para que não funcione.
26616 Kirby
Dessa forma, funciona perfeitamente com o systemd. Agora eu faço isso no Debian Stretch e funciona perfeitamente seguindo as etapas do howto.
Alfredo Pons Menargues 27/02
Isso funciona em Jessie. Eu descobri que a tela inicial mostraria tempos inconsistentes - corrigida adicionando "sleep 5" antes de sair no método do_start ().
Greg T
0

A resposta do @izak funciona, mas você provavelmente ainda encontrará o problema de segfaulting do Plymouth ao usar o pacote Jessie padrão. Para corrigir o segfault, você precisará instalar o Plymouth a partir do repositório de testes.

Siga as instruções da documentação do AptPreferences e execute o seguinte para atualizar seu pacote Plymouth:

apt install plymouth/testing

Isso corrigiu tudo para mim!

(Não pude postar isso como um comentário no @izak post dele)

Bob Van de Vijver
fonte