我正在开发基于 Linux Linaro (Debian) OS 9.3 的嵌入式板 (Tinkerboard)。
该板基本上是一个(网页)信息亭,其中浏览器由 sh 脚本运行,包括启动时的自动脚本。kiosk 需要播放几个由 js 事件触发的 mp3 文件。
大多数情况下,音频不会被复制:如果我手动运行浏览器,音频总是可以的。
到目前为止,我发现 chromium 进程在 pulseaudio 进程之前运行(基于 PID 值),所以我认为浏览器不会“连接”音频进程导致丢失。
我修改了脚本,例如:
# Script.sh
pulseaudio
sleep 4s
chromium -kiosk ....
这样音频还可以,但我不喜欢它..首先因为我不确定问题的原因。
有没有办法以正确的顺序排列流程?
关于音频问题的任何其他原因?
这似乎正是一个明智的 init 系统解决的问题:
以正确的顺序启动服务和程序,并准确地在它们所依赖的东西准备好时;不是更早,也不是比上次启动晚 4 秒,“只是为了确保”。
在 Debian 9 上,您将使用 systemd 服务来启动运行 wayland 或 Xorg 的用户会话,然后在其上启动并显示 chromium。
而不是一个接一个地手动启动进程而不实际检查它们是否已经启动:
您只需定义一个依赖于 pulseaudio.service 的 chromium-kiosk.service 用户服务;启动它将等到 pulseaudio 服务启动。如何做到这一点在很多地方都有解释,例如这里。
这样做的其他优点包括在 Chromium 崩溃时自动重新启动,记录启动失败,使 Chromium 进程本身成为其他服务的要求的能力。最重要的是,您实际上可以说“嘿,要完全启动,您需要启动 chromium”,并且您的系统将确保启动所需的一切。