Como diagnosticar "Ocorreu um erro ao iniciar o aplicativo"?

26

Eu criei um my-app.desktoparquivo para um programa que escrevi. Quando clico duas vezes, recebo a mensagem de erro " Ocorreu um erro ao iniciar o aplicativo ". Como posso obter informações mais detalhadas sobre qual é o problema?

Vi uma referência a uma seção "detalhes" da caixa de diálogo, mas não há nada parecido com o presente na que vejo. Se eu estivesse no meu Mac, abriria o aplicativo Console para ver se algum erro foi registrado, mas não aprendi nada parecido no Ubuntu.

(Observe que, diferentemente de outras perguntas com título semelhante, não estou perguntando o que há de errado com esse arquivo .desktop em particular; quero saber como descobrir em geral.)

Kevin Reid
fonte
1
Gostaria apenas de executar a linha Exec no terminal e ver o que a saída diz, mas você tem certeza de que o arquivo da área de trabalho está ok? talvez você deva verificar e executá-lo também no terminal.
Jacob Vlijm
@ Jacob Se existe uma maneira de "executá-lo a partir do terminal" que coloca algo útil no stderr, isso constituiria uma resposta para esta pergunta.
Kevin Reid
1
@terdon Eu tentei isso, e aconteceu que (como o próximo problema) o ambiente era diferente de uma maneira que importava. Quero saber como obter mais informações do processo normal de inicialização, para que não suponha o que é diferente.
Kevin Reid
2
@terdon Empiricamente, executá-lo no terminal é diferente - tentei e era diferente (em particular, um diferente PATH). Quero saber como obter exatamente o mesmo ambiente que um lançamento normal, mas com mais informações de diagnóstico.
Kevin Reid
2
Um pouco offtopic, mas 9 vezes de 10 esse problema areja são caracteres especiais, como espaços, no Exec=caminho. Lembre-se, você deve ter Exec=entre aspas e Path=sem aspas.
Barafu Albino

Respostas:

15

Aqui está um truque que você pode usar. Crie um script de wrapper para seu aplicativo que o inicie e capture a saída de erro:

#!/usr/bin/env bash

## Launch 'yourapp' and capture its standard error output
/path/to/yourapp 2>~/myapp.log

Salve isso ~/foo.she torne-o executável com chmod +x ~/foo.sh. Agora, aponte o iniciador da área de trabalho para ele. Algo como:

[Desktop Entry]
Version=2.0
Type=Application
Exec=/home/kevin/foo.sh
Terminal=true
Comment=My app!

Isso redirecionará todas as mensagens de erro ~/myapp.loge você poderá examiná-las quando quiser. Você pode usar 2>>~/myapp.logse desejar que mensagens de erro sucessivas sejam anexadas ao arquivo em vez de substituí-lo.


Como um aparte, a razão que o $PATHé diferente é porque provavelmente você está definindo o seu $PATHem ~/.bahsrcque não é lido pelo ambiente gráfico. Também é uma péssima idéia, pois $PATHela será definida toda vez que você abrir um novo terminal, o que é desnecessário. Use ~/.profilepara isso em seu lugar. Para mais detalhes sobre quais arquivos são lidos ao ver aqui e para mais sobre qual arquivo deve ser usado para quê, consulte aqui .

Terdon
fonte
Não encontrei o problema dessa maneira, mas o wrapper estava funcionando, então mantive o wrapper como executável.
Jānis Elmeris
16

Encontre uma resposta para esta pergunta aqui: /ubuntu//a/836842

Tente o seguinte:

desktop-file-validate my-app.desktop

Ele gera erros no seu .desktoparquivo. Por exemplo, o meu retornou:

error: first group is not "Desktrop Entry"

Então, quando corrigi o erro de digitação Desktop Entry, o script foi executado com êxito.

Jimmy
fonte
7

Executando o seguinte comando no terminal:

awk -F= '/Exec=/{system($2)}' your_desktop_file.desktop

Estou certo de que você descobrirá se há um erro ou não no seu comando atribuído ao Execcampo de dentro do seu arquivo .desktop.

Radu Rădeanu
fonte
5
Eu tenho um problema semelhante. eu executo seu comando e o arquivo my.desktop funciona perfeitamente. Mas quando eu duplo clique nele, ele mostra Ocorreu um erro ao iniciar o aplicativo
Sayantan Koley
Essa resposta é meio engraçada, pois (embora eu ache que não faça muito mais do que executar o valor Exec no shell), me fez perceber que a chave TryExec era meu problema.
21418 mirh
3

normalmente, o terminal (-putput) fornece muitas informações úteis, tanto sobre o aplicativo quanto sobre o arquivo da área de trabalho. Um exemplo: se eu executar meu aplicativo no terminal, digitando o comando no terminal, o aplicativo será iniciado.

No entanto, se houver algo errado, você pode esperar uma saída como:

Traceback (most recent call last):
  File "/home/jacob/Bureaublad/werkmap_2.0/uploaded_versions/2.1.2/32_en_ppa    /qle-2.1.2/code/qle_quicklisteditor", line 4044, in <module>
    MainWindow()
  File "/home/jacob/Bureaublad/werkmap_2.0/uploaded_versions/2.1.2/32_en_ppa   /qle-2.1.2/code/qle_quicklisteditor", line 51, in __init__
    self.load_sectons()
AttributeError: 'MainWindow' object has no attribute 'load_sectons'
jacob@Jacobwerkkamer:~/Bureaublad/werkmap_2.0/uploaded_versions/2.1.2/32_en_ppa   /qle-2.1.2/code$ 

que fornece muitas informações úteis, até a linha do aplicativo que causa o erro. (Eu errei de propósito)

O mesmo com o arquivo da área de trabalho, basta abrir um terminal no diretório do arquivo .desktop e arrastá-lo para o terminal. Se, por exemplo, você remover a Exec=linha de um arquivo .desktop, o terminal informará que não é possível encontrar o comando a ser executado.

Para testar se o aplicativo apresenta um erro, basta executar o que você colocou após a Exec=sequência.

A saída do terminal é geralmente muito específica e útil nos relatórios de erros, como aqui .

Jacob Vlijm
fonte
2
Sei como usar um terminal e como solucionar problemas de inicialização de um programa em geral. Assumindo essa abordagem, o que eu preciso saber é como reproduzir as condições de um lançamento do .desktop com precisão no terminal .
Kevin Reid
0

Quando eu realmente não consigo entender, eu:

cd ~/Desktop
ln -s /my/binary/thatIwanttorun mybinary

Em seguida, clique com o botão direito do mouse no ícone padrão criado e aponte para um gráfico melhor.

Tom
fonte
e deve haver um <cr> depois de "cd ~ / Desktop"
Tom
-1

Para mim, o problema era uma Icon=linha que faltava (o que parece ser um requisito estúpido para um iniciador ativo). Meu arquivo .desktop completo agora se parece com:

[Desktop Entry]
Name=LiClipse
Comment=Variant of Eclipse
Exec=/home/tsbertalan/bin/liclipse
Terminal=true
Type=Application
Icon=/home/tsbertalan/usr/liclipse/icon.xpm

O que não é particularmente robusto às mudanças no usuário, mas tanto faz.

tsbertalan
fonte