Tạo tệp .desktop mở và thực thi lệnh trong thiết bị đầu cuối


39

Tôi muốn biết cách viết Execlệnh của tệp .desktop để mở một thiết bị đầu cuối mới và thực thi một tập lệnh shell trong đó. Kịch bản shell đang hoạt động và có thể truy cập bởi tất cả người dùng. Khi khởi chạy tập lệnh từ thiết bị đầu cuối, mọi thứ đều hoạt động, nhưng nó không hoạt động khi cố gắng khởi chạy tập lệnh từ tệp .desktop.

Dưới đây là một số kết hợp tôi đã thử:

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

Tùy chọn đầu cuối .desktop được đặt thành đúng.

Câu trả lời:


46

Nội dung của tệp máy tính để bàn của bạn sẽ trông như thế nào (xem cách tạo tệp .desktop bằng trình chỉnh sửa văn bản ):

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

Hoặc là:

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

Trong trường hợp đầu tiên, Terminaltrường được đặt thành false(có thể trái với mong đợi của bạn) và trong trường hợp thứ hai được đặt thành true, nhưng kết quả là trong cả hai trường hợp đều giống nhau.


1
Giải pháp đầu tiên làm việc cho tôi, vì vậy tôi gắn bó với nó. Bạn có biết tại sao phải có $ SHELL không?
Paradiesstaub

1
@Thibaut Có, tất nhiên .
Radu Rădeanu

Nó hoạt động với tôi, tuy nhiên tôi muốn khởi chạy một lệnh bằng sudo, sau đó khi sử dụng launcher được tạo, nó sẽ mở terminal hỏi tôi mật khẩu. Làm thế nào để tôi khởi chạy một lệnh và ngăn chặn hành vi này?
E_Angel

1
@EliasAlves Hơi muộn một chút, nhưng đối với bất kỳ ai khác đọc điều này: bạn không thể mong đợi chạy các lệnh yêu cầu quyền root mà không cần phải xác thực chính mình. (Trừ khi bạn cấu hình rõ ràng hệ thống của bạn để làm điều đó, thường là một ý tưởng tồi .)
code_dredd

Tôi nghĩ câu hỏi là: làm thế nào để đảm bảo thiết bị đầu cuối xuất hiện để thiết bị đầu cuối không biến mất để chúng tôi có thể nhập thông tin đăng nhập
RockScience

2
!#/bin/bash

gnome-terminal -e YOUR_COMMANDS

Tạo các tập tin trên. Đừng quênsudo chmod +x filename.sh


1
Vấn đề với giải pháp này là, thiết bị đầu cuối biến mất ngay lập tức và người dùng không có khả năng nhập nội dung nào đó.
Paradiesstaub

Tôi quên những gì nó được gọi nhưng tôi nghĩ có một tùy chọn để giữ cho thiết bị đầu cuối lên. Nó có thể làhold
Mr.Lee

2

Đơn giản chỉ cần thêm

;$SHELL 

vào cuối các lệnh của bạn.

Giống như đối với tôi snapdkhông phải là thứ gì đó sử dụng băng thông đầy đủ của hệ thống để làm mới snaps bất cứ lúc nào gần như tôi làm việc vào ban đêm.

Vì vậy, điều này làm việc cho tôi để tạo một .shtập tin liên kết đến một .desktoptập tin.
Nội dung cho .shtập tin là

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

-Strong dòng đầu tiên của .shtệp được sử dụng để gửi STDINPUTđến sudolệnh có nghĩa là thực thi trực tiếp mà không cần nhập mật khẩu.

Nội dung của .desktoptệp là:

[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

Tôi làm việc này. Dòng đầu tiên của tệp văn bản là! # / Bin / bash

Các dòng tiếp theo của tệp văn bản là các lệnh (tập lệnh shell).

Lưu tập tin dưới dạng gì đó.

Mở thuộc tính của tệp và cho phép chạy tệp dưới dạng chương trình.

Bây giờ, khi tệp được nhấp đúp, tôi có tùy chọn để chạy nó.


2
Tương tự ở đây, thiết bị đầu cuối biến mất ngay lập tức.
Paradiesstaub

Nó làm việc cho tôi không có vấn đề. Tạo tập lệnh shell, thêm dòng! # / Bin / bash làm dòng đầu tiên. Cho phép tệp được chạy dưới dạng thực thi. Nhấp đúp chuột và chọn chạy trong thiết bị đầu cuối. Nó chỉ hoạt động.
hatterman

1
Bạn có chắc thiết bị đầu cuối không đóng vì kịch bản shell đã hoàn thành? Khi bắt đầu tập lệnh của bạn đặt chế độ ngủ 30, thiết bị đầu cuối có mở trong 30 giây không?
hatterman
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.