web-dev-qa-db-fra.com

Le fichier .desktop n'exécute pas de script et fonctionne correctement lorsqu'il est exécuté manuellement

J'ai des problèmes avec mes fichiers .desktop. J'ai un script Shell qui surveille constamment la possibilité de placer un fichier dans le dossier "Téléchargements". Lorsqu'un fichier est placé dans le dossier, il exécute automatiquement un programme en C que j'ai écrit dans le terminal et m'offre différentes options permettant de déplacer le fichier.

Tout va bien là-bas. Cependant, je veux un raccourci vers le programme sur le bureau. J'ai essayé d'utiliser l'éditeur de raccourci pour spécifier la commande à exécuter et pour l'exécuter dans un terminal, et pour que le terminal reste actif après l'exécution de la commande. Tout ce qui est dans la commande est cd ~/Documents/prog/c/learn/inotify-tools && ./notifyscript.sh

Cependant, cela ne fonctionnera pas. De plus, j'ai essayé d'écrire un programme C qui disait au système la commande ci-dessus, pensant que l'éditeur de raccourcis était foiré.

INTÉRESSEMENT, il fonctionne bien quand je suis dans son répertoire et tapez ./'Download Manager'

Cependant, je ne veux pas continuer à changer de répertoire à chaque redémarrage et à exécuter le programme. Au lieu de cela, je veux un raccourci .desktop ou, mieux encore, un moyen de démarrer au redémarrage automatique. Je ne comprends pas pourquoi ça ne marche pas. Si je n'exécute pas dans le terminal ça ne marche pas ...

Voici le fichier de bureau:

[Desktop Entry]
Name=Download Manager
Comment=
Exec=cd ~/Documents/prog/c/learn/inotify-tools && ./notifyscript.sh
Icon=icon name
Terminal=true
Type=Application
StartupNotify=true
X-KeepTerminal=true

Voici le code source C et son fichier Desktop ainsi qu'une autre option:

[Desktop Entry]
Name=Download Manager
Comment=
Exec=./'Download Manager'
Icon=icon name
Terminal=true
Type=Application  
StartupNotify=true
X-KeepTerminal=true

Code source C:

/*
desktoplauncher.c Source Code
Written by me
This program is used to launch
the inotify monitor Shell script
which in turn launches the 
download manager program 
whenever a file is placed in the
"Downloads" folder.
*/ 

#include <stdio.h>

int main()
{
system("cd ~/Documents/prog/c/learn/inotify-tools && ./notifyscript.sh");
}
4
Zeke Legge

Je l'ai fait fonctionner en déplaçant le script dans mon dossier personnel et en modifiant le fichier de configuration du bureau comme suit.

[Desktop Entry]
Name=Download Manager
Comment=
Exec=lxterminal --command="./.notifyscript.sh"
Icon=icon name
Terminal=false
Type=Application
StartupNotify=true

Cela semble vraiment étrange, surtout parce que le terminal est faux ... De toute façon, ça marche, alors je suis heureux! Merci à tous pour votre aide!

3
Zeke Legge

La ligne Exec n'exécute probablement pas la valeur dans un shell. Essaye ça:

Exec=/home/user/Documents/prog/c/learn/inotify-tools/notifyscript.sh

Si vous avez besoin de ce répertoire en tant que cwd, ajoutez ceci au script Shell:

cd -P -- "$(dirname -- "$0")"
2
glenn jackman