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 :

[opensuse 12.2 -- kde] dbus -- invoquer une méthode "à distance"


Sujet :

C

  1. #1
    Membre expérimenté

    Homme Profil pro
    Enseignant
    Inscrit en
    Septembre 2012
    Messages
    330
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Septembre 2012
    Messages : 330
    Par défaut [opensuse 12.2 -- kde] dbus -- invoquer une méthode "à distance"
    Greetings !!

    Comme je sais que les programmeurs ne peuvent pas laisser leur ordinateur tout seul même le jour du réveillon de Nouvel An (bonne année d'avance à tous d'ailleurs ^^), je me permet de poster une requête.
    Hier j'ai calé sur un petit problème: je voudrais quand mon programme écrit en C s'arrête que la console (ici Konsole sous kde) se ferme.

    La fonction kill() couplée avec getppid() retourne le pid du bash ce qui n'est pas très efficace.
    J'ai donc, tout naturellement, cherché à savoir comment "discuter" avec Konsole pour lui dire "de se fermer".

    C'est dbus (desktop bus) qui se charge de permettre la communication avec toutes les applications, fenêtres, etc... qui tournent sous KDE.

    J'ai bien trouvé ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
    DBusError DBUSerreur;
    dbus_error_init(&DBUSerreur);
    DBusConnection *ConnexionAuBureau=dbus_bus_get(DBUS_BUS_SESSION,&DBUSerreur);
    if(ConnexionAuBureau!=NULL)
    {
        DBusMessage *message;
        message=dbus_message_new_method_call("org.kde.konsole","/org/kde/konsole","org.kde.KApplication","quit");	
        if(message!=NULL)
        {
          printf("...envoi du message...\n");
          dbus_connection_send(ConnexionAuBureau,message,NULL);
          dbus_message_unref(message);
        }
    }
    dbus_error_free(&DBUSerreur);
    ...mais ça ne marche pas ^^

    Voici ce que je retrouve avec dbus-monitor (qui capte tous les évènements liés à dbus):

    method call sender=:1.82 -> dest=org.kde.konsole serial=2 path=/org/kde/konsole; interface=org.kde.KApplication; member=quit
    error sender=:1.36 -> dest=:1.82 error_name=org.freedesktop.DBus.Error.UnknownObject reply_serial=2
    string "No such object path '/org/kde/konsole'"
    ...je ne comprends pas bien... quand je fais

    qdbus org.kde.konsole /KApplication, j'obtiens:

    Nom : dbus000.png
Affichages : 123
Taille : 5,4 Ko

    ...pour moi org.kde.desktop existe et l'interface org.kde.KApplication existe également... le path ne semble pas correct que je mette /org/kde/konsole/MainApplication ou pas...

    Je cherche de la documentation (elle existe sur le site de freedesktop mais c'est de la m****) au format PDF, ou des explications supplémentaires de la part
    de personnes qui ont déjà "chipoté" avec dbus.

  2. #2
    Membre expérimenté

    Homme Profil pro
    Enseignant
    Inscrit en
    Septembre 2012
    Messages
    330
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Septembre 2012
    Messages : 330
    Par défaut
    ...pfff...

    comme je dis à mes élèves: des fois quand on pose des questions aux autres, on structure son esprit et du coup nous nous mettons de nous même sur le chemin de la vérité, de la confiance et du savoir-faire.

    Voici ce qu'il fallait faire pour que ça marche:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    message=dbus_message_new_method_call("org.kde.konsole","/MainApplication","org.kde.KApplication","quit");
    Le "path" en question est le chemin par où trouver l'interface, j'ai été induit en erreur par un tutoriel de m**** maintenant je sais comment il est possible de "discuter" avec n'importe quelle application qui "tourne" en KDE (pour Gnome c'est pareil)...

    Nom : dbus001.png
Affichages : 134
Taille : 10,1 Ko

    Ceci montre quelque part les "chemins possibles"...

    Nom : dbus002.png
Affichages : 121
Taille : 24,8 Ko

    ...et ceci montre les interfaces qui sont disponibles il y a plusieurs types d'interface: des méthodes (fonctions) que l'on peut invoquer, des propriétés que l'on peut modifier dans certains cas, des signaux que l'ont peut prendre en charge.

    Ici comme je désire invoquer une méthode à partir de mon programme écrit en C, j'utilise la fonction de l'API dbus_message_new_method_call.
    Cette fonction accepte quatre paramètres:

    le "nom dbus" de l'application à laquelle on désire s'adresser
    le "chemin où se trouve les méthodes à invoquer"
    l'interface à utiliser
    la méthode à utiliser

    ...je vais pouvoir frimer auprès de mes élèves à la rentrée ^^

    Commence bien l'année 2015 moi ^^

    Content !!

  3. #3
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Chercheur d'emploi
    Inscrit en
    Septembre 2007
    Messages
    7 495
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chercheur d'emploi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 495
    Par défaut
    Bonsoir et bonne année !

    Citation Envoyé par hurukan Voir le message
    Comme je sais que les programmeurs ne peuvent pas laisser leur ordinateur tout seul même le jour du réveillon de Nouvel An (bonne année d'avance à tous d'ailleurs ^^), je me permet de poster une requête.
    Ah. C'est malheureusement la triste vérité. Heureusement, un voyage lointain a été pour moi le bon prétexte pour débrancher.

    Citation Envoyé par hurukan Voir le message
    ...pfff...
    comme je dis à mes élèves: des fois quand on pose des questions aux autres, on structure son esprit et du coup nous nous mettons de nous même sur le chemin de la vérité, de la confiance et du savoir-faire.
    Ça c'est très vrai également. Spécialement en informatique dans laquelle la plupart des notions ont été établies par nos contemporains et qui sont donc généralement devinables avec un peu de bon sens.

    Voici ce qu'il fallait faire pour que ça marche:
    Merci beaucoup pour le retour d'information, mais n'oublie pas le bouton « résolu » en bas de page !

    dbus-monitor et dbus-send sont effectivement les premiers outils qu'il faut savoir manipuler. Ils sont utiles entre autres quand on fonctionne en mode dégradé ou dans une situation imprévue (j'ai réussi à déverrouiller une session gnome dont l'invite ne parvenait plus à vérifier les mots de passe et à récupérer mon travail) et maîtriser leur syntaxe est une certaine satisfaction. Par contre, à l'usage, et pour des messages ordinaires, je te conseille d-feet. Ça fait gagner du temps, parfois.

    Bon courage pour la suite.

  4. #4
    Membre expérimenté

    Homme Profil pro
    Enseignant
    Inscrit en
    Septembre 2012
    Messages
    330
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Septembre 2012
    Messages : 330
    Par défaut
    Merci beaucoup !!

    Je vais tenter de jeter un coup d’œil à d-feet (j'ignorais le nom jusqu'aujourd'hui).

    Meilleurs vœux pour 2015 !!

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 02/05/2014, 11h24
  2. Invoquer une méthode par reflexion en utilsant un plugin
    Par tounsi.ichraf dans le forum Eclipse Platform
    Réponses: 1
    Dernier message: 31/03/2014, 11h39
  3. Réponses: 5
    Dernier message: 28/01/2011, 16h37
  4. Invoquer une méthode d'un JRE plus récent
    Par SheikYerbouti dans le forum Langage
    Réponses: 6
    Dernier message: 06/01/2011, 19h03

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