树莓派4启动时先显示开屏画面再启动Qt应用的配置问题
根因说明
- 配置
console=tty1时,树莓派桌面默认运行在tty7,桌面加载完成后系统会自动从tty1切换到tty7,运行在tty1的fbi开屏画面会被直接切换掉,无法持续显示。 - 配置
console=tty3时,系统不会自动切换到桌面所在的tty7,fbi进程会持续占用/dev/fb0帧缓冲,导致X桌面及Qt应用的画面无法输出到屏幕。
可行方案
1. 保留cmdline.txt的tty3配置
沿用你现有console=tty3的参数配置,确保早期启动日志全部输出到tty3,不会抢占显示通路,保证开屏画面最早启动。
2. 修改开屏画面服务配置
将开屏服务调整为后台常驻模式,同时配置终止逻辑,服务文件示例如下:
[Unit] Description=Splash Screen Service DefaultDependencies=no After=local-fs.target Before=graphical.target [Service] Type=forking ExecStart=/usr/bin/fbi -d /dev/fb0 --once --noverbose -a /opt/splashscreen.jpg & RemainAfterExit=yes ExecStop=/usr/bin/killall fbi StandardInput=tty StandardOutput=tty TTYPath=/dev/tty3 [Install] WantedBy=sysinit.target
注意:如果系统提示没有killall命令,先执行sudo apt install psmisc安装依赖。
3. 修改Qt应用服务配置
调整服务依赖与启动前逻辑,确保开屏画面在Qt启动前才关闭,同时主动切换到桌面所在的tty,服务文件示例如下:
[Unit] Description=My Qt App Service After=graphical.target splash-screen.service Wants=splash-screen.service [Service] Type=simple User=pi Environment=DISPLAY=:0 WorkingDirectory=/home/pi # 启动前停止开屏服务、清空帧缓冲、切换到桌面所在的tty7 ExecStartPre=/bin/systemctl stop splash-screen.service ExecStartPre=/bin/dd if=/dev/zero of=/dev/fb0 ExecStartPre=/bin/chvt 7 ExecStart=/home/pi/myqtApp [Install] WantedBy=multi-user.target graphical.target
注意:请将上述配置中的splash-screen.service替换为你实际的开屏服务文件名。
4. 可选优化
如果Qt应用启动过程中出现短暂黑屏,可以将dd清空帧缓冲的逻辑移到Qt应用内部,等Qt窗口初始化完成后再清空帧缓冲,实现开屏画面到应用界面的无缝切换。
内容的提问来源于stack exchange,提问作者FS93
相关产品推荐
相关产品推荐

