web-dev-qa-db-fra.com

Pourquoi le lancement de mon propre script à partir d'un lanceur ne fonctionne-t-il qu'une seule fois?

J'ai créé un script Shell, disons que c'est

echo hi
sleep 5
echo bye
exit

J'ai ensuite créé un .desktop -file pour lancer le script Shell. Double-cliquer, cela fonctionne parfaitement bien:

[Desktop Entry]
Version=1.0
Name=Test
Comment=Bash Cript
Exec=bash /example/test.sh
Terminal=true
Type=Application
Categories=Utility;Application;

Après avoir glissé-déposé le fichier .desktop dans le lanceur Unity, je peux cliquer dessus. ONCE. Après le premier lancement, l'icône reste dans le lanceur, mais cliquer dessus ne fait rien.

Cliquez avec le bouton central de la souris pour relancer l'application

Qu'est-ce que je fais mal?

3
Alex

Cela fonctionne

... même testé, mais l'icône du lanceur ne répond pas pendant environ 7 secondes après avoir cliqué. Si vous cliquez à nouveau après ces 7 secondes, cela fonctionnera à nouveau.

Cette "rupture" est provoquée par l'icône, en attendant qu'une fenêtre apparaisse. Ce ne sera pas le cas, car la fenêtre gnome-terminal Apparente est "revendiquée" par l'icône de lancement de gnome-terminal, Et votre icône "maison" ne reconnaît pas la fenêtre comme "le sien".

Solution?

Vous pourriez résoudre le problème en ajoutant une ligne à votre lanceur (14.04)

StartupWMClass=gnome-terminal

ou (16.04):

StartupWMClass=gnome-terminal-server

cependant , ne faites cela que pour des raisons de test, n'utilisez pas ceci comme une solution permanente; avoir plusieurs fichiers .desktop, prétendant peut-être le même WM_CLASS dans leur commande principale est une mauvaise idée, cela provoquera des conflits dans la façon dont gnome-terminal apparaît dans le lanceur Unity.

Meilleure solution

Mieux vaut ajouter votre script en tant qu'option de clic droit au lanceur gnome-terminal Existant:

enter image description here

  1. Copiez le lanceur global gnome-terminal De /usr/share/applications Vers

~/.local/share/applications:

    cp /usr/share/applications/gnome-terminal.desktop ~/.local/share/applications
  1. Ouvrez le fichier avec gedit:

    gedit ~/.local/share/applications/gnome-terminal.desktop
    
  2. Changez de ligne:

    Actions=New;
    

    dans:

    Actions=New;My Script;
    

    et ajoutez la section:

    [Desktop Action My Script]
    Name=My Script
    Exec=gnome-terminal -e "bash /absolute/path/to/your/script.sh"
    

    à la toute fin du fichier. Déconnectez-vous puis reconnectez-vous et votre script sera disponible sous forme de raccourci dans le lanceur gnome-terminal.

5
Jacob Vlijm