web-dev-qa-db-fra.com

Le fichier de raccourci Netbeans sur le bureau ne fonctionne pas dans le lanceur Unity, la commande Exec fonctionne à terme

J'ai eu des problèmes avec le fichier de bureau Netbeans généré par le script d'installation Netbeans. Le fichier en question, situé dans le dossier/usr/share/applications, est très simple:

[Desktop Entry]
Encoding=UTF-8
Name=NetBeans IDE 8.0
Comment=The Smarter Way to Code
Exec=/bin/sh "/usr/local/netbeans-8.0/bin/netbeans"
Icon=/usr/local/netbeans-8.0/nb/netbeans.png
Categories=Application;Development;Java;IDE
Version=1.0
Type=Application
Terminal=0

L'application Netbeans elle-même fonctionne parfaitement si je l'exécute depuis un terminal utilisant /usr/local/netbeans-8.0/bin/netbeans. Est-ce que j'ai râté quelque chose? Je ne peux pas comprendre comment obtenir le résultat d'erreur si je l'exécute en double-cliquant sur ou à partir du programme de lancement. Il n'y a pas d'erreur sur le terminal. Des idées?

Edit: Le fichier netbeans est exécutable.

2
Aargonian

essayer sans /bin/sh

Exec=/usr/local/netbeans-8.0/bin/netbeans
1
pl_rock

J'ai compris le problème en consultant syslog. J'aurais probablement dû faire cela au début, mais je suis toujours un noob Linux. Désolé si j'ai perdu le temps de quelqu'un!

Apparemment, Netbeans n’avait pas réussi à trouver un agent d’outil. Plus précisément, l'outil d'instrumentation Jayatanaag.jar. Pour une raison quelconque, cela n'a pas provoqué d'état d'échec lors du démarrage direct depuis un terminal, mais a échoué uniquement lors de l'exécution à partir du fichier .desktop. Pour corriger cette erreur, j'ai désinstallé et réinstallé jayatana:

Sudo apt-get purge jayatana
Sudo apt-get install jayatana

Cela a résolu le problème immédiatement.

1
Aargonian

D'abord une explication, merci @ kos

En utilisant une ligne Exec= telle que

Exec=/usr/local/netbeans-8.0/bin/netbeans

netbeans est déjà exécuté dans sh, car les lignes Exec= dans les fichiers du bureau sont exécutées sous forme de commandes dans sh et non dans bash. Alors

Exec=/bin/sh -c "/usr/local/netbeans-8.0/bin/netbeans" 

engendre une instance de sh excessive. Juste

Exec=/usr/local/netbeans-8.0/bin/netbeans

va exécuter netbeans dans sh


Si vous avez vraiment besoin pour certaines raisons sh, alors votre propriété Exec= est incorrecte.

Voici un exemple avec Eclipse, un autre IDE basé sur Java

% sh "/opt/Eclipse/eclipse"
/opt/Eclipse/eclipse: 1: /opt/Eclipse/eclipse: Syntax error: "(" unexpected

Pour lancer une commande avec sh, vous devez utiliser le commutateur -c:

Exec=/bin/sh -c "/usr/local/netbeans-8.0/bin/netbeans"

-c string
    If the -c option is present, then commands are read fromstring.
    If there are arguments after the string, they are assigned to the positional
    parameters, starting with $0.
1
A.B.