2017-06-21 4 views
1

Il y a quelques semaines, j'ai décidé de construire quelques projets de framboises pi pour ma maison. Parce que j'ai reconnu que j'aurais besoin de la même sensordata pour les applications multiples, j'ai mis mes capteurs en un seul processus. En connectant ce processus au DBus, je peux lire la sensordata avec mes autres applications. Cela fonctionne très bien quand je suis connecté à mon raspberrypi avec l'option ssh -X, où je partage le xserver. Si je ne partage pas le serveur x, j'obtiens une erreur:DBus pour la connexion de données de capteur

Impossible de se connecter au bus de session D-Bus. Pour commencer, lancez:

eval `dbus-launch --auto-syntax` 

Certes, j'ai essayé d'exécuter la commande eval dbus-launch --auto-syntax qui a fait disparaître l'erreur, mais je ne pouvais toujours pas accéder aux données sur la DBus.

Qu'est-ce qui ne va pas? Est-ce que je ne peux pas démarrer une application DBus sans le xserver? Ce serait génial si je pouvais démarrer mon processus de capteur sans le xserver parce que je veux le démarrer en tant que service dans init.d.

Y a-t-il quelqu'un qui a eu un problème simulaire?

Répondre

1

Can't I start a DBus application without the xserver?

Bien sûr, l'application a simplement besoin de connaître l'adresse du bus. Pour le bus de session, cela signifie que la variable d'environnement DBUS_SESSION_BUS_ADDRESS doit être définie (X11 peut en effet être utilisé comme méthode de secours pour autostartner une session mais la variable d'environnement est la méthode correcte pour se connecter à une session existante).

Dans votre situation, j'utiliserais le bus système: Cela semble être l'endroit approprié pour une API de capteur et un périphérique embarqué ne devrait pas nécessiter plus d'un bus. Avec le bus système, vous n'avez pas besoin de définir l'adresse même lors de la connexion via SSH (mais vous devrez peut-être vous assurer que la stratégie de service autorise l'utilisateur de l'application à envoyer des messages au service).

+0

Merci pour cette réponse. Définir la variable d'environnement 'DBUS_SESSION_BUS_ADDRESS' résout vraiment mon problème. Plus tard, je vais jeter un coup d'œil au bus système aussi. – andrew28349