当使用 xinit 启动程序时,如何管理会话选项(在我的情况下是声音)?

当使用 xinit 启动程序时,如何管理会话选项(在我的情况下是声音)?

我尝试过但未能找到有关 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]

但我不知道如何检查这是否是原因。

答案1

尝试做类似的事情:

start on stopped rc RUNLEVEL=[2345]
stop on starting rc RUNLEVEL=[016]

这大致相当于 LSB 初始化脚本中的 $all。如果这确实是排序问题,那么这可能会修复它。

但首先,将 xbmc 作业设置为“手动”,然后在启动结束后启动它,看看是否是排序问题(如果仍然没有声音,那么启动和停止都没有问题)。

答案2

我找到了一种可以解决我的问题的方法,其意义如下:

  1. 允许我在 xbmc 中自动启动
  2. 如果程序崩溃则重新启动 xbmc
  3. 它功能齐全:有声音并且视频运行正常。

我选择的做法是通过选择 Unity 中的选项以“正常”GUI 方式自动将 Ubuntu 启动到我的“xbmc”用户中。然后,我添加了一个进程监视器脚本来为我重新生成该程序。

方法如下:这个答案,我在用户‘xbmc’的主目录中添加了以下脚本,将其命名为‘process_monitor.sh’:

#!/bin/bash

if [[ -z "$1" ]];then
    echo "ERROR: must specify program"
    exit 1
fi

while (( 0 == 0 ));do
    $@ &
    pid=`jobs -l | awk '{print $2}'`
    wait $pid
done

使脚本可执行后

chmod a+x ~/process_monitor.sh

我在用户“xbmc”的“启动应用程序”中添加了以下行(通过 Dash 访问,或至少在 12.04 中通过右上角的栏访问):

/bin/bash ~/process_monitor.sh /usr/bin/xbmc

这样,我现在可以在 xbmc 中自动启动,并具有完美的声音和视频功能,然后让监控脚本确保 xbmc 在崩溃时重生。也许不是最漂亮的解决方案,但它确实有效!

相关内容