Écran de démarrage personnalisé sur Raspbian Jessie?

8

Beaucoup de sites Web expliquent comment faire un écran de démarrage sur le Pi avec SysV init, mais je n'ai trouvé aucune information sur la façon de le faire avec systemd sur Jessie. J'ai juste essayé de "convertir" le script init en un service systemd, mais cela ne fait rien.

Quelqu'un a-t-il réussi à faire cela ou des conseils utiles?

Kirby
la source
avez-vous essayé de chercher sans spécifier le Pi?
Steve Robillard,
faire une recherche sans spécifier Pi, serait le plymouth? wiki.debian.org/plymouth . J'utilise toujours Wheezy, donc je ne peux pas en être sûr ...
eri0o
Moi aussi je cherche une solution sur Jessie / RPi ... avez-vous eu de la chance? Les solutions de plymouth semblent nécessiter plymouth-drm qui ne parvient pas à s'installer
jpw

Réponses:

2

Oh, je l'ai fait, mais c'était un PITA complet et complet.

Tout d'abord, les fichiers plymouth habituels, 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

Et puis 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);

Ceux-ci vont ensuite dans les endroits appropriés /usr/share/plymouth/themes/mythemeavec mytheme.png.

Ensuite, vous activez mytheme avec la plymouth-set-default-themecommande.

Maintenant, une ruse. plymouth ne peut lire que les 1024 premiers octets de la cmdline du noyau ... mais, le chargeur Rpi PRÉPEND les choses à / proc / cmdline, donc vous pouvez PENSER que vous l'avez fait correctement, mais si vous le faites cat /proc/cmdlineplus tard, vous constaterez peut-être que vos paramètres sont en fait tomber la limite de 1024 octets. Vous devez donc ajouter très tôt les paramètres Splash silencieux et Plymouth dans cmdline.txt.

J'ai mon cmdline.txt défini sur cela (mais nous utilisons l'écran tactile adafruit, donc 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

Maintenant, vous devez également utiliser un initramfs, car l'écran de démarrage est activé à partir des premiers scripts de démarrage. C'est généralement aussi simple que d'exécuter update-initramfset de spécifier initramfs initrd.img-4.1.9-v7(ou similaire) dans /boot/config.txt.

Dans mon cas, j'ai également dû mettre à jour plymouth car la version livrée avec Jessie entraînerait une défaillance du pilote framebuffer et, par conséquent, je ne pouvais pas le faire fonctionner sur l'écran tactile d'Adafruit.

Après cela, il a commencé à travailler pour moi. Mais je voulais aussi un écran "éteindre en toute sécurité" à la fin, car le Rpi n'a pas de matériel pour s'éteindre. J'ai donc ajouté un script systemd pour cela:

[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

Cela fait maintenant au moins 6 mois que je l'ai fait, mais j'espère que cela est utile.

Modifier: ajoutez quelques astuces supplémentaires.

Vous pouvez déboguer des thèmes plymouth comme ça. Démarrez plymouthd en mode débogage, par exemple:

plymouthd --debug --debug-file=/tmp/plymouth-debug-out

Et puis vous pouvez tester votre thème en utilisant:

plymouth --show-splash
plymouth --quit

C'est à ce stade que j'ai découvert que j'avais une faute de segmentation.

Vous pouvez également arrêter votre processus de démarrage et passer dans un shell pour le tester dans un environnement au démarrage. Modifiez /boot/cmdline.txt et ajoutez break=top, ou voyez ici pour plus d'informations à ce sujet.

Ce sont toutes des astuces que j'ai utilisées et j'y suis finalement arrivé. Mais comme je l'ai dit, c'était un PITA.

izak
la source
Je ne peux pas le faire fonctionner. Peut-être que je dois mettre les commandes put plus tôt dans la ligne de commande? EDIT: le chat /proc/cmdline|wc -cdit que ce n'est que 508 octets, cependant.
Kirby
J'ai ajouté plus de détails sur un shell de débogage au démarrage et testé le thème séparément.
izak
Cool merci. Je jetterai un œil demain ou la semaine prochaine.
Kirby
Comment avez-vous réussi à mettre à jour plymouth?
J'ai compilé à partir de la source. Je suis un ancien dans la création de paquets Debian, j'ai donc téléchargé la source depuis packages.debian.org et utilisé dpkg-buildpackage pour le construire. Cela peut être fait sur le pi, si vous voulez, mais je pense que je l'ai construit dans un environnement chroot. Je ne me souviens pas exactement, vous voyez :-)
izak
1

Vous pouvez utiliser un écran tactile. Écran de démarrage personnalisé

Alfredo Pons Menargues
la source
C'est la façon de le faire sur les anciennes versions de Debian qui utilisaient SysV Init. Jessie utilise systemd, donc cela ne fonctionnera pas avec.
Kirby
Cela fonctionne parfaitement avec systemd. Maintenant, je le fais dans Debian Stretch et fonctionne parfaitement en suivant les étapes du howto.
Alfredo Pons Menargues
Cela fonctionne dans Jessie. J'ai trouvé que l'écran de démarrage s'afficherait pendant des temps incohérents - corrigé en ajoutant "sleep 5" avant de quitter dans la méthode do_start ().
Greg T
0

La réponse de @izak fonctionne, mais vous rencontrerez probablement toujours le problème de la défaillance de Plymouth lors de l'utilisation du package Jessie par défaut. Pour corriger le segfault, vous devrez installer Plymouth à partir du référentiel de test.

Suivez les instructions de la documentation AptPreferences et exécutez ce qui suit pour mettre à jour votre package Plymouth:

apt install plymouth/testing

Cela a tout réglé pour moi!

(Je n'ai pas pu poster ceci comme un commentaire sur @izak son post)

Bob Van de Vijver
la source