Utwórz plik .desktop, który zostanie otwarty, i wykonaj polecenie w terminalu

39

Chciałbym wiedzieć, jak napisać Execpolecenie pliku .desktop, aby otworzyć nowy terminal i wykonać w nim skrypt powłoki. Skrypt powłoki działa i jest dostępny dla wszystkich użytkowników. Podczas uruchamiania skryptu z terminala wszystko działa, ale nie działa przy próbie uruchomienia skryptu z pliku .desktop.

Oto kilka kombinacji, które już wypróbowałem:

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

Opcja terminalu .desktop ma wartość true.

Paradiesstaub
źródło

Odpowiedzi:

46

Zawartość pliku pulpitu powinna wyglądać (zobacz, jak utworzyć plik .desktop przy użyciu edytora tekstu ):

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

Lub:

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

W pierwszym przypadku Terminalpole jest ustawione na false(być może sprzeczne z Twoimi oczekiwaniami), a w drugim przypadku na true, ale wynik jest w obu przypadkach taki sam.

Radu Rădeanu
źródło
1
Pierwsze rozwiązanie działa dla mnie, więc trzymam się tego. Czy wiesz, dlaczego musi być $ SHELL?
Paradiesstaub
1
@Thibaut Tak, oczywiście .
Radu Rădeanu
Działa to dla mnie, jednak chcę uruchomić polecenie za pomocą sudo, a kiedy utworzony program uruchamiający otwiera terminal, pyta mnie o hasło. Jak uruchomić polecenie i zapobiec temu zachowaniu?
E_Angel
1
@EliasAlves Trochę za późno, ale dla każdego, kto to czyta: nie można oczekiwać, że uruchomią polecenia wymagające uprawnień roota bez konieczności uwierzytelnienia się. (Chyba że wyraźnie skonfigurujesz system, aby to robił, co jest ogólnie złym pomysłem.)
code_dredd
Myślę, że pytanie brzmi: jak upewnić się, że terminal się pojawi, aby terminal nie zniknął, abyśmy mogli wprowadzić dane uwierzytelniające
RockScience
2
!#/bin/bash

gnome-terminal -e YOUR_COMMANDS

Utwórz powyższy plik. Nie zapomnijsudo chmod +x filename.sh

Mr.Lee
źródło
1
Problem z tym rozwiązaniem polega na tym, że terminal znika natychmiast, a użytkownik nie jest w stanie wejść w coś.
Paradiesstaub,
zapomniałem, jak się nazywa, ale myślę, że istnieje opcja utrzymania terminala. Może byćhold
Mr.Lee
2

Po prostu dodaj

;$SHELL 

na końcu twoich poleceń.

Jak dla mnie snapdnie jest czymś wykorzystującym pełną przepustowość systemu do odświeżania snapów o każdej porze, prawie kiedy pracuję w nocy.

Pomogło mi to utworzyć .shplik połączony z .desktopplikiem.
Zawartość .shpliku była

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

-Sw pierwszym wierszu .shpliku służy do wysłania STDINPUTdo sudopolecenia, co oznacza bezpośrednie wykonanie bez wprowadzania hasła.

Zawartość .desktoppliku to:

[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;
użytkownik225
źródło
0

Robię to. Pierwszy wiersz pliku tekstowego to! # / Bin / bash

Kolejnymi wierszami pliku tekstowego są polecenia (skrypt powłoki).

Zapisz plik jako coś.sh

Otwórz właściwości pliku i włącz uruchamianie pliku jako program.

Teraz, kiedy plik zostanie kliknięty dwukrotnie, dostaję opcję jego uruchomienia.

hatterman
źródło
2
To samo tutaj, terminal znika natychmiast.
Paradiesstaub,
Działa dla mnie bez problemów. Utwórz skrypt powłoki, dodaj linię! # / Bin / bash jako pierwszą linię. Zezwól na uruchamianie pliku jako pliku wykonywalnego. Kliknij dwukrotnie i wybierz Uruchom w terminalu. To po prostu działa.
hatterman
1
Czy jesteś pewien, że terminal się nie zamyka, ponieważ skrypt powłoki został zakończony? Czy na początku skryptu włącz tryb uśpienia 30, czy terminal pozostaje otwarty przez 30 sekund?
hatterman