Como executo um script Zenity simples depois de desconectar do WiFi?

3

Estou executando o Kubuntu 12.10 64bit. Eu estou tentando obter um script bash para executar quando estou desconectado da rede. Eu criei um arquivo na pasta /etc/network/if-down.d/ chamado test que tem uma única linha:

zenity --info --text="network down!"

Eu posso executar este script sem problemas; digitar /etc/network/if-down.d/test no meu terminal faz com que uma caixa de mensagem seja exibida dizendo "rede inoperante!". Quando eu me desconecto da minha rede wifi através do gerenciador de rede, nada acontece. Desconectar meu wifi usb dongle também não faz com que a caixa de mensagem apareça. Meu único palpite é que, por algum motivo, os scripts em /etc/network/if-down.d/ não estão sendo executados. Adicionar #!/bin/bash como a primeira linha também não funcionou.

EDIT: 2013-01-02

Eu tive alguns problemas usando a resposta de gertvdijk (edições antigas e comentários misturados) que agora estão resolvidos. A execução de zenity com su e DISPLAY=:0 resolveu meu problema.

    
por drdrez 02.01.2013 / 18:52

3 respostas

2

Se você estiver usando o Network Manager (em oposição ao arquivo /etc/network/interfaces da linha de comando), use os scripts do distribuidor do Network Manager.

Basta colocar seu script no diretório /etc/NetworkManager/dispatcher.d/ , semelhante à abordagem if-down.d . Fazer scripts com scripts de despachante do Network Manager é bastante fácil e sugiro que leia este exemplo (básico) baseado no Arch Wiki :

#!/bin/sh

INTERFACE=$1  # The interface which is brought up or down
STATUS=$2     # The new state of the interface
USERNAME=gert # ENTER YOUR USERNAME HERE

case "$STATUS" in
    'up') # $INTERFACE is up
    # you could do something here...
    ;;
    'down') # $INTERFACE is down
    # Check for other active interfaces and only act on all down
    if [ ! 'nm-tool|grep State|cut -f2 -d' '' = "connected" ]; then
        /bin/su -l ${USERNAME} -c 'DISPLAY=:0 /usr/bin/zenity --info --text="all network interfaces down"'
    fi
    ;;
esac

Para atuar em uma rede específica, consulte esta resposta .

E certifique-se de reiniciar o Network Manager para pegar este novo script.

sudo service network-manager restart
    
por gertvdijk 02.01.2013 / 22:14
0

Eu tentei isso (em 10.04) e tenho o mesmo problema. Parece que o script não sabe qual display exibir a caixa de diálogo.

Tente substituir sua linha por:

DISPLAY=0:0 zenity --info --text="network down!"

(Se você tiver várias exibições, talvez precise de algo mais sutil.)

    
por loxo 02.01.2013 / 20:45
0

As outras respostas são ótimas - provavelmente até melhores do que essa, mas, como de costume, há outra maneira de fazê-lo - desta vez sem precisar de utilitários do sistema ou permissões elevadas (sudo).

Meu sistema executa o kubuntu 12.04, então este código provavelmente funcionará no seu sistema. Ele também deve funcionar no gnome 2.x, exceto que o script autostart vai para um lugar diferente.

Eu tive um problema semelhante em que queria saber quando meu computador ficou offline (porque meu notebook parece fazer isso ocasionalmente desativando o wifi por si só e muitas vezes não percebi o x vermelho na barra de tarefas.)

O que eu fiz foi adicionar um pequeno script (executável) ao diretório ~ / .kde / Autostart que executa o meu script principal toda vez que o KDE inicia (isto cuida de ter um display e teclado para usar):

#!/bin/bash
if [ -x "$HOME/bin/offline_alert" ] ; then
  offline_alert & 
fi

O script principal, offline_alert , testa se estou offline usando o ping com algumas poucas tentativas evite alarmes falsos e, em seguida, gere um pop-up usando yad (o mesmo que zenity, apenas aprimorado!) e reproduza um som. Entre os testes para alterações no status on-line, ele fica inativo e não utiliza muitos recursos.

Se você executá-lo manualmente a partir da linha de comando, etc., ele verifica se já está em execução e oferece a opção de encerrá-lo.

O código que testa para off-line está na função "off-line", para que possa ser facilmente modificado sem afetar o restante do script.

As imagens, os ícones e o som que ele usa são codificados, então você teria que substituir o seu próprio. Eu encontrei um ícone offline legal na web.

Cria um arquivo de log que você pode ou não querer.

O script é configurado para usar notificações, mas o código é comentado porque as notificações foram embora muito rapidamente e pareciam mais um incômodo do que uma ajuda.

Esta é apenas outra maneira de fazer isso e talvez alguém ache o código útil.

Joe

    
por Joe 17.07.2013 / 23:14