Benutzerdefinierter Begrüßungsbildschirm auf Raspbian Jessie?

8

Viele Websites erklären, wie man mit SysV init einen Begrüßungsbildschirm auf dem Pi erstellt, aber ich konnte keine Informationen darüber finden, wie man es mit systemd auf Jessie macht. Ich habe versucht, das Init-Skript nur in einen Systemd-Dienst zu "konvertieren", aber es macht nichts.

Hat es jemand geschafft, dies oder hilfreiche Ratschläge zu tun?

Kirby
quelle
Haben Sie versucht zu suchen, ohne den Pi anzugeben?
Steve Robillard
Eine Suche ohne Angabe von Pi durchzuführen, wäre der Plymouth? wiki.debian.org/plymouth . Ich benutze immer noch Wheezy, kann also nicht sicher sein ...
eri0o
Auch ich suche nach einer Lösung für Jessie / RPi ... hattest du Glück? Die Plymouth-Lösungen scheinen Plymouth-Drm zu erfordern, das nicht installiert werden kann
jpw

Antworten:

2

Oh, ich habe es geschafft, aber es war eine vollständige und völlige PITA.

Erstens die üblichen Plymouth-Dateien, 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

Und dann 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);

Diese gehen dann /usr/share/plymouth/themes/mythemezusammen mit mytheme.png an die entsprechenden Stellen .

Dann aktivieren Sie Mythos mit dem plymouth-set-default-themeBefehl.

Nun ein Trick. plymouth kann nur die ersten 1024 Bytes der Kernel-Cmdline lesen ... aber der Rpi-Loader VORHANDEN Dinge an / proc / cmdline, sodass Sie vielleicht DENKEN, dass Sie es richtig gemacht haben, aber wenn Sie es cat /proc/cmdlinespäter tun , werden Sie möglicherweise feststellen, dass Ihre Einstellungen tatsächlich vorhanden sind fallen von der 1024-Byte-Grenze. Sie müssen also die Einstellungen für leises Spritzen und Plymouth-Ignorieren sehr früh in cmdline.txt hinzufügen.

Ich habe meine cmdline.txt darauf eingestellt (aber wir verwenden den Adafruit-Touchscreen, also 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

Jetzt müssen Sie auch ein initramfs verwenden, da der Begrüßungsbildschirm über die frühen Startskripte aktiviert ist. Dies ist normalerweise so einfach wie das Ausführen update-initramfsund Angeben initramfs initrd.img-4.1.9-v7(oder ähnliches) in /boot/config.txt.

In meinem Fall musste ich auch Plymouth aktualisieren, da die mit Jessie gelieferte Version im Framebuffer-Treiber fehlerhaft war und ich sie daher nicht auf dem Adafruit-Touchscreen zum Laufen bringen konnte.

Danach fing es an, für mich zu arbeiten. Aber ich wollte am Ende auch einen Bildschirm zum sicheren Ausschalten, da das Rpi keine Hardware hat, um sich selbst auszuschalten. Also habe ich ein systemd-Skript dafür hinzugefügt:

[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

Jetzt sind mindestens 6 Monate vergangen, seit ich das getan habe, aber ich hoffe, das ist nützlich.

Bearbeiten: Fügen Sie weitere Hinweise hinzu.

Sie können Plymouth-Themen wie folgt debuggen. Starten Sie plymouthd im Debug-Modus, z.

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

Und dann können Sie Ihr Thema testen mit:

plymouth --show-splash
plymouth --quit

In dieser Phase stellte ich fest, dass ich einen Segfault hatte.

Sie können den Startvorgang auch anhalten und in eine Shell einfügen, um dies in einer Startzeitumgebung zu testen. Bearbeiten Sie /boot/cmdline.txt und fügen Sie hinzu break=top, oder lesen Sie hier, um weitere Informationen dazu zu erhalten.

Das sind alles Tricks, die ich benutzt habe und die ich endlich erreicht habe. Aber wie gesagt, es war eine PITA.

izak
quelle
Kann es nicht zum Laufen bringen. Vielleicht muss ich die Befehle put früher in die cmdline setzen? EDIT: Katze /proc/cmdline|wc -csagt, dass es nur 508 Bytes ist.
Kirby
Ich habe beim Booten einige weitere Details zu einer Debug-Shell hinzugefügt und das Thema separat getestet.
Izak
Cool, danke. Ich werde morgen oder nächste Woche einen Blick darauf werfen.
Kirby
Wie haben Sie es geschafft, Plymouth zu aktualisieren?
Ich habe aus der Quelle zusammengestellt. Ich bin ein alter Hase bei der Erstellung von Debian-Paketen, daher habe ich die Quelle von packages.debian.org heruntergeladen und dpkg-buildpackage verwendet, um sie zu erstellen. Dies kann auf dem Pi gemacht werden, wenn Sie wollen, aber ich glaube, ich habe es in einer Chroot-Umgebung gebaut. Ich kann mich nicht genau erinnern, sehen Sie :-)
izak
1

Sie können asplashscreen verwenden. Benutzerdefinierter Startbildschirm

Alfredo Pons Menargues
quelle
Dies ist die Methode für alte Debian-Versionen, die SysV Init verwendet haben. Jessie benutzt systemd, damit das nicht funktioniert.
Kirby
Dieser Weg funktioniert perfekt mit systemd. Jetzt mache ich es in Debian Stretch und arbeite perfekt nach den Schritten des Howto.
Alfredo Pons Menargues
Das funktioniert in Jessie. Ich fand heraus, dass der Begrüßungsbildschirm für inkonsistente Zeiten angezeigt wird - behoben durch Hinzufügen von "sleep 5" vor dem Beenden in der Methode do_start ().
Greg T
0

Die Antwort von @izak funktioniert, aber Sie werden wahrscheinlich immer noch auf das Problem des Plymouth-Segfaulting stoßen, wenn Sie das Standard-Jessie-Paket verwenden. Um den Segfault zu beheben, müssen Sie Plymouth aus dem Test-Repository installieren.

Befolgen Sie die Anweisungen in der AptPreferences- Dokumentation und führen Sie die folgenden Schritte aus , um Ihr Plymouth-Paket zu aktualisieren:

apt install plymouth/testing

Das hat alles für mich repariert!

(Ich konnte dies nicht als Kommentar zu @izak seinem Beitrag posten)

Bob Van de Vijver
quelle