如何在两个信息亭模式应用程序之间切换?

如何在两个信息亭模式应用程序之间切换?

我目前有一个单用户系统,它自动加载到 X 并通过运行的超级简单的 Upstart 作业启动 XBMC:

su -c "startx /etc/X11/Xsession /usr/bin/xbmc-standalone -- -bs" oli

超级简单而且好用,坚如磐石……没有桌面干扰。没有窗口管理器来降低性能。当 XBMC 崩溃时(每天一次),它会恢复。如果您只想使用 XBMC,那就太好了。但现在我想安装 Steam 来玩游戏。这引发了一些问题:

  1. Steam 和 XBMC 将会争夺屏幕使用时间(记住,没有窗口管理器)和音频设备。我们需要在启动 Steam 之前关闭 XBMC,但无需杀死X。请注意 XBMC 当前是如何启动的。我该怎么做?

  2. 如果我能从我的无线 XBox 控制器触发 XBMC→Steam 切换,那就太棒了。它与xboxdrv其中有一个exec选项:

    xboxdrv --ui-buttonmap XBOXBTN=exec:/home/oli/bin/switch.sh
    

    因此假设 #1 可以编写脚本,我就可以加入。

  3. #1 的后半部分。当 Steam 消失时,我需要 XBMC 重新启动。

  4. 如果当前正在运行崩溃,它需要是重新加载的东西。

所以看来我最大的问题是监控应用程序。如果它正常退出(代码 0,例如我要求它退出,或者我调用了要求它退出的脚本),它应该加载另一个应用程序并监控它。如果它崩溃了(不是代码为零),它应该运行相同的应用程序并监控它。有道理吗?但是如何

这一切感觉就像 Upstart 会很适合,只不过两者都是在用户级别运行的 X 应用程序。我使用的是 14.04,所以如果它已经足够先进,这可能是一个选择。

可能还有一种 XBMC 和/或 Steam 独有的方法。我愿意听取建议。

答案1

这只是我的想法。以下是应该在以下两种情况之间交替使用的脚本阻塞命令

#!/bin/bash

XBMC="xbmc-standalone"
STEAM="steam steam://open/bigpicture"

current=$XBMC

openbox-session  # urgh required by Steam for keyboard IO

while true; do
    $current  # blocks until exit code

    [[ "$?" -ne "0" ]] && continue

    if [[ $current == $XBMC ]]; then
        current=$STEAM
    else
        current=$XBMC
    fi
done

如果我可以xbmc-standalone在 X 启动时调用它,那么脚本就可以无限期地保持活动状态(这将使 X 保持活动状态)。

相关内容