J'ai actuellement un système mono-utilisateur qui se charge automatiquement dans X et démarre XBMC via un travail Upstart super simple qui s'exécute:
su -c "startx /etc/X11/Xsession /usr/bin/xbmc-standalone -- -bs" oli
Super simple et ça marche, solide comme un roc ... Aucun bureau ne gêne. Aucun gestionnaire de fenêtres pour ralentir les performances. Et il rebondit lorsque XBMC plante (une fois par jour). C'est fantastique si tout ce que vous voulez faire est d'utiliser XBMC. Mais maintenant, j'aimerais installer Steam pour jouer à des jeux. Cela pose quelques problèmes:
Steam et XBMC vont se battre sur le temps d'écran (il n'y a pas de gestionnaire de fenêtres, rappelez-vous) et les appareils audio. Nous devons fermer XBMC avant de démarrer Steam mais sans tuer X . Notez comment XBMC est actuellement lancé. Comment je fais ça?
Ce serait aussi vraiment génial si je pouvais déclencher le basculement XBMC → Steam à partir de mon contrôleur XBox sans fil. Il est connecté avec xboxdrv
qui a une option exec
:
xboxdrv --ui-buttonmap XBOXBTN=exec:/home/oli/bin/switch.sh
Donc, en supposant que # 1 puisse être scripté, je peux me connecter.
La seconde moitié de # 1. Lorsque Steam existe, j'ai besoin de XBMC pour revenir.
Si ce qui est en cours d'exécution - plante, il doit être la chose qui se charge.
Il semble donc que mon plus gros problème soit de surveiller une application. S'il se ferme normalement (code 0, par exemple, je lui ai demandé de quitter, ou j'ai appelé un script qui lui a demandé de quitter), il devrait charger l'autre application et la surveiller. S'il s'est écrasé (pas le code zéro), il devrait exécuter la même application et le surveiller. Ça a du sens? Mais comment?
Tout cela ressemble à quelque chose d'Upstart serait génial, sauf que les deux sont des applications X exécutées au niveau de l'utilisateur. Je suis au 14.04, donc s'il est allé assez loin, cela pourrait être une option.
Il peut également y avoir un moyen de le faire qui est spécial pour XBMC et/ou Steam. Je suis ouvert aux suggestions.
C'est juste moi qui pense à haute voix. Voici un script qui devrait alterner entre deux commandes blocage
#!/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
Si je peux appeler cela au lieu de xbmc-standalone
au démarrage de X, qui devrait permettre au script de rester en vie indéfiniment (ce qui maintiendrait X en vie).