My d-bus doesn't work, or does it?
Nick Gray
nagray at austin.rr.com
Mon Mar 7 09:41:44 PST 2005
Definitions out of the way, I am using Fedora Core 3 with the following
installed by default:
dbus-glib-0.22-10
dbus-0.22-10
dbus-x11-0.22-10
dbus-python-0.22-10
dbus-devel-0.22-10
I get the following from 'ps -ef |grep dbus'
/usr/bin/dbus-launch --exit-with-session /etc/X11/xinit/Xclients
dbus-daemon-1 --fork --print-pid 8 --print-address 6 --session
and when I try to run the program included, I get this.
org.freedesktop.DBus.Error.FileNotFound: Failed to connect to
socket /usr/local/var/run/dbus/system_bus_socket: No such file or
directory
OK the first question, It looked to me like I was not running a
system_bus, but when I try to start a system bus by hand (using the man
page as a reference) I get another copy of the 'dbus-daemon-1 --fork --
print-pid 8 --print-address 6 --session'. I checked to see that the
file /usr/local/var/run/dbus/system_bus_socket' is actually in place.
Not sure where to go from here.
Here is the demo program that I copied out of LJ. I had to make a few
syntax corrections to the public code, but they were trivial. I am
concerned that the switch still says --session, could this mean that I
am not really getting a system bus running?
Thanks, Nick
Code Example
*---
#define DBUS_API_SUBJECT_TO_CHANGE 1
#include <dbus/dbus.h>
#include <iostream>
int main()
{
DBusError error;
DBusConnection *conn;
dbus_error_init(&error);
conn = dbus_bus_get(DBUS_BUS_SYSTEM, &error);
if (!conn)
{
fprintf (stderr, "%s: %s\n", error.name, error.message);
return 1;
}
dbus_bus_acquire_service (conn, "org.pirate.parrot", 0, &error);
if (dbus_error_is_set (&error))
{
fprintf (stderr, "%s: %s\n", error.name, error.message);
dbus_connection_disconnect (conn);
return 1;
}
DBusMessage *msg;
DBusMessageIter iter;
/* create a new message of type signal */
msg = dbus_message_new_signal(
"org/pirate/parrot/attr",
"org.pirate.parrot.attr", "Feathers");
/* build the signal's payload up */
dbus_message_iter_init (msg, &iter);
dbus_message_iter_append_string (&iter, "Shiny");
dbus_message_iter_append_string (&iter, "Well Groomed");
/* send the message */
if (!dbus_connection_send (conn, msg, NULL))
fprintf (stderr, "error sending message\n");
/* drop the reference count on the message */
dbus_message_unref (msg);
/* flush the connection buffer */
dbus_connection_flush (conn);
if (conn)
{
dbus_connection_disconnect (conn);
}
}
More information about the dbus
mailing list