Como iniciar o aplicativo GUI com o upstart?

0

Eu tenho lutado com esse problema por três dias e tentei muitas maneiras de resolvê-lo, mas ainda não obtive sucesso. Espero que vocês possam me ajudar ...

Eu tenho um aplicativo GUI. Eu quero começar esta aplicação automaticamente. E quando ele desce ou fecha inesperadamente, quero reabrir este aplicativo.

Eu tentei usar o script upstart, no entanto, embora não haja problemas com serviços com o upstart, o aplicativo GUI não está iniciando com o script upstart. Ele diz que não pode conectar o servidor X ..

Devo adicionar ou alterar algumas configurações para abrir com o upstart ou há alguma maneira de abrir o aplicativo GUI automaticamente quando ocorre uma saída ou desligamento inesperado (não apenas uma vez após o login, não estou com a inicialização)?

Obrigado pelo seu apoio gentil ...

    
por goGud 06.08.2014 / 09:48

1 resposta

0

Não é possível iniciar um aplicativo gráfico por meio do upstart ou de qualquer outro sistema init, porque, no momento em que o upstart está sendo executado, o X (o ambiente gráfico) ainda não foi iniciado.

No Windows, o ambiente gráfico é parte integrante do sistema operacional; Até mesmo o Windows Server Core é gráfico no coração (mesmo que ele apenas apresente uma janela de prompt de comando). O Linux, por outro lado, adota a abordagem oposta: o sistema em si é apenas baseado em texto, e o ambiente gráfico é fornecido por um aplicativo userspace executado em cima disso.

Então, infelizmente, não há uma maneira fácil de fazer o que você parece ser depois.

Dito isto, poderá conseguir contornar a limitação. Muitos ambientes de desktop fornecem a capacidade de definir uma lista de aplicativos que serão iniciados quando você efetuar login (ou, mais precisamente, iniciar o ambiente de área de trabalho). Você poderia escrever um script que inicie o aplicativo em um loop apertado e saia quando o aplicativo sair com um status de saída zero (o que é normal para "saída bem-sucedida sem um problema"). Se isso vai funcionar para você ou não depende da sua definição de "saída inesperada".

Uma implementação ingênua pode ser algo como:

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

O || significa "executar o seguinte se o status de saída do anterior for diferente de zero" (é lido "ou"). Veja a documentação do Xdialog sobre como ela funciona; Basicamente, ele pergunta se você deseja continuar executando o programa, e se você responder Sim ou não responder a nada em 15 segundos, ele relança o programa executando o loop mais uma vez. Torne o arquivo de script executável e aponte seu ambiente de área de trabalho ao iniciá-lo no login, e my-app será executado até que você o feche explicitamente e diga ao sistema para não reiniciá-lo.

    
por 06.08.2014 / 10:14