Как выполнить скрипт, когда приложение закрыто
Чтобы выполнить скрипт при запуске приложения, я могу изменить Exec
директива в /usr/share/applications/App.desktop
Как насчет того, когда приложение закрывается? Есть ли крюк для этого события?
2 ответа
Вы можете использовать что-то вроде
Exec=bash -c 'do-before;do-main-task;do-after'
в вашем настольном файле. do-after должен делать то, что вы хотите делать "после закрытия приложения". Это может быть shell-скрипт. Я использую этот метод, и он работает для меня, но это может быть сложно из-за цитирования.
Вы также можете поместить свое приложение в сценарий оболочки bash, который будет выполнять за вас все задачи (вызывать ваше приложение из сценария), и поместить имя сценария в строку Exec в файле рабочего стола.
Exec=do-all-tasks-script
Этот метод с большей вероятностью будет работать, если задачи содержат сложный синтаксис (и могут не работать "внутри кавычек").
Serg правильно сказал, что вам не следует редактировать системные файлы. Я предполагаю, что это особый случай, и вы можете скопировать файл рабочего стола на рабочий стол и отредактировать эту копию. (Я делаю этот тип настольных файлов для своих собственных приложений.)
дополнительный
Я сделал следующий командный файл 'dbdmda'
#!/bin/bash
echo do-before
transmission-gtk
echo do-after
и запустил его так: когда началась передача, я дал ей поработать примерно десять секунд. Затем я вышел из передачи, нажав кнопку x в верхнем правом углу. Это было написано в окне терминала
$ bash dbdmda
do-before
do-after
Очевидно, что командная строка "do-after" была запущена. Как вы называете передачу и как она останавливается?
Прежде всего, обычно считается плохой практикой редактировать файлы в /usr/share/applications
, Кроме того, он крайне неэффективен, потому что входит в пакет, и если есть обновление для этого пакета, угадайте, что? Ваши изменения будут перезаписаны. Если вам абсолютно необходимо 100% внести изменения, сделайте кастом .desktop
файл и сохранить его в ~/.local/share/applications
Вместо этого я бы рекомендовал использовать скрипт, который использует while
петли и pgrep -f
ждать приложения, которое вы хотите. Например, в приведенном ниже примере скрипт использует firefox
как строка процесса.
#!/bin/bash
process_string="firefox"
while true
do
while ! pgrep -f "$process_string"
do
echo "Waiting for $process_string"
sleep 3
done
while pgrep -f "$process_string"
do
echo "Waiting for $process_string to exit"
sleep 3
done
# place the command you want to occur when
# process exits here
sleep 3
done
Сценарий выполняется в непрерывном цикле, поэтому вы можете добавить его как часть Startup Applications для запуска при входе в систему.