web-dev-qa-db-fra.com

Créer un fichier .desktop qui s'ouvre et exécuter une commande dans un terminal

J'aimerais savoir comment écrire la commande Exec d'un fichier .desktop pour ouvrir un nouveau terminal et y exécuter un script Shell. Le script shell fonctionne et est accessible à tous les utilisateurs. Lorsque vous lancez le script à partir du terminal, tout fonctionne, mais cela ne fonctionne pas lorsque vous essayez de lancer le script à partir d'un fichier .desktop.

Voici quelques combinaisons que j'ai déjà essayées:

Exec=gnome-terminal -x sh -c 'echo hello'
Exec=sh -c 'gnome-terminal echo hello'
Exec=sh -c 'echo hello'
Exec=echo hello

L'option de terminal .desktop est définie sur true.

35
Paradiesstaub

Le contenu de votre fichier desktop devrait ressembler à (voir comment créer un fichier .desktop à l’aide d’un éditeur de texte ):

[Desktop Entry]
Version=1.0
Name=Test        
Comment=Test the terminal running a command inside it
Exec=gnome-terminal -e "bash -c 'echo hello;$Shell'"
Icon=utilities-terminal
Terminal=false
Type=Application
Categories=Application;

Ou:

[Desktop Entry]
Version=1.0
Name=Test        
Comment=Test the terminal running a command inside it
Exec=bash -c 'echo hello;$Shell'
Icon=utilities-terminal
Terminal=true 
Type=Application
Categories=Application;

Dans le premier cas, le champ Terminal est défini sur false (peut-être contrairement à vos attentes) et, dans le second cas, sur true, mais le résultat est identique.

41
Radu Rădeanu
!#/bin/bash

gnome-terminal -e YOUR_COMMANDS

Créez le fichier ci-dessus. N'oubliez pas de Sudo chmod +x filename.sh

2
Mr.Lee

Ajoutez simplement

;$Shell 

à la fin de vos commandes.

Comme pour moi, snapdn'utilise pas toute la bande passante du système pour actualiser les captures instantanées presque à chaque fois que je travaille la nuit.

Cela a donc fonctionné pour moi de créer un fichier .sh lié à un fichier .desktop.
Le contenu du fichier .sh était

echo <your password> | Sudo -S systemctl stop snapd.service
Sudo systemctl disable snapd.service;$Shell

-S dans la première ligne du fichier .sh sert à envoyer STDINPUTà la commande Sudoqui signifie exécution directe sans entrer de mot de passe.

Le contenu du fichier .desktop était le suivant:

[Desktop Entry]
Version=1.0
Name=Test
Comment=Test the terminal running a command inside it
Exec=gnome-terminal -e "/scripts/disable_snap.sh"
Icon=terminal
Terminal=true
Type=Application
Categories=Application;
1
user225

Je fais ça. La première ligne du fichier texte est! #/Bin/bash

Les lignes suivantes du fichier texte sont les commandes (le script Shell).

Enregistrez le fichier sous quelque chose.sh

Ouvrez les propriétés du fichier et activez le fichier d'exécution en tant que programme.

Maintenant, lorsque le fichier est double-cliqué, je reçois l'option de l'exécuter.

0
hatterman