É possível notificar com o NotifyOSD quando um processo especificado termina?

4

Devo admitir ser um usuário pesado do Firefox, então quando eu termino o FF, eu sempre tenho que verificar com o monitor do sistema se o processo está realmente terminado antes de desligar o Ubuntu. Caso contrário, eu terei uma "tela de sessão de restauração" na próxima sessão devido ao Ubuntu encerrar com força o FF durante o desligamento.

Então eu tive a idéia de monitorar o FF, e quando o processo foi finalizado para enviar um comando para o NotifyOSD, bem, me avisar que o FF está inoperante e é seguro desligar o Ubuntu.

Como sou muito novo no Ubuntu, não tenho ideia de como fazer isso, ou mesmo se for possível ... Algum conselho por onde começar?

Atenciosamente e obrigado antecipadamente! Ruessel

PS: Eu corro o Ubuntu 14.04 LTS

    
por ruessel 08.04.2016 / 14:42

2 respostas

1

É possível fazer isso. Pode-se escrever um script wrapper, que irá iniciar um processo e capturar seu PID e monitorar esse PID. Por exemplo, eu escrevi um pequeno script abaixo, que, se chamado como monitor_process.sh firefox , lançará o firefox e esperará até que ele saia.

#!/bin/bash
nohup $@ &> /dev/null &
PID=$!
while ps --no-headers  -p $PID > /dev/null
do
   echo $PID
   : # no-op
   sleep 0.25
done

notify-send "$@ exited"

Claro que pode haver várias instâncias do firefox, por isso queremos ter algo como monitor_process.sh firefox e ele irá monitorar todas as janelas do Firefox, até que todas elas saiam.

#!/bin/bash
SELF=$$
while  pgrep -f firefox | grep -v $SELF > /dev/null
do
   : # no-op
   sleep 0.25
done

notify-send "$@ exited"

A maneira que eu fiz acima foi pegando PIDs de todos os processos que contêm string "firefox", mas ignorando o PID do script (porque monitor_process.sh firefox será incluído na lista, e nós don ' Não quero isso - o script não sairá se ele se monitora constantemente).

É claro que o script será encerrado depois que ele enviar uma notificação e precisar ser reiniciado se você reabrir uma janela depois dela sair, então provavelmente seria mais fácil adicionar nohup $@ &> /dev/null & à segunda linha do script e usá-la como lançador e monitor.

Como alternativa, podemos adicionar um loop while externo que monitorará se o firefox está em execução e iniciará o monitoramento apenas se estiver em execução; se não - comece a monitorar.

#!/bin/bash

start_monitoring()
{

while  pgrep -f "$@" | grep -v $SELF &> /dev/null
do
   : # no-op
   sleep 0.25
done
notify-send "$@ exited"
}

main()
{
local SELF=$$
while true
do
  pgrep -f "$@" | grep -v $SELF > /dev/null 
  [ $? -eq 0 ] && start_monitoring "$@"
sleep 0.25
done
}
main "$@"

E o código acima funcionará para várias instâncias do firefox e vários fechamentos e reaberturas, para que você possa fechar o firefox durante a sessão, ele o notificará e continuará esperando até aparecer um novo, e começará a monitorar isso.

    
por Sergiy Kolodyazhnyy 08.04.2016 / 22:38
1

Isso funciona para mim ...

Crie uma pasta chamada bin em seu diretório pessoal, se essa pasta ainda não existir.

Crie um arquivo de texto simples em ~/bin com o seguinte conteúdo:

#!/bin/bash
if 
    pgrep firefox
then       
    notify-send  --urgency=critical "Is Firefox still running?"
else 
    notify-send  "No Firefox process is running"
    zenity --question --text="Proceed to shutdown?"
  if [ $? = 0 ]; then
        dbus-send --system --print-reply --dest=org.freedesktop.ConsoleKit /org/freedesktop/ConsoleKit/Manager org.freedesktop.ConsoleKit.Manager.Stop
  else
    exit
  fi
fi

Salve como fx-check-n-shutdown . Não há necessidade de qualquer sufixo.

Em seguida, clique com o botão direito do mouse em fx-check-n-shutdown no seu gerenciador de arquivos. Selecione Properties e torne o arquivo "executável" para você.

Instale libnotify-bin do centro de software ou execute sudo apt-get install libnotify-bin em um terminal.

Uma vez feito isso, digite fx-check-n-shutdown no seu terminal e pressione enter . Você deve ver uma notificação perguntando "O Firefox ainda está em execução?" ou que "Nenhum processo do Firefox está sendo executado".

No último caso onde nenhum processo do Firefox está sendo executado , a notificação desaparecerá em breve (desde que o ponteiro do mouse não esteja sobre a área ocupada pela notificação).

Você também verá uma pequena janela perguntando se deseja desligar ou não.

Se o Firefox ainda estiver em execução, você precisará dispensar a notificação clicando na notificação e poderá garantir que fechou o Firefox completamente.

O que você fez é criar um script chamado fx-check-n-shutdown .
Você tornou isso executável.
Você instalou libnotify-bin um programa que permite que usuários comuns façam suas próprias notificações.

O que o script faz:

  • Verifica se qualquer processo com o "firefox" está sendo executado.

  • Se um processo do Firefox estiver em execução, você será notificado. Você pode então abrir um terminal e executar pgrep firefox para obter o ID do processo (PID) e usar esse PID para obter mais detalhes do comando real executando executando cat /proc/<pid>cmdline onde você usará o PID real em vez de <pid> .

  • Se nenhum processo envolvendo o Firefox estiver aberto, você será notificado por breves instantes e uma janela de desligamento do Zenity será aberta, perguntando se você realmente deseja desligar ou não.

Quando estiver satisfeito, você pode configurar um atalho de teclado para iniciar fx-check-n-shutdown em vez de executá-lo por meio de um terminal. Como você configura o atalho depende do seu sabor particular do Ubuntu. Para o Ubuntu 14.04, as instruções estão aqui: link

    
por DK Bose 08.04.2016 / 18:44