В настоящее время у меня есть однопользовательская система, которая автоматически загружается в X и запускает XBMC через очень простое задание Upstart, которое запускается:
su -c "startx /etc/X11/Xsession /usr/bin/xbmc-standalone -- -bs" oli
Супер-просто, и это работает, отлично работает. .. Никакой рабочий стол не мешает. Нет оконного менеджера, чтобы замедлить производительность. И он приходит в норму при сбое XBMC (один раз в день). Это фантастика, если все, что вы хотите сделать, это использовать XBMC. Но сейчас я бы хотел установить Steam, чтобы играть в игры. Это поднимает некоторые проблемы:
Steam и XBMC будут бороться за время экрана (не помню, чтобы был оконный менеджер) и аудиоустройства. Нам нужно закрыть XBMC перед запуском Steam, но , не убивая X . Обратите внимание, как XBMC в настоящее время запущен. Как мне это сделать?
Было бы очень здорово, если бы я мог запустить переключение XBMC → Steam с моего беспроводного контроллера XBox. Он подключен к xboxdrv
, который имеет опцию exec
:
xboxdrv --ui-buttonmap XBOXBTN=exec:/home/oli/bin/switch.sh
Таким образом, предполагая, что # 1 может быть записан в сценарий, я могу подключиться.
Вторая половина № 1. Когда Steam существует, мне нужен XBMC, чтобы вернуться.
Если что-либо из запущенных в данный момент дает сбой , оно должно быть тем, что загружается обратно.
Так что, похоже, моей самой большой проблемой является мониторинг приложения. Если он завершается корректно (код 0, например, я попросил его выйти или я вызвал скрипт, который попросил его выйти), он должен загрузить другое приложение и проконтролировать его. Если произошел сбой (не код-ноль), он должен запустить то же приложение и контролировать его. Есть смысл? Но как ?
Все это похоже на то, что было бы замечательно для Upstart, за исключением того, что оба X-приложения работают на уровне пользователя. Я на 14.04, так что, если он зашел достаточно далеко, это может быть вариант.
Также может быть способ сделать это специально для XBMC и / или Steam. Я открыт для предложений.
Это - просто я думающий вслух. Вот сценарий, который должен чередоваться между два блокирование команды
#!/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).