树莓派SH脚本内无法执行Chromium启动命令问题求助
问题核心原因
你不需要为rc.local添加额外权限,故障根本原因如下:
rc.local属于系统早期启动阶段的执行脚本,运行时机远早于LXDE桌面的X图形服务启动,Chromium作为GUI程序,没有可用的图形运行环境rc.local默认以root用户执行,环境中缺少GUI程序必需的DISPLAY显示变量,导致Chromium无法关联到桌面显示器
解决方案
方案一(最稳定,推荐):改用LXDE桌面autostart机制调用脚本
autostart是桌面环境加载完成后才会执行的启动项,完全符合你的需求:
- 删掉
rc.local中添加的bash /home/pi/MySQLAppTrueTrue/startup.sh调用命令 - 打开
/etc/xdg/lxsession/LXDE-pi/autostart文件,在末尾添加一行:@su pi -c 'bash /home/pi/MySQLAppTrueTrue/startup.sh' - 修改
startup.sh中的Chromium启动命令,显式指定显示变量:DISPLAY=:0 chromium-browser --start-fullscreen https://www.google.com/
方案二:仍使用rc.local调用的修改方法
如果必须保留rc.local的调用逻辑,按如下修改即可:
- 把
rc.local中的调用命令修改为:su pi -c "sleep 10 && bash /home/pi/MySQLAppTrueTrue/startup.sh" &sleep 10作用是等待桌面环境加载完成,可根据树莓派实际启动速度调整为5~15秒,末尾的&必须保留,避免阻塞系统启动流程 - 同样在
startup.sh的Chromium启动命令前加DISPLAY=:0前缀
附加注意事项
- 脚本内所有路径建议用绝对路径,包括虚拟环境激活、Python代码调用、资源文件读取的路径,避免环境变量差异导致路径找不到
- 如果需要等Python后端服务启动完成再打开Chromium,可以在
startup.sh中Chromium启动命令前增加适当的延迟,比如sleep 3,确认后端端口正常监听后再启动浏览器
内容的提问来源于stack exchange,提问作者Matthew Van Ginneken
相关产品推荐
相关产品推荐

