Как запустить приложение с графическим интерфейсом с upstart?
Я боролся с этой проблемой в течение трех дней, и я пробовал много способов решить ее, но пока не увенчался успехом. Я надеюсь, что вы, ребята, можете мне помочь...
У меня есть приложение с графическим интерфейсом. Я хочу запустить это приложение автоматически. И когда он неожиданно закрывается или закрывается, я хочу снова открыть это приложение.
Я попытался использовать скрипт upstart, однако, хотя нет проблем с сервисами upstart, приложение GUI не запускается с скрипт upstart. Он говорит, что не может подключиться к X-серверу..
Должен ли я добавить или изменить некоторые параметры, чтобы они открывались с помощью upstart, или есть ли способ автоматически открывать приложение с графическим интерфейсом, когда происходит неожиданный выход или завершение работы (не один раз после входа в систему, я имею в виду не при запуске)?
Спасибо за вашу любезную поддержку...
1 ответ
Вы не можете запустить графическое приложение через upstart или любую другую систему инициализации, потому что во время выполнения upstart X (графическая среда) еще не запущена.
В Windows графическая среда является неотъемлемой частью операционной системы; даже ядро Windows Server Core является графическим (даже если оно предоставляет только окно командной строки). 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
будет работать до тех пор, пока вы явно не закроете его и не скажете системе не перезапускать его