web-dev-qa-db-fra.com

Comment exécuter un script Zenity simple après la déconnexion du WiFi?

J'utilise Kubuntu 12.10 64bit. J'essaie d'obtenir un script bash à exécuter lorsque je suis déconnecté du réseau. J'ai créé un fichier dans le dossier /etc/network/if-down.d/ appelé test qui a une seule ligne:

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

Je peux exécuter ce script sans aucun problème; taper /etc/network/if-down.d/test dans mon terminal fait apparaître une boîte de message disant "réseau en panne!". Lorsque je me déconnecte de mon réseau wifi via le gestionnaire de réseau, rien ne se passe. Le débranchement de ma clé USB wifi ne fait pas apparaître la boîte de message. Ma seule supposition est que pour quelque raison que ce soit, les scripts dans /etc/network/if-down.d/ ne sont pas en cours d'exécution. Ajouter #!/bin/bash car la première ligne ne fonctionnait pas non plus.


EDIT: 2013-01-02

J'ai eu quelques problèmes avec la réponse de gertvdijk (anciennes modifications et commentaires mélangés) qui sont maintenant triés. Exécution de zenity avec su et DISPLAY=:0 a résolu mon problème.

3
drdrez

Si vous utilisez Network Manager (contrairement à la ligne de commande /etc/network/interfaces fichier), vous devez utiliser à la place les scripts du répartiteur Network Manager.

Placez simplement votre script dans le /etc/NetworkManager/dispatcher.d/ répertoire, similaire au if-down.d approche. Les scripts avec les scripts du répartiteur de Network Manager sont assez faciles et je suggère de lire cet exemple (de base) basé sur le 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

Pour agir sur un réseau spécifique, voir cette réponse .

Et assurez-vous de redémarrer Network Manager pour reprendre avec ce nouveau script.

Sudo service network-manager restart
2
gertvdijk

Les autres réponses sont excellentes - probablement même mieux que celle-ci, mais, comme d'habitude, il existe une autre façon de le faire - cette fois sans avoir besoin d'utilitaires système ou d'autorisations élevées (Sudo).

Mon système exécute kubuntu 12.04, donc ce code fonctionnera probablement sur votre système. Il devrait également fonctionner sur gnome 2.x, sauf que le script de démarrage automatique va à un endroit différent.

J'ai eu un problème similaire où je voulais savoir quand mon ordinateur s'est déconnecté (car mon ordinateur portable semble le faire de temps en temps en désactivant le wifi lui-même et je n'ai souvent pas remarqué le petit x rouge dans la barre des tâches.)

Ce que j'ai fait était d'ajouter un petit script (exécutable) au répertoire ~/.kde/Autostart qui exécute mon script principal à chaque démarrage de KDE (cela prend soin d'avoir un écran et un clavier à utiliser):

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

Le script principal, offline_alert , teste pour voir si je suis hors ligne en utilisant ping avec quelques tentatives pour éviter les fausses alarmes et génère ensuite un pop-up en utilisant yad (identique à zenity, seulement amélioré!) et joue un son. Entre les tests de changements de statut en ligne, il se met en veille et n'utilise donc pas trop de ressources.

Si vous l'exécutez manuellement à partir de la ligne de commande, etc., il vérifie s'il est déjà en cours d'exécution et vous donne la possibilité de le terminer.

Le code qui teste hors ligne se trouve dans la fonction "hors ligne", il peut donc être facilement modifié sans affecter le reste du script.

Les images, les icônes et le son qu'il utilise sont codés en dur, vous devez donc remplacer les vôtres. J'ai trouvé une icône hors ligne wifi cool sur le web.

Il crée un fichier journal que vous souhaitez ou non.

Le script est configuré pour utiliser les notifications, mais le code est commenté parce que les notifications ont disparu trop rapidement et semblaient plus une nuisance qu'une aide.

C'est juste une autre façon de le faire et peut-être que quelqu'un trouvera le code utile.

Joe

0
Joe

J'ai essayé cela (le 10.04) et j'ai le même problème. Il semble que le script ne sache pas sur quel écran afficher la boîte de dialogue.

Essayez de remplacer votre ligne par:

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

(Si vous avez plusieurs écrans, vous aurez peut-être besoin de quelque chose de plus subtil.)

0
loxo