Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 19/12/2009, à 12:42

shakipu

[Résolu] [Script] Démarrer un script quand connexion active

Bonjour à tous,

Je suis en train d'arranger mon bureau d'une manière assez interactive : un cube avec sur chaque face, des screenlets dédiées à certaines utilisation (une face pour le multimédia, une face pour les fichiers/commandes, une face pour le travail, une face pour Internet).
De plus, c'est dans un environnement minimal que je compte faire tourner ce bureau : compiz standalone + cairo-dock + screenlet + xfce4-panel.
Pour l'instant, je m'en sors assez bien mais voila, certains screenlets utilisent Internet (entre autre Youtube et RadioFM trouvé sur Google Gadget) et ne démarrent pas si Internet n'est pas actif. Le problème c'est que je suis sur un PC portable que j'emmène partout, même dans des endroits où il n'y a pas Internet (si si ça existe). Du coup, mes screenlets buggent.
Pour remédier à ce problème, je lance 2 scripts au démarrage : un qui démarre les screenlets qui n'ont pas besoin d'Internet et un qui démarre les screenlets qui ont besoin d'Internet.
J'aurais besoin d'aide pour ce deuxième script. En effet, j'aimerais que ce script démarre les screenlets SEULEMENT quand la connexion est active (et à l'occasion, les arrête quand la connexion n'est plus). Je cherche je cherche mais je ne trouve pas comment faire. Auriez-vous une idée ?

Merci d'avance
Gros bisous à la communeauté tongue

Dernière modification par shakipu (Le 11/01/2010, à 11:51)


Nous sommes tous des pécheurs face à l'Ethernet...

Hors ligne

#2 Le 19/12/2009, à 12:49

wido

Re : [Résolu] [Script] Démarrer un script quand connexion active

Bonjour,

tu fais un test de ping sur le site google par exemple toutes les X minutes,
si le test réussi je lance les screenlets sinon je retourne à tester le ping.

Hors ligne

#3 Le 19/12/2009, à 12:55

shakipu

Re : [Résolu] [Script] Démarrer un script quand connexion active

Ça risque pas de ralentir un peu le système ?
En tout cas merci pour ta réponse, je pensais à ça mais j'étais pas trop sûr, on sait jamais, si jamais Google bug. Mais le problème c'est qu'à la fac, le réseau n'est pas direct : le réseau wifi est ouvert mais il faut se logger à travers une interface internet pour pouvoir accéder à Internet... Dans ce cas, je ne suis pas sûr qu'un ping fonctionne...

Et j'avoue être nul en programmation. Je vais tenter ce que je peux ^^


Nous sommes tous des pécheurs face à l'Ethernet...

Hors ligne

#4 Le 19/12/2009, à 14:14

nesthib

Re : [Résolu] [Script] Démarrer un script quand connexion active

