Создайте файл.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 установлена в значение true.
4 ответа
Содержимое файла рабочего стола должно выглядеть следующим образом (см., Как создать файл.desktop с помощью текстового редактора):
[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;
Или же:
[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;
В первом случае Terminal поле установлено в false (возможно, вопреки вашим ожиданиям) и во втором случае устанавливается на true, но результат в обоих случаях одинаков.
TL;DR
[Desktop Entry]
Version=1.0
Name=Hello
Exec=sh -c 'echo hello; $SHELL'
Icon=utilities-terminal
Terminal=true
Type=Application
Как указано в спецификации настольного компьютера,Terminal=trueсообщает программе запуска запустить ваш скрипт в окне терминала. Выбор эмулятора терминала зависит от настроек приложений по умолчанию и среды рабочего стола. В GNOME это gnome-terminal, в KDE - Konsole. (Без DE в простой WM есть ошибка в xdg-open, иTerminal=trueпросто игнорируется, см. проблему)
Эта строка нужна вам для запуска вашего скрипта и запуска после него оболочки.
Exec=sh -c 'echo hello; $SHELL'
sh -c 'COMMAND'запустите двоичный файл "sh" из $PATH, который выполняет КОМАНДУ (во многих системахshсимволическая ссылка наbash, но для переносимости предпочтительнее "ш")echo hello; $SHELLделает две вещи. Во-первых, он работаетecho helloа затем, после выполнения этой команды, запускает $SHELL.
Если вы не добавите какую-то команду, ожидающую вашего выхода, эмулятор терминала просто запустит вашу программу и выйдет.
PS Если вы просто не хотите закрывать терминал, вы можете сделать
Exec=sh -c 'echo hello; read'
Или
Exec=sh -c 'echo hello; sleep 5'
(чтение будет ждать, пока вы нажмете Enter, сон просто подождет 5 секунд)
PPS $SHELL вероятно будет таким же, как последний раздел в /etc/passwd в соответствии с вашим пользователем.
$ man login
Значения для $HOME, $USER, $SHELL, $PATH, $LOGNAME и $MAIL устанавливаются в соответствии с соответствующими полями в записи пароля.
Просто добавь
;$SHELL
в конце ваших команд.
Как для меня snapd не то, чтобы использовать полную пропускную способность системы для обновления снимков в любое время, когда я почти работаю ночью.
Так что это сработало для меня, чтобы создать .sh файл связан с .desktop файл.
Содержание для .sh файл был
echo <your password> | sudo -S systemctl stop snapd.service
sudo systemctl disable snapd.service;$SHELL
-S в первой строке .sh файл используется для отправки STDINPUT к sudo команда означает прямое выполнение без ввода пароля.
Содержание для .desktop файл был:
[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;
!#/bin/bash
gnome-terminal -e YOUR_COMMANDS
Сделайте файл выше. Не забудь sudo chmod +x filename.sh
Я сделаю это. Первая строка текстового файла:!#/ Bin/bash
Последующими строками текстового файла являются команды (сценарий оболочки).
Сохраните файл как что-то.sh
Откройте свойства файла и включите запуск файла в качестве программы.
Теперь, когда файл дважды щелкнул, я получил возможность запустить его.