IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

Démon utilisant D-Bus


Sujet :

C

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    61
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 61
    Points : 37
    Points
    37
    Par défaut Démon utilisant D-Bus
    Bonjour tout le monde!

    Je suis en train de coder un démon Linux.
    Le problème est que si je veux le lancer en tant que démon (sudo invoke-rc.d demon start), il ne démarre pas alors que si je le lance comme un programme normal (./ demon) il marche très bien.

    Je tiens à signaler que dans mon code, il y a bien les parties qui servent à lancer en tant que démon (fork, ...).

    J'ai donc enlevé du code tout ce qui était lié à D-Bus. Et là, le démon se lance très bien.
    Mais si je remet rien que la phase de connection à D-Bus, ça marche plus.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
          dbus_error_init (&error);
          bus = dbus_bus_get (DBUS_BUS_SESSION, &error);
          if (!bus) {
             dbus_error_free (&error);
             return 1;
          }
    Quelqu'un a-t-il déjà programmé un démon utilisant D-Bus?
    Y a-t-il quelque chose de spécial à faire?

    Merci d'avance

  2. #2
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    61
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 61
    Points : 37
    Points
    37
    Par défaut
    Nouveaux éléments:

    J'ai récupéré le message d'erreur
    Failed to connect to the D-BUS daemon: Failed to execute dbus-launch to autolaunch D-Bus session
    Ce message d'erreur n'est généré que lorsque je lance le programme en tant que démon.

    Personne n'a une solution à mon problème?

  3. #3
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 371
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 371
    Points : 23 626
    Points
    23 626
    Par défaut
    La vache ! Tu es sûr qu'il n'y a que ça ? Ton programme est-il appelé par un script au préalable ?

    Apparemment, ton programme ne trouve pas l'instance du bus de session, ce qui est normal car ton démon est lancé sous root, pas sous ton identité, et parce que quand tu lances des services par rc.d, par définition, il n'y a pas encore de session utilisateur ouverte (tu cherches peut-être, en revanche, à appeler le bus système).

    Par contre, ce qui semble étrange, c'est que si ton programme ne trouve pas l'instance du bus de session, il essaie de la lancer lui-même (premier arrivé) en appelant dbus-launch, qui est un programme exécutable. J'ai du mal à croire que les primitives de la bibliothèque fassent ce genre de chose mais si c'est le cas, il faut s'assurer que toutes les variables d'environnement (PATH, surtout) soient bien positionnées, sinon ton programme ne trouvera pas l'exécutable recherché.

  4. #4
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    61
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 61
    Points : 37
    Points
    37
    Par défaut
    J'ai pas très bien compris tout ce que tu m'as dit mais j'ai réussi à résoudre mon problème.
    Quand je lance mon démon en faisant "/etc/init.d/demon start" je n'ai aucun problème.

    Quelqu'un a une explication?

  5. #5
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 371
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 371
    Points : 23 626
    Points
    23 626
    Par défaut
    Citation Envoyé par therealmancool Voir le message
    J'ai pas très bien compris tout ce que tu m'as dit mais j'ai réussi à résoudre mon problème.
    Quand je lance mon démon en faisant "/etc/init.d/demon start" je n'ai aucun problème.

    Quelqu'un a une explication?
    Apparemment (il faudra que je vérifie), dbus_bus_get() cherche à se connecter au bus existant et, s'il n'existe pas encore, le démarre elle-même. Et pour cela, il semble qu'elle appelle directement un programme exécutable (dbus-launch), ce que je trouve moyen, personnellement.

    Or, pour que cela fonctionne bien, il faut que les variables d'environnement soient toutes positionnées comme il faut. Si tu lances ton dæmon depuis une de tes sessions ouvertes (y compris avec sudo), c'est forcément le cas. Et le bus de session existe déjà lui-aussi, donc tout fonctionne correctement.

    Par contre, lorsque ton dæmon est lancé au démarrage par le système, il n'y a aucune session ouverte, il est lancé sous root et pas du tout sous ton identité, et l'environnement est beaucoup moins étendu que celui d'une session utilisateur.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Quel solution bus logiciel est il préférable d'utiliser
    Par remi_inconnu dans le forum Embarqué
    Réponses: 4
    Dernier message: 03/08/2012, 16h39
  2. utilisation du meta type ANY
    Par Anonymous dans le forum CORBA
    Réponses: 1
    Dernier message: 15/04/2002, 12h36
  3. [BCB5] Utilisation des Ressources (.res)
    Par Vince78 dans le forum C++Builder
    Réponses: 2
    Dernier message: 04/04/2002, 16h01
  4. Réponses: 2
    Dernier message: 20/03/2002, 23h01

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo