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

39

J'aimerais savoir comment écrire la Execcommande 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. Lors du lancement du 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.

Paradiesstaub
la source

Réponses:

46

Le contenu de votre fichier de bureau doit 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 Terminalchamp est défini sur false(peut-être contrairement à vos attentes) et dans le second true, sur mais le résultat est identique dans les deux cas.

Radu Rădeanu
la source
1
La première solution fonctionne pour moi, alors je m'en tiens à cela. Savez-vous pourquoi il doit y avoir $ SHELL?
Paradiesstaub
1
@Thibaut Oui, bien sûr .
Radu Rădeanu
Cela a fonctionné pour moi, cependant je veux lancer une commande avec sudo, puis, lorsque le lanceur d’utilisation créé, il ouvre le terminal en me demandant le mot de passe. Comment lancer une commande et prévenir ce comportement?
E_Angel
1
@EliasAlves Un peu tard, mais si vous lisez ceci: vous ne pouvez pas vous attendre à exécuter des commandes nécessitant des privilèges root sans être obligé de vous authentifier. (Sauf si vous configurez explicitement votre système pour faire cela, ce qui est généralement une mauvaise idée.)
code_dredd
Je pense que la question est la suivante: comment s'assurer que le terminal apparaît afin que le terminal ne disparaisse pas afin que nous puissions entrer les informations d'identification
RockScience
2
!#/bin/bash

gnome-terminal -e YOUR_COMMANDS

Créez le fichier ci-dessus. N'oublie pas desudo chmod +x filename.sh

M. Lee
la source
1
Le problème avec cette solution est que le terminal disparaît immédiatement et qu'un utilisateur n'est pas capable d'entrer quelque chose.
Paradiesstaub
J'ai oublié comment il s'appelle, mais je pense qu'il y a une option pour garder le terminal en place. Il se pourraithold
Mr.Lee
2

Ajoutez simplement

;$SHELL 

à la fin de vos commandes.

Comme pour moi, ce snapdn'est pas quelque chose qui utilise la bande passante totale du système pour actualiser les instantanés presque à chaque fois que je travaille la nuit.

Donc, cela a fonctionné pour moi pour créer un .shfichier lié à un .desktopfichier.
Le contenu du .shfichier était

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

-Sdans la première ligne du .shfichier est utilisé pour envoyer STDINPUTà la sudocommande signifiant direct execute sans entrer le mot de passe.

Le contenu du .desktopfichier était:

[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;
utilisateur225
la source
0

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.

Hatterman
la source
2
Idem ici, le terminal disparaît immédiatement.
Paradiesstaub
Cela fonctionne pour moi pas de problèmes. Créez le script shell, ajoutez la ligne! # / Bin / bash en tant que première ligne. Autoriser le fichier à être exécuté en tant qu'exécutable. Double-cliquez et sélectionnez run in terminal. Ça fonctionne.
Hatterman
1
Êtes-vous sûr que le terminal ne ferme pas simplement parce que le script shell est terminé? Au début de votre script, mettez sommeil 30, le terminal reste-t-il ouvert pendant 30 secondes?
hatterman