Как я могу переключаться между двумя приложениями в режиме киоска?

В настоящее время у меня есть однопользовательская система, которая автоматически загружается в X и запускает XBMC через очень простое задание Upstart, которое запускается:

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

Супер-просто, и это работает, отлично работает. .. Никакой рабочий стол не мешает. Нет оконного менеджера, чтобы замедлить производительность. И он приходит в норму при сбое XBMC (один раз в день). Это фантастика, если все, что вы хотите сделать, это использовать XBMC. Но сейчас я бы хотел установить Steam, чтобы играть в игры. Это поднимает некоторые проблемы:

  1. Steam и XBMC будут бороться за время экрана (не помню, чтобы был оконный менеджер) и аудиоустройства. Нам нужно закрыть XBMC перед запуском Steam, но , не убивая X . Обратите внимание, как XBMC в настоящее время запущен. Как мне это сделать?

  2. Было бы очень здорово, если бы я мог запустить переключение XBMC → Steam с моего беспроводного контроллера XBox. Он подключен к 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
задан 19 June 2014 в 05:09

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).

3
ответ дан 19 June 2014 в 05:09

Другие вопросы по тегам:

Похожие вопросы: