Erstellen Sie eine .desktop-Datei, die geöffnet wird, und führen Sie einen Befehl in einem Terminal aus

39

Ich möchte wissen, wie man den ExecBefehl einer .desktop-Datei schreibt , um ein neues Terminal zu öffnen und ein Shell-Skript darin auszuführen. Das Shell-Skript funktioniert und ist für alle Benutzer zugänglich. Wenn Sie das Skript vom Terminal aus starten, funktioniert alles, aber nicht, wenn Sie versuchen, das Skript von einer .desktop-Datei aus zu starten.

Hier sind einige Kombinationen, die ich bereits ausprobiert habe:

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

Die Option .desktop terminal ist auf true gesetzt.

Paradiesstaub
quelle

Antworten:

46

Der Inhalt Ihrer Desktop-Datei sollte folgendermaßen aussehen (siehe Erstellen einer Desktop-Datei mit einem Texteditor ):

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

Oder:

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

Im ersten Fall ist das TerminalFeld auf false(möglicherweise wider Erwarten) und im zweiten Fall auf festgelegt true, das Ergebnis ist jedoch in beiden Fällen dasselbe.

Radu Rădeanu
quelle
1
Die erste Lösung funktioniert für mich, also bleibe ich dabei. Wissen Sie, warum es $ SHELL geben muss?
Paradiesstaub
1
@Thibaut Ja, natürlich .
Radu Rădeanu
Bei mir hat es funktioniert, aber ich möchte einen Befehl mit sudo starten. Wenn der Starter erstellt wird, wird das Terminal geöffnet, das mich nach dem Passwort fragt. Wie starte ich einen Befehl und verhindere dieses Verhalten?
E_Angel
1
@EliasAlves Ein bisschen spät, aber für alle anderen, die dies lesen: Sie können nicht erwarten, Befehle auszuführen, die Root-Berechtigungen erfordern, ohne sich authentifizieren zu müssen. (Es sei denn, Sie konfigurieren Ihr System explizit dafür, was im Allgemeinen eine schlechte Idee ist.)
code_dredd
Ich denke, die Frage ist: Wie kann ich sicherstellen, dass das Terminal angezeigt wird, damit es nicht verschwindet, damit wir die Anmeldeinformationen
eingeben
2
!#/bin/bash

gnome-terminal -e YOUR_COMMANDS

Machen Sie die obige Datei. Vergiss das nichtsudo chmod +x filename.sh

Herr Lee
quelle
1
Das Problem bei dieser Lösung ist, dass das Terminal sofort verschwindet und ein Benutzer nicht in der Lage ist, etwas einzugeben.
Paradiesstaub
Ich habe vergessen, wie es heißt, aber ich glaube, es gibt eine Option, um das Terminal aufrechtzuerhalten. Es könnte seinhold
Mr.Lee
2

Einfach hinzufügen

;$SHELL 

am Ende Ihrer Befehle.

Wie für mich snapdist es nicht etwas, das die volle Bandbreite des Systems nutzt, um Schnappschüsse jedes Mal zu aktualisieren, wenn ich fast nachts arbeite.

Das funktionierte also für mich, um eine .shDatei zu erstellen, die mit einer Datei verknüpft ist .desktop.
Inhalt für die .shDatei war

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

-SIn der ersten Zeile der .shDatei wird STDINPUTan den sudoBefehl gesendet, was Direktausführung ohne Passworteingabe bedeutet.

Inhalte für die .desktopDatei waren:

[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;
user225
quelle
0

Ich mache das Die erste Zeile der Textdatei lautet! # / Bin / bash

Nachfolgende Zeilen der Textdatei sind die Befehle (das Shell-Skript).

Speichern Sie die Datei als something.sh

Öffnen Sie die Eigenschaften der Datei und aktivieren Sie die Ausführung als Programm.

Wenn ich nun auf die Datei doppelklicke, bekomme ich die Option, sie auszuführen.

Hutmacher
quelle
2
Ebenso verschwindet das Terminal sofort.
Paradiesstaub
Es funktioniert bei mir ohne Probleme. Erstellen Sie das Shell-Skript und fügen Sie die Zeile! # / Bin / bash als erste Zeile hinzu. Ermöglichen, dass die Datei als ausführbare Datei ausgeführt wird. Doppelklicken Sie und wählen Sie In Terminal ausführen. Es funktioniert einfach
Hutmacher
1
Sind Sie sicher, dass das Terminal nicht einfach geschlossen wird, weil das Shell-Skript beendet wurde? Bleibt das Terminal zu Beginn Ihres Skripts 30 Sekunden lang geöffnet?
Hutmacher