树莓派kiosk模式启动两个Chromium页面并配置自动播放策略问题
问题原因
- 你当前配置的systemd服务使用
Type=simple类型,该类型下systemd会将执行kiosk.sh的bash进程视为服务主进程。当脚本内的两条chromium命令都通过&放入后台运行后,脚本本身会执行完所有逻辑直接退出,systemd检测到主进程退出后,会判定服务运行结束,自动回收杀死所有后台启动的chromium子进程,因此看不到任何窗口。 - 小概率附加原因:若桌面环境启动速度较慢,
graphical.target触发时X11会话还未完全就绪,也会导致chromium启动失败。 - 补充说明:你单次传两个URL没声音的问题,是因为chromium kiosk模式下会限制后台标签页的自动音频输出,分开启动两个独立窗口的思路是正确的。
解决方案
第一步:修改systemd服务配置
编辑你的chromium kiosk服务文件,修改为以下内容:
[Unit] Description=Chromium Kiosk Wants=graphical.target After=graphical.target [Service] Environment=DISPLAY=:0.0 Environment=XAUTHORITY=/home/pi/.Xauthority Environment=PULSE_RUNTIME_PATH=/run/user/1000/pulse/ Type=forking ExecStartPre=/bin/sleep 3 ExecStart=/bin/bash /home/pi/kiosk.sh Restart=on-abort User=pi Group=pi [Install] WantedBy=graphical.target
修改点说明:
- 把
Type=simple改为Type=forking,适配后台启动子进程的场景,systemd会等待子进程启动完成后再判定服务状态 - 新增
PULSE_RUNTIME_PATH环境变量,保证pulseaudio音频服务正常识别chromium的音频请求 - 新增3秒启动延迟,避免X11会话未就绪导致启动失败
第二步:修改kiosk.sh脚本
编辑/home/pi/kiosk.sh,在文件末尾新增wait命令,修改后内容如下:
#!/bin/bash xset s noblank xset s off xset -dpms unclutter -idle 0.5 -root & sed -i 's/"exited_cleanly":false/"exited_cleanly":true/' /home/pi/.config/chromium/Default/Preferences sed -i 's/"exit_type":"Crashed"/"exit_type":"Normal"/' /home/pi/.config/chromium/Default/Preferences /usr/bin/chromium-browser --new-window --autoplay-policy=no-user-gesture-required --noerrdialogs --disable-infobars --kiosk 'http://xxxx.xxxx.xxxx.xxxx:8100/Sounds/TestView.html' & /usr/bin/chromium-browser --new-window --autoplay-policy=no-user-gesture-required --noerrdialogs --disable-infobars --kiosk 'www.myKioskDashboard.com' & wait
新增的wait命令会让bash主进程等待所有后台子进程(也就是两个chromium进程)退出后再结束,避免脚本提前退出。
第三步:生效配置并验证
执行以下命令重载systemd配置,重启服务即可:
sudo systemctl daemon-reload sudo systemctl restart 你的服务名.service
内容的提问来源于stack exchange,提问作者JamesBondo
相关产品推荐
相关产品推荐

