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

8

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

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

Kirby
источник
Вы пытались искать без указания Пи?
Стив Робиллард
делать поиск без указания Пи, будет ли Плимут? 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.

Izak
источник
Не могу заставить его работать. Может быть, мне нужно поместить команды 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 его сообщению)

Боб Ван де Вийвер
источник