web-dev-qa-db-ja.com

2つのキオスクモードアプリケーションをどのように切り替えることができますか?

私は現在、Xにオートロードし、実行する非常にシンプルなUpstartジョブを介してXBMCを開始するシングルユーザーシステムを持っています。

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

非常にシンプルで機能し、二重の堅牢性...デスクトップが邪魔になることはありません。パフォーマンスを低下させるウィンドウマネージャーはありません。また、XBMCがクラッシュすると(1日1回)バウンスします。 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に特別な方法があるかもしれません。私は提案を受け入れます。

3
Oli

これは私が声を出して考えているだけです。これは、2つのblockingコマンドを交互に実行するスクリプトです

#!/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

Xの起動時にxbmc-standaloneの代わりにこれを呼び出すことができれば、スクリプトは無期限に存続することができます(Xを存続させます)。

3
Oli