Como executar um script quando o aplicativo é finalizado

3

Para executar um script quando o aplicativo é iniciado, posso alterar a diretiva Exec em /usr/share/applications/App.desktop

E quando o aplicativo é fechado? Existe algum gancho para esse evento?

    
por user634037 23.12.2016 / 05:50

2 respostas

1
  1. Você pode usar algo como

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

    no seu arquivo da área de trabalho. O do-after deve fazer o que você deseja fazer 'após o encerramento da aplicação'. Pode ser um script de shell. Eu uso esse método e funciona para mim, mas pode ser complicado por causa da citação.

  2. Você também pode colocar seu aplicativo em um script de shell bash que fará todas as tarefas para você (chame seu aplicativo do script) e coloque o nome do script na linha Exec no arquivo da área de trabalho.

    Exec=do-all-tasks-script
    

    É mais provável que este método funcione, se as tarefas contiverem sintaxe complicada (e não funcionarem 'dentro de aspas').

É uma observação correta do Serg, que você não deve editar os arquivos do sistema. Eu acho que este é um caso especial, e você pode copiar o arquivo da área de trabalho para a área de trabalho e editar essa cópia. (Eu faço esse tipo de arquivos da área de trabalho para meus próprios aplicativos.)

Extra

Eu fiz o seguinte arquivo em lote 'dbdmda'

#!/bin/bash

echo do-before
transmission-gtk
echo do-after

e corri assim: quando a transmissão começou, deixei-a funcionar por aproximadamente dez segundos. Então eu saí da transmissão pressionando o botão x no canto superior direito. Isso foi escrito na janela do terminal

$ bash dbdmda 
do-before
do-after

Então, obviamente, a linha de comando 'do-after' foi executada. Como você está ligando para a transmissão e como ela é interrompida?

    
por sudodus 23.12.2016 / 06:09
4

Em primeiro lugar, geralmente é considerado uma prática ruim editar arquivos em /usr/share/applications . Além disso, é altamente ineficiente, porque vem como parte de um pacote e, se houver alguma atualização nesse pacote, adivinhe? Suas alterações serão sobrescritas. Se você absolutamente, 100%, precisar fazer alterações, crie um arquivo .desktop personalizado e armazene-o em ~/.local/share/applications

Em vez disso, recomendo usar um script que use while loops e pgrep -f para aguardar o aplicativo desejado. Por exemplo, no exemplo abaixo, o script usa firefox como string de processo.

#!/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

O script é executado em loop contínuo para que você possa adicioná-lo como parte dos Aplicativos de inicialização para serem iniciados ao fazer login

    
por Sergiy Kolodyazhnyy 23.12.2016 / 06:47