pour la connexion mise en œuvre détaillée sur ce post (sans ping, mais tu peux ajouter un ping si tu veux être sûr d'avoir une connexion internet et pas seulement réseau ce revient souvent au même)

Dernière modification par nesthib (Le 19/12/2009, à 14:17)


GUL Bordeaux : GirollServices libres : TdCT.org
Hide in your shell, scripts & astuces :  applications dans un tunnelsmart wgettrouver des pdfinstall. auto de paquetssauvegarde auto♥ awk
  ⃛ɹǝsn xnuᴉꞁ uʍop-ǝpᴉsdn

Hors ligne

#5 Le 19/12/2009, à 14:24

Tomzz

Re : [Résolu] [Script] Démarrer un script quand connexion active

Bonjour,
J'en ai un ici: http://www.2aide.fr/Dokuwiki/doku.php?i … _connexion.
Ça marche bien, mais il doit y avoir plus élégant

Hors ligne

#6 Le 19/12/2009, à 15:17

nesthib

Re : [Résolu] [Script] Démarrer un script quand connexion active

@Tomzz : une petite erreur de frappe dans ton script

sleep 10http://www.2aide.fr/Dokuwiki/doku.php

sinon des petites suggestions pour améliorer ton script :
- tu peux prendre le code de retour de ping comme signe de succès/échec :

if ping -c1 google.fr >/dev/null; then echo OK ; else echo NOK ; fi

- tu peux même intégrer ton test dans le while :

a=0
while [ $a -lt 2 ] && ! ping -c1  google.fr >/dev/null
do
  echo CHECK $a
  ((a++))
  sleep 1
done

NB tu peux tester les commandes en remplaçant google.fr par 192.168.1.1 (si c'est l'adresse de ton routeur) par ex.


GUL Bordeaux : GirollServices libres : TdCT.org
Hide in your shell, scripts & astuces :  applications dans un tunnelsmart wgettrouver des pdfinstall. auto de paquetssauvegarde auto♥ awk
  ⃛ɹǝsn xnuᴉꞁ uʍop-ǝpᴉsdn

Hors ligne

#7 Le 19/12/2009, à 15:25

Tomzz

Re : [Résolu] [Script] Démarrer un script quand connexion active

merci nsthib.

sleep 10http://www.2aide.fr/Dokuwiki/doku.php

Je me demande d'où je l'ai sortie celle là big_smile

Le reste, je corrige dans la foulée

Hors ligne

#8 Le 19/12/2009, à 16:32

Tomzz

Re : [Résolu] [Script] Démarrer un script quand connexion active

Bon, j'ai un peu repris, j'ai fais:

ping -c1 google.fr >/dev/null
	if [ $? != "0" ]; then

Ta commande ne fonctionnais pas dans mon script, mais je viens de comprendre pourquoi:
En fait je ne sais pas écrire son contraire big_smile
Dans l'idée, je voudrais:

if  ! ping -c1 google.fr >/dev/null; then ...

Une question, quel est l'intérêt de renvoyer vers /dev/null vu que de toute façon le résultat de la commande ping n'est pas affiché ?

Ensuite, je n'ai pas mis le ping dans la boucle parce que while ne fait que compter le nombre de réitération du script, en effet je trouvais dommage de pinguer google pendant des heures alors que, pour cette fois, on n'a pas l'intention de se connecter.

Du coup, j'ai rajouté une condition à l'exécution des commandes finales, en effet, sans celle-ci, les commandes s'exécutaient au bout de 10 min même si on n'avait pas de connexion active.

Dernière modification par Tomzz (Le 19/12/2009, à 16:40)

Hors ligne

#9 Le 19/12/2009, à 16:53

shakipu

Re : [Résolu] [Script] Démarrer un script quand connexion active

Merci Nesthib, je pense que ton script me suffira. Je l'ai testé mais il y a quand même un bug au démarrage de la session (puisque ce script démarre au démarrage de la session). Je n'arrive pas à savoir ce que c'est puisque ça revient à GDM sans rien dire. Comme si une commande bloquait...

Peut être sais-tu comment l'épurer pour que ça fonctionne sans problème ?

EDIT : j'essaye de trouver par moi même. Je pense qu'on peut épurer un peu le tout en précisant les interfaces réseaux, histoire que la recherche soit un peu moins longue et demande moins de commandes.

Dernière modification par shakipu (Le 19/12/2009, à 16:59)


Nous sommes tous des pécheurs face à l'Ethernet...

Hors ligne

#10 Le 19/12/2009, à 17:07

nesthib

Re : [Résolu] [Script] Démarrer un script quand connexion active

Tomzz a écrit :

Bon, j'ai un peu repris, j'ai fais:

ping -c1 google.fr >/dev/null
	if [ $? != "0" ]; then

Ta commande ne fonctionnais pas dans mon script, mais je viens de comprendre pourquoi:
En fait je ne sais pas écrire sont contraire big_smile

en précédant ton test par !

Tomzz a écrit :

Dans l'idée, je voudrais:

if  ! ping -c1 google.fr >/dev/null; then ...

Une question, quel est l'intérêt de renvoyer vers /dev/null vu que de toute façon le résultat de la commande ping n'est pas affiché ?

euh… chez moi ping -c1 … affiche une sortie, donc la redirection /dev/null permet de l'éliminer mais rien ne t'empêche de l'enlever

Tomzz a écrit :

Ensuite, je n'ai pas mis le ping dans la boucle parce que while ne fait que compter le nombre de réitération du script, en effet je trouvais dommage de pinguer google pendant des heures alors que, pour cette fois, on n'a pas l'intention de se connecter.

le test n'est pas effectué en continu, juste une fois à chaque début de boucle.
Pour t'en convaincre :

a=1; while ((a++)) ; do echo $a ; sleep 1 ; done
Tomzz a écrit :

Du coup, j'ai rajouté une condition à l'exécution des commandes finales, en effet, sans celle-ci, les commandes s'exécutaient au bout de 10 min même si on n'avait pas de connexion active.

oui, je n'avais pas relevé car je pensais que tu voulais lancer tes commandes quand même

pour finir je te propose une solution :

#!/usr/bin/env bash

commandes() {
  echo 'à la place de ce echo, plein de commandes'
}

for ((a=1 ; a<10 ; a++))
do
  echo -n "ping $a : "
  ping -c1 google.fr >/dev/null && { echo OK; commandes; break; } || echo NOK
  sleep 1
done

GUL Bordeaux : GirollServices libres : TdCT.org
Hide in your shell, scripts & astuces :  applications dans un tunnelsmart wgettrouver des pdfinstall. auto de paquetssauvegarde auto♥ awk
  ⃛ɹǝsn xnuᴉꞁ uʍop-ǝpᴉsdn

Hors ligne

#11 Le 19/12/2009, à 17:11

nesthib

Re : [Résolu] [Script] Démarrer un script quand connexion active

shakipu a écrit :

Merci Nesthib, je pense que ton script me suffira. Je l'ai testé mais il y a quand même un bug au démarrage de la session (puisque ce script démarre au démarrage de la session). Je n'arrive pas à savoir ce que c'est puisque ça revient à GDM sans rien dire. Comme si une commande bloquait...

quand tu lances ton script tu peux rediriger les sorties (standard+erreur) vers un fichier de log

ton_script.sh 2&>/chemin/vers/un/fichier.log
shakipu a écrit :

Peut être sais-tu comment l'épurer pour que ça fonctionne sans problème ?

EDIT : j'essaye de trouver par moi même. Je pense qu'on peut épurer un peu le tout en précisant les interfaces réseaux, histoire que la recherche soit un peu moins longue et demande moins de commandes.

je n'ai pas bien compris ce que tu veux dire.

ps. comment lances-tu ton script au démarrage?


GUL Bordeaux : GirollServices libres : TdCT.org
Hide in your shell, scripts & astuces :  applications dans un tunnelsmart wgettrouver des pdfinstall. auto de paquetssauvegarde auto♥ awk
  ⃛ɹǝsn xnuᴉꞁ uʍop-ǝpᴉsdn

Hors ligne

#12 Le 19/12/2009, à 17:26

shakipu

Re : [Résolu] [Script] Démarrer un script quand connexion active

Non en fait je cherche juste à alléger un peu le script, à utiliser d'autres commandes plus simples.
Je lance mon script comme n'importe quel script : /chemin/du/script.sh

EDIT : Je ne comprend rien au log :

CachingBackend: Chargement des instances depuis le cache
CachingBackend: Chargement de <Launcher1>
CachingBackend: Chargement de <Launcher2>
CachingBackend: Chargement des instances depuis le cache
CachingBackend: Chargement de <Output1>
CachingBackend: Chargement des instances depuis le cache
CachingBackend: Chargement de <NowPlaying1>
daemon already started
waiting 12/19/09 17:27:46
Trouvé une session en cours de NowPlaying, ajout d'une nouvelle instance par service.
Erreur dans screenlets.services.get_service_by_name: org.freedesktop.DBus.Error.ServiceUnknown: The name org.screenlets.NowPlaying was not provided by any .service files
Trouvé une session en cours de Launcher, ajout d'une nouvelle instance par service.
Erreur dans screenlets.services.get_service_by_name: org.freedesktop.DBus.Error.ServiceUnknown: The name org.screenlets.Launcher was not provided by any .service files
Trouvé une session en cours de Output, ajout d'une nouvelle instance par service.
Erreur dans screenlets.services.get_service_by_name: org.freedesktop.DBus.Error.ServiceUnknown: The name org.screenlets.Output was not provided by any .service files
Screenlet has already been added to /tmp/screenlets/screenlets.rodolphe.running
Chargement des instances dans: /home/rodolphe/.config/Screenlets/NowPlaying/default/
Fichier: NowPlaying1.ini
Screenlet has already been added to /tmp/screenlets/screenlets.rodolphe.running
Chargement des instances dans: /home/rodolphe/.config/Screenlets/Launcher/default/
Fichier: Launcher1.ini
Screenlet has already been added to /tmp/screenlets/screenlets.rodolphe.running
Chargement des instances dans: /home/rodolphe/.config/Screenlets/Output/default/
Fichier: Output1.ini
/home/rodolphe/.config/Screenlets/NowPlaying/default/NowPlaying1
/usr/lib/pymodules/python2.6/screenlets/drawing.py:114: DeprecationWarning: use copy pango.FontDescription.set_family instead
  self.p_fdesc.set_family_static(font)
/home/rodolphe/.config/Screenlets/Launcher/default/Launcher1
CHARGER UN NOUVEAU THEME: default
TROUVE: /usr/share/screenlets/NowPlaying/themes/default
Set options in LauncherScreenlet
/usr/share/screenlets/Launcher/LauncherScreenlet.py:132: DeprecationWarning: Use the new widget gtk.Tooltip
  tt = gtk.Tooltips()
/usr/share/screenlets/Launcher/LauncherScreenlet.py:133: DeprecationWarning: Use the new widget gtk.Tooltip
  tt.set_tip(self.window, value)
/home/rodolphe/.config/Screenlets/Output/default/Output1
CHARGER UN NOUVEAU THEME: default
TROUVE: /usr/share/screenlets/Output/themes/default
theme.conf trouvé ! Chargement des options d'écrasements
theme.conf a été chargé: 
Nom: default
Auteur: Helder Fraga aka Whise
Version: 1.0
Info: default theme
Ignorer frame_color
ATTENTION: Option 'frame_color' non trouvé ou protégé
Ignorer shadow_color
ATTENTION: Option 'shadow_color' non trouvé ou protégé
Ignorer iner_frame_color
ATTENTION: Option 'iner_frame_color' non trouvé ou protégé
Ignorer text_color
ATTENTION: Option 'text_color' non trouvé ou protégé
Screenlet has been initialized.
Fichier: Launcher2.ini
/home/rodolphe/.config/Screenlets/Launcher/default/Launcher2
Set options in NowPlayingScreenlet
CHARGER UN NOUVEAU THEME: Coversutra-Searchbar-Vinyl-Art
TROUVE: /usr/share/screenlets/NowPlaying/themes/Coversutra-Searchbar-Vinyl-Art
Set options in LauncherScreenlet
Screenlet has been initialized.
Restored instances from session 'default' ...
Set options in OutputScreenlet
CHARGER UN NOUVEAU THEME: default
TROUVE: /usr/share/screenlets/Output/themes/default
theme.conf trouvé ! Chargement des options d'écrasements
theme.conf a été chargé: 
Nom: default
Auteur: Helder Fraga aka Whise
Version: 1.0
Info: default theme
Ignorer frame_color
Ignorer shadow_color
Ignorer iner_frame_color
Ignorer text_color
rhythmbox
Screenlet has been initialized.
Restored instances from session 'default' ...
Restored instances from session 'default' ...
waiting 12/19/09 17:27:52
waiting 12/19/09 17:27:57
First workarround didnt work let run a second manual workarround
First workarround didnt work let run a second manual workarround
OutputScreenlet.py: Fatal IO error 11 (Ressource temporairement non disponible) on X server :0.0.
LauncherScreenlet.py: Fatal IO error 11 (Ressource temporairement non disponible) on X server :0.0.
NowPlayingScreenlet.py: Fatal IO error 11 (Ressource temporairement non disponible) on X server :0.0.
rm: ne peut enlever `/tmp/index.html': Aucun fichier ou dossier de ce type
First workarround didnt work let run a second manual workarround
CachingBackend: Chargement des instances depuis le cache
CachingBackend: Chargement de <RadioFM1>
No Daemon, Launching Daemon
Traceback (most recent call last):
  File "/home/rodolphe/.screenlets/RadioFM/RadioFMScreenlet.py", line 324, in <module>
    screenlets.session.create_session(RadioFMScreenlet)
  File "/usr/lib/pymodules/python2.6/screenlets/session.py", line 471, in create_session
    session = ScreenletSession(classobj, backend_type=backend)
  File "/usr/lib/pymodules/python2.6/screenlets/session.py", line 105, in __init__
    self.connect_daemon()
  File "/usr/lib/pymodules/python2.6/screenlets/session.py", line 110, in connect_daemon
    bus = dbus.SessionBus()
  File "/usr/lib/pymodules/python2.6/dbus/_dbus.py", line 219, in __new__
    mainloop=mainloop)
  File "/usr/lib/pymodules/python2.6/dbus/_dbus.py", line 108, in __new__
    bus = BusConnection.__new__(subclass, bus_type, mainloop=mainloop)
  File "/usr/lib/pymodules/python2.6/dbus/bus.py", line 125, in __new__
    bus = cls._new_for_bus(address_or_type, mainloop=mainloop)
dbus.exceptions.DBusException: org.freedesktop.DBus.Error.NoServer: Failed to connect to socket /tmp/dbus-HkElNohWQ6: Connexion refusée
First workarround didnt work let run a second manual workarround
CachingBackend: Chargement des instances depuis le cache
CachingBackend: Chargement de <Youtube1>
No Daemon, Launching Daemon
Traceback (most recent call last):
  File "/usr/share/screenlets/Youtube/YoutubeScreenlet.py", line 324, in <module>
    screenlets.session.create_session(YoutubeScreenlet)
  File "/usr/lib/pymodules/python2.6/screenlets/session.py", line 471, in create_session
    session = ScreenletSession(classobj, backend_type=backend)
  File "/usr/lib/pymodules/python2.6/screenlets/session.py", line 105, in __init__
    self.connect_daemon()
  File "/usr/lib/pymodules/python2.6/screenlets/session.py", line 110, in connect_daemon
    bus = dbus.SessionBus()
  File "/usr/lib/pymodules/python2.6/dbus/_dbus.py", line 219, in __new__
    mainloop=mainloop)
  File "/usr/lib/pymodules/python2.6/dbus/_dbus.py", line 108, in __new__
    bus = BusConnection.__new__(subclass, bus_type, mainloop=mainloop)
  File "/usr/lib/pymodules/python2.6/dbus/bus.py", line 125, in __new__
    bus = cls._new_for_bus(address_or_type, mainloop=mainloop)
dbus.exceptions.DBusException: org.freedesktop.DBus.Error.NoServer: Failed to connect to socket /tmp/dbus-HkElNohWQ6: Connexion refusée
No protocol specified
No protocol specified
/usr/lib/pymodules/python2.6/gtk-2.0/gtk/__init__.py:57: GtkWarning: could not open display
  warnings.warn(str(e), _gtk.Warning)
/usr/lib/pymodules/python2.6/gtk-2.0/gtk/__init__.py:57: GtkWarning: could not open display
  warnings.warn(str(e), _gtk.Warning)
daemon already started
daemon already started

Dernière modification par shakipu (Le 19/12/2009, à 17:45)


Nous sommes tous des pécheurs face à l'Ethernet...

Hors ligne

#13 Le 19/12/2009, à 17:47

nesthib

Re : [Résolu] [Script] Démarrer un script quand connexion active

shakipu a écrit :

Non en fait je cherche juste à alléger un peu le script, à utiliser d'autres commandes plus simples.

dans les commandes qui t'ont été proposées sur ce fil, il n'y a rien de compliqué.
peux-tu poster le contenu de ce que tu as fait pour l'instant?

shakipu a écrit :

Je lance mon script comme n'importe quel script : /chemin/du/script.sh

donc manuellement? si tu veux le faire lancer au démarrage automatiquement tu peux :
- soit ajouter un lanceur dans système > préférences > applications au démarrage
- soit éditer le fichier /etc/rc.local pour ajouter le chemin vers tes scripts


GUL Bordeaux : GirollServices libres : TdCT.org
Hide in your shell, scripts & astuces :  applications dans un tunnelsmart wgettrouver des pdfinstall. auto de paquetssauvegarde auto♥ awk
  ⃛ɹǝsn xnuᴉꞁ uʍop-ǝpᴉsdn

Hors ligne

#14 Le 20/12/2009, à 15:40

shakipu

Re : [Résolu] [Script] Démarrer un script quand connexion active

Non je le lance pas manuellement. En fait, comme j'utilise Compiz en standalone, j'ai fait un script pour démarrer ma session. C'est juste un simple script qui lance les applications une par une.


Nous sommes tous des pécheurs face à l'Ethernet...

Hors ligne

#15 Le 25/12/2009, à 20:58

shakipu

Re : [Résolu] [Script] Démarrer un script quand connexion active

Après quelques manips, je me suis rendu compte que c'était UN screenlet qui faisait tout merder : un screenlet permettant d'avoir la radio FM (google widget). roll
Du coup, le script marche très bien maintenant, merci à toi ! big_smile

J'ai juste un dernier problème mais c'est pas l'endroit pour : mon screenlet "NowPlaying" est un gros rectangle gris quand il est démarré au démarrage... Pas trouvé pourquoi pour l'instant.

Encore une fois merci et Joyeux Noël ! Puissiez vous ne pas recevoir Windows 7 sous votre sapin...


Nous sommes tous des pécheurs face à l'Ethernet...

Hors ligne

#16 Le 25/12/2009, à 21:07

wido

Re : [Résolu] [Script] Démarrer un script quand connexion active

shakipu a écrit :

Encore une fois merci et Joyeux Noël ! Puissiez vous ne pas recevoir Windows 7 sous votre sapin...

Merci et joyeux Noel à vous, C'est un cadeau qui revient cher big_smile, à la limite je préfère recevoir un DVD de jeux libres (nexuiz,openarena,glest,...) cool

Hors ligne

#17 Le 06/01/2010, à 11:26

shakipu

Re : [Résolu] [Script] Démarrer un script quand connexion active

Rappel pour ceux qui tomberaient sur ce post par hasard, la solution se trouve ici : http://forum.ubuntu-fr.org/viewtopic.ph … 0#p3078800.


Nous sommes tous des pécheurs face à l'Ethernet...

Hors ligne

#18 Le 06/01/2010, à 13:28

nesthib

Re : [Résolu] [Script] Démarrer un script quand connexion active

au fait un p'tit résolu ?


GUL Bordeaux : GirollServices libres : TdCT.org
Hide in your shell, scripts & astuces :  applications dans un tunnelsmart wgettrouver des pdfinstall. auto de paquetssauvegarde auto♥ awk
  ⃛ɹǝsn xnuᴉꞁ uʍop-ǝpᴉsdn

Hors ligne