私は現在、Xにオートロードし、実行する非常にシンプルなUpstartジョブを介してXBMCを開始するシングルユーザーシステムを持っています。
su -c "startx /etc/X11/Xsession /usr/bin/xbmc-standalone -- -bs" oli
非常にシンプルで機能し、二重の堅牢性...デスクトップが邪魔になることはありません。パフォーマンスを低下させるウィンドウマネージャーはありません。また、XBMCがクラッシュすると(1日1回)バウンスします。 XBMCを使用するだけでいいのは素晴らしいことです。しかし、今はゲームをプレイするためにSteamをインストールしたいと思います。これはいくつかの問題を引き起こします:
SteamとXBMCは、スクリーン時間(ウィンドウマネージャーがないことを覚えておいてください)とオーディオデバイスをめぐって戦います。 Steamを開始する前にXBMCを閉じる必要がありますが、Xを終了せずにです。 XBMCが現在どのように起動されているかに注意してください。それ、どうやったら出来るの?
ワイヤレスXBoxコントローラーからXBMC→Steamスイッチオーバーをトリガーできれば、それは本当に素晴らしいことです。 xboxdrv
でフックされており、exec
オプションがあります。
xboxdrv --ui-buttonmap XBOXBTN=exec:/home/oli/bin/switch.sh
したがって、#1をスクリプト化できると想定して、フックすることができます。
#1の後半。 Steamが存在する場合、XBMCを再起動する必要があります。
現在実行中のものがクラッシュする場合、それはロードをロードするものである必要があります。
したがって、私の最大の問題はアプリケーションの監視です。正常に終了する場合(コード0、たとえば終了を要求したか、終了を要求するスクリプトを呼び出した場合)、他のアプリケーションをロードして監視する必要があります。クラッシュした場合(コードゼロではない)、同じアプリケーションを実行して監視する必要があります。理にかなっていますか?しかし、どうやって?
これは、Upstartがユーザーレベルで実行されているXアプリケーションである場合を除いて、何かのように感じられます。私は14.04にいるので、それが十分に進んだ場合、それはオプションかもしれません。
XBMCやSteamに特別な方法があるかもしれません。私は提案を受け入れます。
これは私が声を出して考えているだけです。これは、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を存続させます)。