¿Cómo diagnostico "Hubo un error al iniciar la aplicación"?

26

Creé un my-app.desktoparchivo para un programa que escribí. Cuando hago doble clic en él, aparece el mensaje de error " Hubo un error al iniciar la aplicación ". ¿Cómo puedo obtener información más detallada sobre cuál es el problema?

Vi una referencia a una sección de "detalles" del cuadro de diálogo, pero no hay nada como eso presente en el que veo. Si estuviera en mi Mac, abriría la aplicación Consola para ver si se registraron errores, pero no he aprendido nada similar en Ubuntu.

(Tenga en cuenta que, a diferencia de otras preguntas con títulos similares, no pregunto qué tiene de malo este archivo .desktop en particular; quiero saber cómo averiguarlo en general).

Kevin Reid
fuente
1
Simplemente ejecutaría la línea Exec desde el terminal y vería lo que la salida le indica, pero ¿está seguro de que el archivo de escritorio está bien? tal vez deberías verificarlo y ejecutarlo también desde la terminal.
Jacob Vlijm
@Jacob Si hay una manera de "ejecutarlo desde la terminal" que pone algo útil en stderr, eso constituiría una respuesta a esta pregunta.
Kevin Reid
1
@terdon Lo intenté, y resultó que (como el siguiente problema) el entorno era diferente de una manera que importaba. Quiero saber cómo obtener más información del proceso de lanzamiento normal para no adivinar qué es diferente.
Kevin Reid
2
@terdon Empíricamente, ejecutarlo en la terminal es diferente: lo intenté y fue diferente (en particular, diferente PATH). Quiero saber cómo obtener exactamente el mismo entorno que un lanzamiento normal pero con más información de diagnóstico.
Kevin Reid
2
Un poco fuera de tema, pero 9 veces de 10 ese problema se transmite son caracteres especiales, como espacios, en el Exec=camino. Recuerde, debe tener Exec=entre comillas y Path=sin comillas.
Barafu Albino

Respuestas:

15

Aquí hay un truco que puedes usar. Cree un script de envoltura para su aplicación que lo inicie y capture la salida del error:

#!/usr/bin/env bash

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

Guarde eso como ~/foo.shy hágalo ejecutable con chmod +x ~/foo.sh. Ahora, apunte su iniciador de escritorio hacia él. Algo como:

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

Eso redirigirá los mensajes de error ~/myapp.logy podrá examinarlos cuando lo desee. Puede usarlo 2>>~/myapp.logsi desea que se agreguen mensajes de error sucesivos al archivo en lugar de sobrescribirlo.


Como acotación al margen, la razón por la que el $PATHes diferente se debe a que es probable que esté configurando el $PATHde ~/.bahsrcque no se lee por el entorno gráfico. También es una mala idea, ya $PATHque se establecerá cada vez que abra una nueva terminal y eso es innecesario. Úselo ~/.profilepara esto en su lugar. Para más detalles sobre qué archivos se leen cuando vea aquí y para más información sobre qué archivo debe usarse para qué, vea aquí .

terdon
fuente
No encontré el problema de esta manera, pero el contenedor funcionaba, así que solo mantuve el contenedor como el ejecutable.
Jānis Elmeris
16

Encontré una respuesta a esta pregunta aquí: /ubuntu//a/836842

Prueba esto :

desktop-file-validate my-app.desktop

Produce errores en su .desktoparchivo. Por ejemplo, el mío devolvió:

error: first group is not "Desktrop Entry"

Entonces, una vez que corregí el error tipográfico Desktop Entry, el script se ejecutó correctamente.

Palanqueta
fuente
7

Al ejecutar el siguiente comando en la terminal:

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

Estoy seguro de que descubrirá si hay un error o no en su comando asignado al Execcampo desde el interior de su archivo .desktop.

Radu Rădeanu
fuente
55
Tengo un problema similar ejecuto su comando y el archivo my.desktop funciona perfectamente. Pero cuando hago doble clic en él, muestra que hubo un error al iniciar la aplicación
Sayantan Koley
Esta respuesta es un poco divertida, ya que (aunque no creo que haga mucho más que ejecutar el valor Exec en el shell) me hizo darme cuenta de que la clave TryExec era mi problema.
mirh
3

por lo general, el terminal (salida) le brinda mucha información útil, tanto en la aplicación como en el archivo de escritorio. Un ejemplo: si ejecuto mi aplicación desde la terminal, escribiendo el comando en la terminal, se inicia la aplicación.

Sin embargo, si hay algo mal, puede esperar una salida 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 le brinda mucha información útil, incluso la línea en su aplicación que causa el error. (Lo arruiné a propósito)

Lo mismo con el archivo de escritorio, simplemente abra un terminal en el directorio del archivo .desktop y arrástrelo al terminal. Si, por ejemplo, elimina la Exec=línea de un archivo .desktop, el terminal le dirá que no puede encontrar el comando para ejecutar.

Para probar si la aplicación da un error, simplemente ejecute lo que puso después de la Exec=cadena.

La salida del terminal suele ser muy específica y útil en informes de errores, como aquí .

Jacob Vlijm
fuente
2
Sé cómo usar un terminal y cómo solucionar problemas del inicio de un programa en general. Suponiendo este enfoque, lo que necesito saber es cómo reproducir las condiciones de un lanzamiento de .desktop con precisión en la terminal .
Kevin Reid
0

Cuando realmente no puedo entenderlo, yo:

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

Luego haga clic derecho en el icono predeterminado que se crea y apunte a un mejor gráfico.

Tom
fuente
y debería haber un <cr> después de "cd ~ / Desktop"
Tom
-1

Para mí, el problema era una Icon=línea faltante (que parece un requisito estúpido para un lanzador que funcione). Mi archivo .desktop completo ahora se ve así:

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

Lo cual no es particularmente robusto para los cambios en el usuario, pero lo que sea.

tsbertalan
fuente