DBus Over multiple machines

Jason Keirstead jason.keirstead@Q1Labs.com
Fri, 12 Dec 2003 09:42:33 -0400

Hello all. I am tryuing to use DBUS for an internal project, but am running 
into difficulties regarding its ability to be used over multiple machines via 

As I understand it, while the API to open a connection to the session bus is:

	dbus_bus_get( DBUS_BUS_SESSION, &busError );

... the calls needed to connect to a bus on another machine via TCP are:

	DBusConnection *busConnection = dbus_connection_open( address, &busError )
	dbus_bus_register( busConnection , &busError )

( Error handling omitted for simplicity )

After the dbus_bus_register, my understanding is that the connection is 
complete. However, when I try this with an address of the form:


... I get various errors. At first, I was getting disconnecte dimmediatly 
since I could not figure out how to get authentication to work. After totally 
disabling authentication on the server, I am getting the error "Disconnected 
prior to receiving a reply"

Here are my questions:

1. How do I authenticate myself properly when conecting to a DBUS on another 
machine via TCP/IP?

2. Is what I have above all that is needed to do this? If not, what am I 

And a suggestion:

I think DBUS would be much more powerful if a message routing mechanism was 
built in the the dbus-daemon. For example, say your network had two 
application servers, com.FooBarCo.Server1 and com.FooBarCo.Server2. The DBUS 
daemon config files could have an entry that specified that messages destined 
for certain applications could get routed to different machines. For example:

<route namespace="com.FooBarCo.FooApplication" destination="Server1" />
<route namespace="com.FooBarCo.FooApplication" destination="Server2" />

.. or somesuch, where Server1 is a hostname or IP. Then, if you send a message 
to FooApplication, this bus relays the message to the other machine's bus, 
which then passes it on to FooApplication If the first relay bus does not 
have FooApplication registered, an error is sent back and the bus tries the 
next relay in the list.

The sender service on the message would be set in such a way that replys would 
be sent back to the original sender.

Also via this mechanism, by having different orderings of relays in different 
servers, you have a built in form of load-balencing.

Jason Keirstead 
Software Developer
Q1Labs Inc.

506.462.9117 ext. 111 - Office
506.260.0787 - Mobile

jason.keirstead@fredericton.q1labs.com | www.q1labs.com

Do you know what is happening on your network RIGHT NOW?

QVISION - Network Security Intelligence