我试过但没能找到关于 xinit 的正确信息,为了理解为什么当引导到 Unity 然后启动应用程序(xbmc)时一切都很好,但是当我尝试使用 /etc/init 脚本自动启动同一个程序,我听不到声音。(我之前曾问过一个关于我的“无声音”问题的更笼统的问题,但由于我还没有收到任何答复,我正在尝试自己做一些侦探工作。)
据我所知,脚本(这里是完整的)基本上将用户更改为 USER 然后启动程序(xbmc):
script
exec su -c "xinit /usr/bin/xbmc --standalone -- -nocursor :0" $USER
end script
任何愿意并且能够向我解释在“直接”启动到这样的程序时控制声音的可能性是什么?我可以通过虚拟终端、ssh 或者你有什么进入,并检查发生了什么吗?感谢所有建议(包括如何进一步澄清问题,如果需要的话)。
编辑: 我猜测问题的一个潜在来源可能是脚本在启动过程中运行得太快,以至于程序在声卡初始化之前启动或其他什么。
在那种情况下,完整脚本的这一部分可能与我的问题相关:
start on (filesystem and stopped udevtrigger)
stop on runlevel [016]
但我不知道如何检查这是否可能是原因。
尝试按照以下方式进行操作:
这大致相当于 LSB 初始化脚本中的 $all。如果它确实是一个排序问题,那么这可能会解决它。
但首先,将 xbmc 作业设置为“手动”,然后在引导结束后启动它,看看它是否是顺序问题(如果仍然没有声音,则启动和停止都很好)。
我找到了一种解决方法,可以为我解决问题,因为它:
我选择做的是通过选择 Unity 中的选项,以“正常”GUI 方式将 Ubuntu 自动启动到我的“xbmc”用户中。然后,我添加了一个进程监控脚本来为我重新生成程序。
方法如下:按照这个答案,我将以下脚本添加到用户“xbmc”的主目录中,并将其命名为“process_monitor.sh”:
使脚本可执行后
我在“启动应用程序”中为用户“xbmc”添加了以下行(通过 Dash 访问,或者至少在 12.04 中,通过右上角的栏访问):
这样,我现在可以在具有完美声音和视频功能的 xbmc 中自动启动,然后让监视器脚本确保 xbmc 在崩溃时重新生成。也许不是最漂亮的解决方案,但它确实有效!