Creare un file .desktop che si apre ed eseguire un comando in un terminale


39

Vorrei sapere come scrivere il Execcomando di un file .desktop per aprire un nuovo terminale ed eseguire uno script di shell in esso. Lo script della shell funziona e è accessibile a tutti gli utenti. Quando si avvia lo script dal terminale, tutto funziona, ma non quando si tenta di avviare lo script da un file .desktop.

Ecco alcune combinazioni che ho già provato:

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

L'opzione del terminale .desktop è impostata su true.

Risposte:


46

Il contenuto del tuo file desktop dovrebbe apparire come (vedi come creare un file .desktop usando un editor di testo ):

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

O:

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

Nel primo caso, il Terminalcampo è impostato su false(forse in contrasto con le tue aspettative) e nel secondo caso su true, ma il risultato è in entrambi i casi lo stesso.


1
La prima soluzione funziona per me, quindi mi attengo. Sai perché ci deve essere $ SHELL?
Paradiesstaub,

1
@Thibaut Sì, certo .
Radu Rădeanu,

Ha funzionato per me, tuttavia voglio lanciare un comando con sudo, quindi quando viene utilizzato launcher si apre il terminale che mi chiede la password. Come posso avviare un comando e prevenire questo comportamento?
E_Angel,

1
@EliasAlves Un po 'in ritardo, ma per chiunque legga questo: non puoi aspettarti di eseguire comandi che richiedono i privilegi di root senza che ti venga richiesto di autenticarti. (A meno che non configuri esplicitamente il tuo sistema per farlo, il che è generalmente una cattiva idea.)
code_dredd

Penso che la domanda sia: come assicurarsi che il terminale appaia in modo che il terminale non scompaia in modo che possiamo inserire le credenziali
RockScience

2
!#/bin/bash

gnome-terminal -e YOUR_COMMANDS

Crea il file sopra. Non dimenticare disudo chmod +x filename.sh


1
Il problema con questa soluzione è che il terminale scompare immediatamente e un utente non è in grado di inserire qualcosa.
Paradiesstaub,

ho dimenticato come si chiama ma penso che ci sia un'opzione per mantenere il terminale. Potrebbe esserehold
Mr.Lee,

2

Aggiungi semplicemente

;$SHELL 

alla fine dei tuoi comandi.

Come per me snapdnon è qualcosa che utilizza la larghezza di banda completa del sistema per aggiornare gli snap in qualsiasi momento quasi lavoro di notte.

Quindi questo ha funzionato per me per creare un .shfile collegato a un .desktopfile.
I contenuti per il .shfile erano

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

-Snella prima riga del .shfile viene utilizzato per inviare STDINPUTal sudocomando il significato di eseguire direttamente senza inserire la password.

I contenuti del .desktopfile erano:

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

0

Lo faccio. La prima riga del file di testo è! # / Bin / bash

Le righe successive del file di testo sono i comandi (lo script della shell).

Salva il file come qualcosa.sh

Apri le proprietà del file e abilita il file di esecuzione come programma.

Ora, quando si fa doppio clic sul file, ho la possibilità di eseguirlo.


2
Lo stesso qui, il terminale scompare immediatamente.
Paradiesstaub,

Funziona per me senza problemi. Crea lo script della shell, aggiungi la riga! # / Bin / bash come prima riga. Consentire l'esecuzione del file come eseguibile. Fare doppio clic e selezionare Esegui nel terminale. Funziona e basta.
cappellaio

1
Sei sicuro che il terminale non si stia solo chiudendo perché lo script della shell è terminato? All'inizio del tuo script mettere sleep 30, il terminale rimane aperto per 30 secondi?
cappellaio
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.