49 votes

Créer un fichier .desktop qui ouvre et exécute une commande dans un terminal

Je voudrais savoir comment écrire le Exec d'un fichier .desktop pour ouvrir un nouveau terminal et y exécuter un Shell Shell. Le Shell Shell fonctionne et est accessible à tous les utilisateurs. Lorsque l'on lance le Shell à partir du terminal, tout fonctionne, mais ce n'est pas le cas lorsque l'on essaie de lancer le Shell à 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 .desktop terminal est définie sur true.

58voto

Radu Rădeanu Points 156862

Le contenu de votre fichier de bureau devrait ressembler à ce qui suit (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 bien :

[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 Terminal est fixé à false (peut-être contrairement à vos attentes) et, dans le second cas, elle est fixée à true mais le résultat est le même dans les deux cas.

3voto

user225 Points 31

Il suffit d'ajouter

;$SHELL 

à la fin de vos commandes.

Comme pour moi snapd n'est pas quelque chose qui utilise toute la bande passante du système pour rafraîchir les photos à tout moment, presque quand je travaille la nuit.

Cela m'a donc permis de créer un .sh lié à un fichier .desktop archivo.
Contenu pour .sh ont été

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

-S dans la première ligne du .sh est utilisé pour envoyer des STDINPUT à la sudo commande signifiant l'exécution directe sans saisie de mot de passe.

Contenus pour le .desktop étaient :

[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;

2voto

Mr.Lee Points 881
!#/bin/bash

gnome-terminal -e YOUR_COMMANDS

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

1voto

Julian Coffee Points 11

TL;DR

[Desktop Entry]
Version=1.0
Name=Hello
Exec=sh -c 'echo hello; $SHELL'
Icon=utilities-terminal
Terminal=true
Type=Application

Comme indiqué dans spécification de la saisie de données sur le bureau , Terminal=true indique au lanceur de lancer votre script dans une fenêtre de terminal. L'émulateur de terminal choisi dépend de vos paramètres d'application par défaut et de votre environnement de bureau. Dans GNOME, c'est gnome-terminal, dans KDE, c'est Konsole. (Sans DE, en WM simple, il y a un bogue dans xdg-open, et Terminal=true tout simplement ignorée, voir la question )

Vous avez besoin de cette ligne pour exécuter votre script et lancer un script après lui.

Exec=sh -c 'echo hello; $SHELL'
  1. sh -c 'COMMAND' exécuter le binaire "sh" trouvé dans $PATH qui exécute COMMAND (sur de nombreux systèmes, sh est le lien symbolique vers bash mais pour des raisons de portabilité, "sh" est préférable)
  2. echo hello; $SHELL fait deux choses. Premièrement, il exécute echo hello puis, après l'exécution de cette commande, lance $Shell.

Si vous voulez pas ajoutez une commande qui attend que vous quittiez, un émulateur de terminal lancera simplement votre programme et sortie .


P.S. Si vous souhaitez simplement ne pas fermer votre terminal, vous pouvez faire ce qui suit

Exec=sh -c 'echo hello; read'

または

Exec=sh -c 'echo hello; sleep 5'

(la lecture attendra que vous appuyiez sur Entrée, le sommeil attendra 5 secondes)

P.P.S $SHELL sera probablement la même que celle de la dernière section de la /etc/passwd en fonction de l'utilisateur.

$ man login

Les valeurs de $HOME, $USER, $Shell, $PATH, $LOGNAME et $MAIL sont définies. ac sont définies en fonction des champs appropriés de l'entrée du mot de passe.

0voto

C'est ce que je fais. La première ligne du fichier texte est !#/bin/bash

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

Enregistrer le fichier sous le nom something.sh

Ouvrez les propriétés du fichier et activez l'option Exécuter le fichier en tant que programme.

Désormais, lorsque je double-clique sur le fichier, j'ai la possibilité de l'exécuter.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X