Como fazer com que o script /etc/init.d aja como se fosse lançado sob o X?

4

Estou tentando rastrear algumas peculiaridades com um aplicativo Java que se comporta mal quando iniciado por meio de um script de inicialização em /etc/init.d, mas é executado quando você abre uma janela de terminal da GUI e o executa por / etc / init .d / myapp start. (A estranheza envolve uma parte do aplicativo que faz alguns hacky handwaving com X.) Desde que o aplicativo é executado bem quando lançado através de uma janela de terminal, eu estou olhando como é lançado antes de eu mergulhar em (reconhecidamente delicada e não minha) fonte código.

A resposta em esta postagem me deu uma pista de que o terminal do Gnome está sendo executado dentro de um gerenciador de janelas, que está de alguma forma afetando (em uma boa maneira) o ambiente do aplicativo eu inicio através de um script bash. Eu pude verificar que o lançamento do script através de um terminal tty (ctrl-alt-f1 ou via ssh) fornece o mesmo comportamento que o lançamento na inicialização.

Minha pergunta principal: O que posso fazer para iniciar este aplicativo quando o computador é iniciado, mas ele deve agir como se tivesse sido iniciado em X? Fizemos a rota do script até agora porque também precisa iniciar uma VM Java com determinados parâmetros.

A pergunta de acompanhamento (estritamente para melhorar minha compreensão): O que está acontecendo sob o capô para fazer um script agir de maneira diferente quando é lançado através de algo em execução em um gerenciador de janelas? O Google não me esclareceu sobre isso.

    
por Kathy 05.11.2013 / 19:38

2 respostas

4

Se o seu aplicativo precisar de um servidor X por algum motivo estranho, mas não fizer nada útil com ele, forneça um servidor X virtual. Isso é comumente feito para executar navegadores da Web em conjuntos de testes automatizados para aplicativos da Web - ninguém está olhando para a tela, mas o navegador da Web não é executado sem um.

O Xvfb cria um servidor X que “exibe” apenas na memória, não em nada visível. Não requer nenhum hardware ou permissões.

A maneira mais fácil de usá-lo é através do script Debian xvfb-run .

xvfb-run java MyWeirdApp

Se você não tiver xvfb-run , faça o download de uma das muitas cópias na Web ou de < um pacote Debian .

    
por 06.11.2013 / 01:23
6
Os scripts

/etc/init.d não são interativos, não fazem login, e não tentam acessar uma sessão X porque são serviços de todo o sistema . 1 System os serviços não estão associados a nenhum usuário logado em particular, 2 , mas uma sessão X sempre pertence a um usuário logado.

Se o seu aplicativo precisar de um contexto da GUI para funcionar, ele não deverá ser um serviço do sistema. Você não explicou por que ele precisa disso ou o que ele faz , mas provavelmente você deve usar ~/.xinitrc ou o sistema de inicialização do seu ambiente de desktop, não init.

1 X aplicativos e usuários logados podem fazer uso de um serviço do sistema, mas o que você está falando é o contrário.

2 Os serviços são comumente associados ao seu próprio usuário especial, mas eles não estão logados como tal (e geralmente tais usuários não podem ser logado).

    
por 05.11.2013 / 20:05