Как выполнить скрипт, когда приложение закрыто

Чтобы выполнить скрипт при запуске приложения, я могу изменить Exec директива в /usr/share/applications/App.desktop

Как насчет того, когда приложение закрывается? Есть ли крюк для этого события?

2 ответа

Решение
  1. Вы можете использовать что-то вроде

    Exec=bash -c 'do-before;do-main-task;do-after'
    

    в вашем настольном файле. do-after должен делать то, что вы хотите делать "после закрытия приложения". Это может быть shell-скрипт. Я использую этот метод, и он работает для меня, но это может быть сложно из-за цитирования.

  2. Вы также можете поместить свое приложение в сценарий оболочки 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 для запуска при входе в систему.

Другие вопросы по тегам