Buat file .desktop yang terbuka dan jalankan perintah di terminal

39

Saya ingin tahu cara menulis Execperintah file .desktop untuk membuka terminal baru dan menjalankan skrip shell di dalamnya. Script shell berfungsi dan dapat diakses oleh semua pengguna. Ketika meluncurkan skrip dari terminal semuanya berfungsi, tetapi tidak ketika mencoba meluncurkan skrip dari file .desktop.

Berikut adalah beberapa kombinasi yang sudah saya coba:

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

Opsi .desktop terminal disetel ke true.

Paradiesstaub
sumber

Jawaban:

46

Konten file desktop Anda akan terlihat seperti (lihat cara membuat file .desktop menggunakan editor teks ):

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

Atau:

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

Dalam kasus pertama, Terminalbidang diatur ke false(mungkin bertentangan dengan harapan Anda) dan dalam kasus kedua diatur ke true, tetapi hasilnya dalam kedua kasus sama.

Radu Rădeanu
sumber
1
Solusi pertama bekerja untuk saya, jadi saya tetap menggunakannya. Apakah Anda tahu mengapa harus ada $ SHELL?
Paradiesstaub
1
@ Hamba Ya, tentu saja .
Radu Rădeanu
Ini bekerja untuk saya, namun saya ingin meluncurkan perintah dengan sudo, kemudian ketika menggunakan launcher membuatnya membuka terminal meminta saya untuk kata sandi. Bagaimana saya meluncurkan perintah dan mencegah perilaku ini?
E_Angel
1
@EliasAlves Agak terlambat, tetapi untuk orang lain yang membaca ini: Anda tidak dapat berharap untuk menjalankan perintah yang memerlukan hak akses root tanpa diminta untuk mengotentikasi diri Anda. (Kecuali jika Anda secara eksplisit mengkonfigurasi sistem Anda untuk melakukan itu, yang umumnya merupakan ide yang buruk .)
code_dredd
Saya pikir pertanyaannya adalah: bagaimana memastikan terminal muncul sehingga terminal tidak menghilang sehingga kita dapat memasukkan kredensial
RockScience
2
!#/bin/bash

gnome-terminal -e YOUR_COMMANDS

Buat file di atas. Jangan lupasudo chmod +x filename.sh

Tuan Lee
sumber
1
Masalah dengan solusi ini adalah, bahwa terminal menghilang segera dan pengguna tidak mampu memasukkan sesuatu.
Paradiesstaub
saya lupa apa namanya tapi saya pikir ada opsi untuk menjaga terminal tetap tinggi. Mungkinhold
Mr.Lee
2

Cukup tambahkan

;$SHELL 

di akhir perintah Anda.

Seperti bagi saya snapdbukanlah sesuatu yang menggunakan bandwidth penuh sistem untuk menyegarkan kembali kapan saja hampir saya bekerja di malam hari.

Jadi ini berhasil bagi saya untuk membuat .shfile yang ditautkan ke .desktopfile.
Isi untuk .shfile tadinya

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

-Sdi baris pertama dari .shfile yang digunakan untuk mengirim STDINPUTke sudoperintah berarti langsung mengeksekusi tanpa memasukkan password.

Isi untuk .desktopfile tersebut adalah:

[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
sumber
0

Saya melakukan ini. Baris pertama file teks adalah! # / Bin / bash

Baris berikutnya dari file teks adalah perintah (skrip shell).

Simpan file sebagai sesuatu.sh

Buka properti file dan aktifkan file run sebagai program.

Sekarang, ketika file diklik ganda, saya mendapatkan opsi untuk menjalankannya.

tukang topi
sumber
2
Sama di sini, terminal langsung menghilang.
Paradiesstaub
Bagi saya itu tidak masalah. Buat skrip shell, tambahkan baris! # / Bin / bash sebagai baris pertama. Izinkan file dijalankan sebagai yang dapat dieksekusi. Klik dua kali dan pilih run in terminal. Itu hanya bekerja.
Hatterman
1
Apakah Anda yakin terminal tidak hanya menutup karena skrip shell telah selesai? Di awal skrip Anda masukkan sleep 30, apakah terminal tetap terbuka selama 30 detik?
hatterman