Layar splash khusus pada Raspbian Jessie?

8

Banyak situs web menjelaskan cara melakukan splash screen pada Pi dengan SysV init, tapi saya tidak dapat menemukan info tentang cara melakukannya dengan systemd di Jessie. Saya mencoba hanya "mengubah" skrip init ke layanan systemd, tetapi tidak melakukan apa-apa.

Adakah yang berhasil melakukan ini atau saran yang bermanfaat?

Kirby
sumber
Sudahkah Anda mencoba mencari tanpa menentukan Pi?
Steve Robillard
melakukan pencarian tanpa menentukan Pi, akankah plymouth? wiki.debian.org/plymouth . Saya masih menggunakan Wheezy, jadi tidak bisa memastikan ...
eri0o
Saya juga mencari solusi pada Jessie / RPi ... apakah Anda beruntung? Solusi plymouth tampaknya membutuhkan plymouth-drm yang gagal dipasang
jpw

Jawaban:

2

Oh saya sudah melakukannya, tapi itu adalah PITA yang lengkap dan mengucapkan.

Pertama, file plymouth yang biasa, 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

Dan kemudian mitos

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

Ini kemudian pergi di tempat-tempat yang relevan /usr/share/plymouth/themes/mythemebersama dengan mytheme.png.

Kemudian Anda mengaktifkan mitos dengan plymouth-set-default-themeperintah.

Sekarang beberapa tipu daya. plymouth hanya dapat membaca 1024 byte pertama dari kernel cmdline ... tetapi, loader Rpi MENYIAPKAN hal-hal ke / proc / cmdline, jadi Anda mungkin BERPIKIR Anda melakukannya dengan benar, tetapi jika cat /proc/cmdlinekemudian, Anda mungkin menemukan bahwa pengaturan Anda sebenarnya jatuh dari batas 1024 byte. Jadi Anda harus menambahkan pengaturan splash dan plymouth abaikan sangat awal di cmdline.txt.

Saya mengatur cmdline.txt untuk ini (tetapi kami menggunakan layar sentuh adafruit, jadi 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

Sekarang, Anda juga harus menggunakan initramfs, karena layar splash diaktifkan dari skrip startup awal. Ini biasanya semudah menjalankan update-initramfsdan menetapkan initramfs initrd.img-4.1.9-v7(atau serupa) di /boot/config.txt.

Dalam kasus saya, saya juga harus memperbarui plymouth karena versi yang dikirimkan dengan Jessie akan segfault pada driver framebuffer dan akibatnya saya tidak bisa membuatnya bekerja pada layar sentuh AdWords.

Setelah itu, mulai bekerja untuk saya. Tetapi saya juga menginginkan layar "aman untuk dimatikan" pada akhirnya, karena Rpi tidak memiliki perangkat keras untuk mematikannya. Jadi saya menambahkan skrip systemd untuk itu:

[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

Sekarang sudah setidaknya 6 bulan sejak saya melakukan ini, tapi saya harap ini bermanfaat.

Sunting: Tambahkan beberapa petunjuk lagi.

Anda dapat men-debug tema plymouth seperti itu. Mulai plymouthd dalam mode debug, misalnya:

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

Dan kemudian Anda dapat menguji tema Anda menggunakan:

plymouth --show-splash
plymouth --quit

Selama tahap ini saya menemukan bahwa saya mengalami segfault.

Anda juga dapat menghentikan proses boot Anda dan jatuh ke shell untuk mengujinya dalam lingkungan waktu boot. Edit / boot / cmdline.txt dan tambahkan break=top, atau lihat di sini untuk info lebih lanjut tentang itu.

Ini semua adalah trik yang saya gunakan dan akhirnya saya sampai di sana. Tapi seperti yang saya katakan, itu adalah PITA.

izak
sumber
Tidak bisa membuatnya bekerja. Mungkin saya harus meletakkan put perintah sebelumnya di cmdline? EDIT: cat /proc/cmdline|wc -cmengatakan ini hanya 508 bytes.
Kirby
Saya menambahkan beberapa detail lebih lanjut tentang shell debug saat boot, dan menguji tema secara terpisah.
izak
Keren Terimakasih. Saya akan melihat besok atau minggu depan.
Kirby
Bagaimana Anda bisa memperbarui plymouth?
Saya dikompilasi dari sumber. Saya sudah terbiasa membuat paket debian, jadi saya mengunduh sumber dari paket.debian.org dan menggunakan dpkg-buildpackage untuk membuatnya. Ini bisa dilakukan pada pi, jika Anda mau, tapi saya rasa saya membangunnya di lingkungan chroot. Saya tidak ingat persisnya, Anda lihat :-)
izak
1

Anda dapat menggunakan asplashscreen. Layar boot kustom

Alfredo Pons Menargues
sumber
Ini adalah cara melakukannya pada versi lama Debian yang menggunakan SysV Init. Jessie menggunakan systemd, jadi itu tidak akan berhasil.
Kirby
Cara ini berfungsi sempurna dengan systemd. Sekarang saya melakukannya di Debian Stretch dan bekerja dengan sempurna mengikuti langkah-langkah howto.
Alfredo Pons Menargues
Ini bekerja di Jessie. Saya menemukan bahwa layar splash akan menunjukkan waktu yang tidak konsisten - diperbaiki dengan menambahkan "sleep 5" sebelum keluar dalam metode do_start ().
Greg T
0

Jawaban oleh @izak berfungsi, tetapi Anda mungkin masih akan mengalami masalah Plymouth segfaulting saat menggunakan paket default Jessie. Untuk memperbaiki segfault, Anda perlu menginstal Plymouth dari repositori pengujian.

Ikuti instruksi dari dokumentasi AptPreferences dan jalankan yang berikut untuk memperbarui paket Plymouth Anda:

apt install plymouth/testing

Ini memperbaiki segalanya untuk saya!

(Saya tidak bisa memposting ini sebagai komentar di @izak postingannya)

Bob Van de Vijver
sumber