Я боролся с этой проблемой в течение трех дней, и я попробовал много способов решить ее, но пока не увенчался успехом. Я надеюсь, что вы, ребята, можете мне помочь ...

У меня есть приложение с графическим интерфейсом. Я хочу запустить это приложение автоматически. И когда он неожиданно закрывается или закрывается, я хочу снова открыть это приложение.

Я попытался использовать скрипт upstart, однако, хотя нет проблем с сервисами upstart, приложение GUI не запускается с скрипт upstart. Он говорит, что не может подключиться к X-серверу ..

Должен ли я добавить или изменить некоторые параметры, чтобы они открывались с помощью upstart, или есть ли способ автоматически открывать приложение с графическим интерфейсом при неожиданном выходе или завершении работы (не один раз после входа в систему, я имею в виду не при запуске)?

Спасибо за вашу любезную поддержку ...

1 ответ1

0

Вы не можете запустить графическое приложение через upstart или любую другую систему инициализации, потому что во время выполнения upstart X (графическая среда) еще не запущена.

В Windows графическая среда является неотъемлемой частью операционной системы; даже ядро Windows Server является графическим в основе (хотя оно предоставляет только окно командной строки). Linux, с другой стороны, использует противоположный подход: сама система основана только на тексте, а графическая среда обеспечивается приложением пользовательского пространства, работающим поверх этого.

Так что, к сожалению, нет простого способа сделать то, к чему вы стремитесь.

Тем не менее, вы можете обойти ограничение. Многие среды рабочего стола предоставляют возможность определять список приложений, которые будут запускаться при входе в систему (или, точнее, запускать среду рабочего стола). Вы могли бы написать скрипт, который запускает приложение в тесном цикле и завершается, когда приложение выходит с нулевым статусом выхода (что является нормальным для "успешного выхода без проблем"). Будет ли это работать для вас или нет, зависит от вашего определения "неожиданный выход".

Наивная реализация может быть чем-то вроде:

#!/bin/bash
while true
do
    my-app || exit
    Xdialog --timeout 15 --yesno "Program exited. Restart it?" 2 50
    test "$?" = "0" -o "$?" = "255" || exit
done

|| означает «выполнить следующее, если состояние выхода из предыдущего было ненулевым» (читается "или"). Посмотрите документацию Xdialog, чтобы узнать, как это работает; По сути, он запрашивает, хотите ли вы продолжить выполнение программы, и если вы отвечаете Да или ничего не отвечаете в течение 15 секунд, он перезапускает программу, выполняя цикл еще раз. Сделайте исполняемый файл скрипта и укажите своей рабочей среде на запуск при входе в систему, и my-app будет работать, пока вы явно не закроете его и не скажете системе не перезапускать его.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .