Nome de exibição: 0 está se referindo a um display X. Ele funciona no seu terminal GUI porque $ DISPLAY está definido como: 0.
Se você quer que o serviço inicie na sua GUI, então você deve fazer
env DISPLAY=":0"
exec /start/my/daemon
Estou tentando usar o upstart para iniciar um daemon no evento "input-device-added", no entanto, se alguém souber de um método diferente para iniciar algo no mesmo evento que não envolva o Upstart, ficarei muito satisfeito também. De qualquer forma, quando o evento input-device-added é emitido, o myservice.conf é chamado corretamente e as primeiras linhas do script são analisadas. Mas quando o daemon é iniciado, ele nunca começa a rodar completamente e o Upstart aparentemente o mata prematuramente.
Eu tentei usar o Upstart de duas maneiras diferentes, ambos me dão o mesmo problema:
author "AnVoWiDo"
start on input-device-added
script
device='printinputdevices | grep thecorrectdevice'
echo $device
/start/my/daemon -option device
end script
e também
author "AnVoWiDo"
start on input-device-added
exec myscript.sh
onde o arquivo myscript.sh contém o script acima. O comando echo lá é apenas para diagnósticos e saídas corretamente em ambos os métodos.
Executar myscript.sh do terminal iniciará o daemon perfeitamente com toda a saída esperada. O mesmo é verdade para executar o comando "/ start / my / daemon -option device", ambos irão mostrar algo ao longo das linhas de
device 0: /dev/input/event9 mydevice
Display name: :0
Mas ao iniciá-lo a partir do Upstart (com service myservice iniciado ou conectando um novo dispositivo de entrada) a saída é interrompida no meio 'Display name:: 0' e somente logs 'Display name:' no qual o Upstart mata o processo. Parece-me que o cólon duplo na saída é o culpado (ou, é claro, o: 0), e talvez o Upstart o confunda com um tipo de código de erro?
Alguém sabe de um método diferente de iniciar meu serviço no momento correto? Talvez eu tenha perdido algo estúpido e óbvio ao fazer o arquivo conf do Upstart que pode ser consertado? Por fim, talvez o Upstart possa, de alguma forma, ser convencido a ignorar o ":: 0" na saída (se essa for a causa, é claro) e continuar executando o daemon?
Nome de exibição: 0 está se referindo a um display X. Ele funciona no seu terminal GUI porque $ DISPLAY está definido como: 0.
Se você quer que o serviço inicie na sua GUI, então você deve fazer
env DISPLAY=":0"
exec /start/my/daemon
Upstart executa o script como root, que provavelmente não tem o conjunto de ambientes DISPLAY (demonstrado pela depuração do seu script: Display name: <empty>
. Quando você executa o script a partir da linha de comando, DISPLAY é obtido da conta de usuário env sendo definido corretamente.
Você pode usar a resposta do SpamapS para adicionar o DISPLAY ao ambiente de trabalho ou executar o comando com exec su - <your account> ...
.