O Upstart foi projetado para serviços do sistema. Embora você possa (pelo menos com versões recentes) usá-lo para monitorar um comando executado durante uma sessão de usuário, ele é desajeitado.
Com o Upstart, se você quiser executar um serviço que exibe uma janela GUI, esse serviço só pode ser executado enquanto você estiver conectado. Em vez de iniciar e parar com base em níveis de execução, você precisa iniciar e parar com base no login da GUI e eventos de logout.
start on desktop-session-start
stop on desktop-shutdown
Você também precisa que o serviço alcance seu monitor. Aplicativos GUI usam a variável de ambiente DISPLAY
para determinar onde exibir. Em circunstâncias normais, sua sessão da GUI será a exibição chamada :0
.
env DISPLAY=:0
O aplicativo também precisa obter permissão para acessar a exibição. Essa permissão assume a forma de um "cookie" (uma senha) que é gerada automaticamente quando a sessão da GUI é iniciada e armazenada no arquivo .Xauthority
em seu diretório pessoal (ou outro arquivo indicado pela variável de ambiente XAUTHORITY
, dependendo seu gerenciador de exibição). Se o seu gerenciador de exibição usar ~/.Xauthority
e você executar o serviço como seu usuário (o que você deve fazer de qualquer maneira), não será necessário definir XAUTHORITY
. Para obter mais detalhes, consulte Posso lançar um programa gráfico na área de trabalho de outro usuário como root? e Abra uma janela em um display X remoto (por que" Não é possível abrir a tela ")?
setuid evsc
Em vez do Upstart, você pode usar uma ferramenta de supervisão que apenas faz a supervisão e não o gerenciamento do serviço do sistema. Assegure-se de que um processo esteja sempre em execução lista várias possibilidades. Vamos usar supervise
de daemontools . Crie um diretório em algum lugar, por exemplo %código%. Nesse diretório, crie um executável chamado ~/.planeEtoiles
, que é o aplicativo que você deseja continuar executando:
mkdir ~/.planeEtoiles
ln -s /home/planeviz/src/of/apps/myApps/planeEtoiles/bin/planeEtoiles ~/.planeEtoiles/run
Adicione o comando run
aos aplicativos automaticamente iniciados no login . Para interromper o serviço, use o comando supervise ~/.planeEtoiles
:
svc -t -x ~/.planeEtoiles
A última peça do quebra-cabeça está executando o comando svc
no logout. Esse recurso parece estar faltando ou, se não, está muito mal documentado. Se você estiver usando o GDM, há uma solução alternativa que deve ser executada em svc
, mas esse arquivo executa o comando como root, o que não é uma boa solução e não se aplica ao Lightdm. Monitor Execução de script no logout do usuário (usuário não root) e Como posso executar um script durante o logout do GNOME se eu não tiver privilégios de administrador? para soluções.