群里有新人问起一个问题,就是能否配置树莓派开机的时候,不要显示开机的画面,不要打印日志就显示一个定制的画面,让启动的时候,树莓派变的很酷?
群里有大佬说用 fbi,开机显示静态画面的方式进行,我尝试了一下,发现不行,因为开机的的时候服务还没有加载,无法显示在开机初始化的画面上, 需要使用系统自带的 Plymouth 的服务来做。
下面就详细讲解操作步骤。
准备图片
-
格式: PNG(或者 JPG) , 最大 1920x1080 -
建议颜色:小于等于 224 色 ,文件越小加载越快。 -
文件名字起名叫 splash.png,这里以 png 为例
下面是我的图片:
开机登录树莓派
关闭开机的彩虹屏,关闭日志,这样开机画面更干净。
打开一个终端,就是桌面上那个黑色的 terminal
输入:
echo “disable_splash=1” | sudo tee -a /boot/firmware/config.txt
这个命令是禁用彩虹 GPU 自检。
这里记得检查一下配置文件是否写入了。
出现上面内容就说明 ok 了。
屏幕内核日志
开机的时候,会打印一堆内核日志:
还会显示一个树莓派的 logo 的图片,字符界面的系统就是各种滚动日志,内核加载的过程信息一览无余。
那么要禁用这个滚动日志怎么做?
如果你在学习 linux 的时候学过 sed 编辑器,其实只要一步:
sudo sed -i ‘$s/$/ logo.nologo quiet loglevel=0/’ /boot/firmware/cmdline.txt
这条命令看上去只有一行,其实同时做了好几件“让树莓派开机时不再打印字符”的事。
下面把每个部分拆开讲,并告诉你为什么顺序、位置、格式都不能乱哦。
sudo: 需要 linux 的上帝,就是 root 用户才能操作/boot 目录下面的文件。
sed -i : 就地编辑(inline) 不加-i 只输出不改变文件内容。
$ 表示只处理最后一行,因为/boot/firmware/cmdline.txt 只有一行,所以就是处理这一行。s/$ …./ 在行尾($)做替换操作,把“行尾” 替换成“行尾+新字符串” , 效果就是追加一堆字符进去。
要追加的内容就是 logo.nologo quiet loglevel=0 这三个独立参数,前面自带空格。
这里的logo.nologo 是让内核开机加载的时候,不要把那个树莓派的 logo 打印到左上角,如果你用的别的系统可能是小企鹅。
第二个quiet 一看就知道,安静~给我悄悄的,打枪的不要~, 所以它会关闭大部分启动信息(printk 等级应该是大于 内核警告才显示出来,所以可以屏蔽很多信息,再加上一个loglevel=0, 就更好了,因为 level 越低越静默,就是数字越小越“安静“, 0就是只有内核 panic 或者 EMERG 的时候就是系统崩溃了才打印出来一些信息,这一下就把让内核闭嘴了,老老实实后台跑启动进程,不再画面上叽叽歪歪了。
配置改好就类似这样:
做好了就可以重启了,但是你要确保和我输入的一样,不然弄坏了cmdline.txt 启动就启动不起来了,只能拔卡插入电脑再去修改了……
后来发现开机会有个光标在屏幕左上方闪烁,看着很烦,就想着关闭掉,也可以在cmdline.txt 中最后添加一个vt.global_cursor_default=0 , 如图所示:
处理就可以重启了。
重启验证
操作步骤:
1、重启: 终端里面重启最快,直接输入sudo reboot 或者sudo init 6
2、观察显示器上面有没有出现彩虹方块了
-
彩虹方块没了,说明 disable_splash=1生效了 -
滚动内核日志 如果完全消失了,就 ok。
如果依然有几行固件阶段的字符色块啥的,应该是start.elf打印的内容,内核参数管不到他们。想彻底没字显示得去自定义 boot-logo 文件,那就是另一个故事了,先按下不表。
切记:修改cmdline.txt的时候,一定要保证整行里面没有回车,只有一行,参数之间用空格隔开。
不过我测试的时候使用的树莓派 5, 它的启动流程好像和以前的差异很大,我发现它的固件会先初始化 PCIe、HDMI 等外设,内核是由 systemd-boot 引导的,一般的 framebuffer 设备例如/dev/fb0 会在basic.target之后才会真正点亮,所以我之前尝试用 fbi 做成sysinit.target 服务,再树莓派 5 上根本没有效果,因为服务启动时候 framebuffer 还没上车,
所以 fbi 直接就报错退出了,但是在后台,基本上就是输出错误日志……
好,我们搞明白了问题的核心,就可以开始真正的表演了。
之前让你准备的图片,放到/boot目录中去,名字不要变还是splash.png。
/boot/splash.png 放 boot 分区,内核阶段就能读到,加载更快一些。
看看你的/boot/firmware/config.txt 里面的dtparam=vc4-kms-v3d 开着么?就是前面没有注释的#号就行。
另外检查一下不要有:hdmi_force_hotplug=1 之类的,会导致重新初始化 HDMI 的。
重启完发现,没有彩虹屏,没有日志捣乱,也没有光标闪烁了。nice~
接下来就要用到 plymouth 显示静态图来搞开机画面了,plymouth 这个服务在树莓派 5 上启动的时间会提前 1-2s,会比 fbi 快~
fbi: 我还没上车~
好了,不扯了,放大招!
终端里执行:
sudo apt update
sudo apt upgrade -y
sudo apt -y install plymouth Plymouth-themes
安装主题工具后,然后自己做一个极简主题:
sudo mkdir -pv /usr/share/plymouth/themes/silent
sudo vim.tiny /usr/share/Plymouth/themes/silent/silent.plymouth
写入:
[Plymouth Theme]
Name=silent
Description=Static splash
ModuleName=script
[script]
ImageDir=/usr/share/plymouth/themes/silent
ScriptFile=/usr/share/plymouth/themes/silent/silent.script
保存退出,用 vim 的话,直接点 ESC 按键,然后输入”:x” 就是保存退出。
接着写个脚本,让它只贴图,不画进度条。
sudo vim.tiny /usr/share/Plymouth/themes/silent/silent.script
内容:
wallpaper_image = Image("splash.png");
screen_width = Window.GetWidth();
screen_height = Window.GetHeight();
wallpaper_sprite = Sprite(wallpaper_image);
wallpaper_sprite.SetPosition(0, 0, -100);
另外,把第一步里面的splash.png 也复制到这个目录中来。
sudo cp /boot/splash.png /usr/share/Plymouth/themes/silent/
启用主题并更新一下 initramfs
终端执行:
sudo plymouth-set-default-theme -R silent
这里的-R 会自动做一个update-initramfs -u 的操作,把主题编进启动镜像里面, 接下来就是见证时刻的奇迹~
sudo sync
sudo reboot
重启的时候~
关机也会出现……
这下大家满意了吧~
转载请注明来源信息
硬件军火库
点击了解详情👆
DFRobot官方品牌店 https://dfrobot.taobao.com/
DFRobot官方旗舰店 https://dfrobot.jd.com/
大家有什么想说的,欢迎在下方留言!
往期项目回顾
点击阅读👆

