Eu tenho um BeagleBone Black aqui, rodando Debian 8.3, Linux 4.1.15-ti-rt-r43. A área de trabalho é LXQT.
Após a inicialização, quero executar um arquivo .sh - quando o ambiente de desktop estiver pronto, pois esse arquivo, após alterar o caminho e definir algumas variáveis, chama mono para iniciar um programa baseado em GUI.
Usando o "menu iniciar":
Preferências -> Configurações do LXQt -> Configurações de sessões -> Autostart
Eu adicionei uma entrada, primeiro em "Global Autostart", depois em "LXQt Autostart" (apenas uma das duas caixas marcadas por vez). Eu especifiquei, em "comando", o caminho para o meu script .sh, através do botão "Pesquisar...", ou seja, não é possível digitar errado. Eu tentei com ambos, "Aguardar bandeja do sistema" marcado e desmarcado. Clique em "fechar" e reinicie a máquina através do menu Iniciar a cada tentativa.
Depois que a área de trabalho é iniciada, nada mais acontece. O script funciona bem no prompt de comando ssh remote*, no entanto - o aplicativo é iniciado. Além disso, copiá-lo para a área de trabalho e clicar nele - funciona.
_* o arquivo .sh contém a linha "export DISPLAY=:0" como foi usado pela primeira vez para iniciar via ssh para iniciar um aplicativo GUI. Eu comentei para ver se isso muda alguma coisa aqui, não muda.
EDIT : Então eu criei manualmente um arquivo .desktop em ~/.config/autostart - observando os arquivos .desktop LXQt feitos nessa pasta por mim clicando na interface do usuário conforme descrito acima. No meu arquivo, especifiquei os caminhos etc. para iniciar meu script .sh e configurei uma opção extra para true: "Terminal", que especifica que o programa de inicialização automática deve ser executado em um terminal. O que isso fez foi me mostrar - sim, de fato, algoé iniciado após a inicialização / carregamento do ambiente de trabalho, porque o terminal está visível, ou seja, meu arquivo de inicialização automática não é ignorado. Mas os comandos "echo" no meu script .sh não aparecem nesse terminal, nem meu aplicativo mono é iniciado. Se eu abrir outro shell remoto e copiar e colar o caminho que dei no arquivo .desktop autostart em "Exec", ele inicia meu aplicativo como suposto - então o caminho está correto.
Então, o que está acontecendo lá? A área de trabalho do LXQt obviamente encontra meu arquivo, tenta iniciar automaticamente, mas não faz nada. Causas Possíveis? Eu pensei (sem saber como tudo isso funciona sob o capô), talvez o mono/GUI ainda não esteja pronto, mesmo que a área de trabalho tenha carregado, por algum motivo engraçado, e eu coloquei um eco "dormindo ...", sono 30s , echo "chamando aplicativo mono..." antes de chamar o aplicativo mono no meu arquivo .sh que deveria iniciar automaticamente. Nada disso é visível no terminal que agora abre na inicialização e não ajuda.
Ok, funciona. Eu não tenho uma resposta muito precisa para a pergunta exata de por que a inicialização automática não funcionou, além de observar a diferença de: arquivo .sh não funciona, o aplicativo funciona diretamente.
O que fiz agora:
Depois de excluir os arquivos .desktop antigos na pasta autostart, criei o seguinte:
Inserido isso:
Nota: o executável aqui para "Exec", encontrado através da variável path, é mono, e sua linha de comando arg é o caminho para o "executável" que é executado no framework mono.
Isso funciona como suposto. Reinicie -> o aplicativo é iniciado.
Edit: Observe que, para mim, o aplicativo não tinha o diretório de trabalho atribuído pelo Path, provavelmente um erro do meu lado em algum lugar, mas vou mencioná-lo, apenas no caso.
Agora eu gostaria que algumas coisas fossem feitas no arquivo .sh original que se recusa a funcionar aqui. Portanto, não vou "aceitar" minha própria resposta por um tempo, caso apareça alguém que possa dizer exatamente o que está acontecendo.
Edit - algumas referências:
https://wiki.archlinux.org/index.php/Desktop_entries#File_example
https://specifications.freedesktop.org/desktop-entry-spec/desktop-entry-spec-latest.html#recognized-keys
Então, o negócio aqui pode ser que, em algum momento, você ou outra pessoa executou lxqt-config-session, que é o aplicativo gráfico que permite criá-los, não tem um nome padrão para sua nova entrada de inicialização - está em branco . Como resultado, o arquivo gerado é chamado apenas de ".desktop". Isso, por sua vez, é um arquivo oculto e, em qualquer caso, não corresponderá a determinadas pesquisas curinga. De qualquer forma, qualquer coisa chamada ".desktop" é ignorada.
Independentemente de você usar ou não lxqt-config-session para definir isso, ou apenas criar o arquivo manualmente, você deseja usar um nome normal como "foo.desktop".
Honestamente, o fato de lxqt-config-session permitir que esse nome fique em branco é, na minha opinião, um bug moderadamente grave.