2016-02-10 2 views
4

Я работаю над старым встроенным кодом, который использует устаревшую библиотеку dbus-glib.g_bus_get_sync возвращает NULL, но dbus_g_bus_get_private работает

В унаследованного кода, этот фрагмент кода работает хорошо:

GError* error = NULL; 
DBusGConnection *systemBus = dbus_g_bus_get_private(DBUS_BUS_SYSTEM, NULL, &error); 

Теперь, я попытался получить системную шину с эквивалентом GDBus:

GError* error = NULL; 
GDBusConnection *systemBus = g_bus_get_sync(G_BUS_TYPE_SYSTEM, NULL, &error); 

Это терпит неудачу, и error->message возвращается Could not connect: No such file or directory.

В чем разница?

Кстати, тот же вызов работает на шине сессии:

GError* error = NULL; 
DBusConnection *sessionBus = g_bus_get_sync(G_BUS_TYPE_SESSION, NULL, &error); 

ответ

0

запустить ли вы его с привилегиями суперпользователя? По моему опыту с dbus доступ к системной шине ограничен. Шина сеанса принадлежит пользователю, поэтому никогда не должно быть проблем с доступом.

В соответствии с этим documentation вы должны использовать dbus-address-get-for-bus-sync и g-dbus-connection-new-for-address, если вы хотите установить личное подключение.

Смежные вопросы