Пользовательская заставка на Распбиана Джесси?


8

Многие веб-сайты объясняют, как сделать заставку на Pi с помощью инициализации SysV, но я не смог найти никакой информации о том, как сделать это с помощью systemd на Jessie. Я попытался просто "преобразовать" init-скрипт в systemd-сервис, но он ничего не делает.

Кто-нибудь сумел сделать это или любой полезный совет?


Вы пытались искать без указания Пи?
— Стив Робиллард

делать поиск без указания Пи, будет ли Плимут? wiki.debian.org/plymouth . Я все еще использую Wheezy, так что не могу быть уверен ...
— eri0o

Я тоже ищу решение по Джесси / RPi ... тебе повезло? Решения для plymouth требуют plymouth-drm, который не удается установить
— jpw

Ответы:


2

О, я сделал это, но это была полная и полная ПИТА.

Во-первых, обычные файлы Плимута, 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

И тогда 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);

Затем они идут в соответствующие места /usr/share/plymouth/themes/mythemeвместе с mytheme.png.

Затем включите mytheme с помощью plymouth-set-default-themeкоманды.

Теперь немного обмана. plymouth может читать только первые 1024 байта cmdline ядра ... но загрузчик Rpi ПРЕДОСТАВЛЯЕТ вещи в / proc / cmdline, так что вы можете ДУМАТЬ, что сделали все правильно, но если cat /proc/cmdlineпозже, вы можете обнаружить, что ваши настройки действительно опускаться до 1024 байтов. Таким образом, вы должны добавить тихий всплеск и игнорировать настройки plymouth очень рано в cmdline.txt.

Мой cmdline.txt настроен на это (но мы используем сенсорный экран adafruit, так что 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

Теперь вы также должны использовать initramfs, потому что заставка включена из сценариев раннего запуска. Обычно это так же просто, как запустить update-initramfsи указать initramfs initrd.img-4.1.9-v7(или аналогично) в /boot/config.txt.

В моем случае мне также пришлось обновить Плимут, потому что версия, поставляемая с Джесси, могла вызвать ошибку в драйвере кадрового буфера, и в результате я не смог заставить его работать на сенсорном экране adafruit.

После этого он начал работать на меня. Но я также хотел, чтобы в конце экрана было «безопасно выключать», так как Rpi не имеет аппаратного обеспечения, чтобы выключать себя. Поэтому я добавил для этого сценарий systemd:

[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

С тех пор, как я это сделал, прошло не менее 6 месяцев, но я надеюсь, что это полезно.

Изменить: добавить еще несколько подсказок.

Вы можете отлаживать темы Плимута так. Запустите plymouthd в режиме отладки, например:

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

И тогда вы можете проверить свою тему, используя:

plymouth --show-splash
plymouth --quit

Именно на этом этапе я узнал, что у меня есть ошибка.

Вы также можете остановить процесс загрузки и перейти в оболочку, чтобы проверить это в среде загрузки. Отредактируйте /boot/cmdline.txt и добавьте break=top, или посмотрите здесь для получения дополнительной информации об этом.

Это все трюки, которые я использовал, и я наконец-то туда попал. Но, как я уже сказал, это была PITA.


Не могу заставить его работать. Может быть, мне нужно поместить команды put ранее в cmdline? РЕДАКТИРОВАТЬ: кот /proc/cmdline|wc -cговорит, что это всего 508 байтов, хотя.
— Кирби

Я добавил некоторые подробности об отладочной оболочке при загрузке и тестировании темы отдельно.
— Изак

Хорошо, спасибо. Я посмотрю завтра или на следующей неделе.
— Кирби

Как вам удалось обновить Плимут?

Я скомпилирован из источника. Я опытный специалист по созданию пакетов Debian, поэтому я скачал исходники с packages.debian.org и использовал dpkg-buildpackage для его сборки. Это можно сделать на пи, если хотите, но я думаю, что я построил это в среде chroot. Я не могу вспомнить точно, вы видите :-)
— Изак

1

Вы можете использовать asplashscreen. Пользовательский экран загрузки


Это способ сделать это на старых версиях Debian, которые использовали SysV Init. Джесси использует systemd, так что это не сработает.
— Кирби

Этот способ отлично работает с systemd. Сейчас я делаю это в Debian Stretch и отлично работаю, следуя инструкциям.
— Альфредо Понс Менаргес

Это работает в Джесси. Я обнаружил, что заставка будет отображаться для непоследовательного времени - исправлено добавлением «sleep 5» перед выходом в методе do_start ().
— Грег Т

0

Ответ @izak работает, но вы, вероятно, все равно столкнетесь с проблемой сегфалтинга в Плимуте при использовании пакета Jessie по умолчанию. Чтобы исправить ошибку, вам потребуется установить Plymouth из репозитория тестирования.

Следуйте инструкциям из документации AptPreferences и выполните следующее для обновления вашего пакета Plymouth:

apt install plymouth/testing

Это исправило все для меня!

(Я не мог опубликовать это как комментарий к @izak его сообщению)

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.