许多网站都介绍了如何使用SysV init在Pi上进行启动屏幕显示,但是我找不到有关如何在Jessie上使用systemd进行操作的任何信息。我尝试只是将init脚本“转换”为systemd-service,但是它没有任何作用。
有没有人设法做到这一点或任何有用的建议?
许多网站都介绍了如何使用SysV init在Pi上进行启动屏幕显示,但是我找不到有关如何在Jessie上使用systemd进行操作的任何信息。我尝试只是将init脚本“转换”为systemd-service,但是它没有任何作用。
有没有人设法做到这一点或任何有用的建议?
Answers:
哦,我已经做到了,但是它是完整而完整的PITA。
首先,通常的普利茅斯文件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 一起放在相关位置。
然后,使用plymouth-set-default-theme
命令启用mytheme 。
现在有些诡计。plymouth只能读取内核cmdline的前1024个字节...但是,Rpi加载程序会将事情放在/ proc / cmdline的前面,因此您可能认为您做对了,但是,如果cat /proc/cmdline
稍后,您可能会发现实际上您的设置低于1024字节的限制。因此,您必须非常早在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中运行和指定(或类似)一样容易。
就我而言,我还必须更新普利茅斯,因为Jessie附带的版本会在帧缓冲驱动程序中出现段错误,结果我无法在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。
/proc/cmdline|wc -c
说,虽然只有508个字节。
您可以使用asplashscreen。自定义启动屏幕
@izak的答案有效,但是使用默认的Jessie软件包时,您可能仍然会遇到Plymouth segfaulting问题。要修复段错误,您将需要从测试系统信息库安装Plymouth。
请遵循AptPreferences文档中的说明,然后运行以下命令以更新您的Plymouth软件包:
apt install plymouth/testing
这为我解决了所有问题!
(我不能在@izak他的帖子上发表评论)