[systemd-devel] Monitoring services start event from kdbus with sd-bus API

Thomas Schmidt t.schmidt at md-network.de
Tue Jun 30 02:15:06 PDT 2015


Hello,
for an embedded project I’m implementing a bootsplash application which should as well display service names are starting.
This is based on kdbus and uses the sd-bus API to communicate with systemd (for example boot process percentage property is polled). 
Now I try to monitor the kdbus (system bus) to capture the events which indicate that a service was started. (works very well for testing with "busctl monitor“ tool).
I assumed that the method_call „StartUnit“ would be a good indicator, so I tried to monitor for those messages by using following code (shortened and only significant parts copied here):

-.-.-.-.-.-.-.-.-.-.-. schnipp -.-.-.-.-.-.-.-.-.-.-

r = sd_bus_open_system(&bus);
…
r = sd_bus_add_match(bus, NULL, "", do_something_callback,  NULL); /* should not filter anything, I expect it triggers on any message */ 
…

for (;;) {
	sd_bus_message *m = NULL;

                r = sd_bus_process(bus, &m);
                if (r < 0) {
                        fprintf(stderr, "Failed to process bus: %s\n", strerror(-r));
                        goto finish;
                }

                if (r > 0) /* we processed a request, try to process another one, right-away */
                        continue;

                /* Wait for the next request to process */
                r = sd_bus_wait(bus, (uint64_t) -1);
                if (r < 0) {
                        fprintf(stderr, "Failed to wait on bus: %s\n", strerror(-r));
                        goto finish;
                }

}
…

-.-.-.-.-.-.-.-.-.-.-. schnapp -.-.-.-.-.-.-.-.-.-.-

The interesting thing is that this code only sees „signal“ type  messages - but not any other like „method_call“.

I did extensive testing, tried different code variants, for example by processing "sd_bus_message *m“ directly in the for loop with „sd_bus_message_is_method_call“ - but the effect is the same I don’t get „method_call“ as an event.

Is there any suggestion what could be the reason ? (is that generally the right way what I try here to do ?)
 
Many thanks for any feedback which points me to the right direction
Kind Regards
Thomas Schmidt




More information about the systemd-devel mailing list