Создайте файл .desktop, который откроется и выполнит команду в терминале

Я хотел бы знать, как написать Exec команда файла .desktop для открытия нового терминала и выполнения в нем сценария оболочки. Сценарий оболочки работает и доступен всем пользователям. При запуске скрипта из терминала все работает, но это не так при попытке запустить скрипт из файла .desktop.

Вот несколько комбинаций, которые я уже пробовал:

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

Для параметра .desktop terminal установлено значение true.

Содержимое вашего файла рабочего стола должно выглядеть следующим образом (см. как создать файл .desktop с помощью текстового редактора):

[Desktop Entry]Version=1.0Name=Test        Comment=Test the terminal running a command inside itExec=gnome-terminal -e "bash -c 'echo hello;$SHELL'"Icon=utilities-terminalTerminal=falseType=ApplicationCategories=Application;

Или:

[Desktop Entry]Version=1.0Name=Test        Comment=Test the terminal running a command inside itExec=bash -c 'echo hello;$SHELL'Icon=utilities-terminalTerminal=true Type=ApplicationCategories=Application;

В первом случае, в Terminal поле имеет значение false (возможно, вопреки вашим ожиданиям) и во втором случае устанавливается на true, но результат в обоих случаях один и тот же.

Просто добавьте

;$SHELL 

в конце ваших команд.

Как для меня snapd это не то, что использует полную пропускную способность системы для обновления снимков в любое время, когда я работаю ночью.

Так что это сработало для меня, чтобы создать .sh файл, связанный с .desktop файл.
Содержание для .sh досье были

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

-S в первой строке .sh файл используется для отправки STDINPUT к sudo команда, означающая прямое выполнение без ввода пароля.

Содержание для .desktop досье были:

[Desktop Entry]Version=1.0Name=TestComment=Test the terminal running a command inside itExec=gnome-terminal -e "/scripts/disable_snap.sh"Icon=terminalTerminal=trueType=ApplicationCategories=Application;
!#/bin/bashgnome-terminal -e YOUR_COMMANDS

Создайте приведенный выше файл. Не забудь sudo chmod +x filename.sh

ТЛ;Д-Р

[Desktop Entry]Version=1.0Name=HelloExec=sh -c 'echo hello; $SHELL'Icon=utilities-terminalTerminal=trueType=Application

Как указано в спецификация ввода рабочего стола, Terminal=true сообщает программе запуска запустить ваш скрипт в окне терминала. Выбранный эмулятор терминала зависит от настроек приложений по умолчанию и среды рабочего стола. В GNOME это gnome-terminal, в KDE это Konsole. (Без DE, в обычном WM есть ошибка в xdg-open, и Terminal=true просто проигнорировал, см. выпуск)

Вам нужна эта строка, чтобы запустить ваш скрипт и запустить оболочку после него.

Exec=sh -c 'echo hello; $SHELL'
  1. sh -c 'COMMAND' запустите двоичный файл "sh", найденный в $PATH, который выполняет КОМАНДУ (во многих системах, sh является символической ссылкой наbash, но для удобства переносимости предпочтительнее "sh")
  2. echo hello; $SHELL делает две вещи. Во-первых, он запускает echo helloа затем, после выполнения этой команды, запускает $SHELL.

Если вы будете нет добавьте какую-нибудь команду, которая ожидает вашего выхода, эмулятор терминала просто запустит вашу программу и выход.


P.S. Если вы просто хотите не закрывать свой терминал, вы можете сделать

Exec=sh -c 'echo hello; read'

Или

Exec=sh -c 'echo hello; sleep 5'

(чтение будет ждать, пока вы нажмете Enter, режим ожидания будет просто ждать 5 секунд)

P.P.S $SHELL вероятно, будет таким же, как в предыдущем разделе в /etc/passwd в соответствии с вашим пользователем.

$ man login

Значения для $HOME, $USER, $SHELL, $PATH, $LOGNAME и $MAIL задаются в соответствии с соответствующими полями при вводе пароля.

Я делаю это. Первая строка текстового файла - это !#/bin/bash

Последующие строки текстового файла представляют собой команды (сценарий оболочки).

Сохраните файл как something.sh

Откройте свойства файла и включите запуск файла как программы.

Теперь, когда файл дважды щелкается, я получаю возможность запустить его.