DBus - Как я могу перечислить все службы (имя шины) в системной шине? - PullRequest
2 голосов
/ 20 марта 2012

Я хотел бы создать программу, которая подключается к шине dbus --system и перечислить все подключенные службы (имена_бусов). Прямо как "qdbus".

Кто-нибудь может мне помочь?

Моя версия dbus - dbus-1.2.24, и я программирую на C (без привязок).

1 Ответ

2 голосов
/ 22 апреля 2012

Возможно, вы захотите взглянуть на пример Qt DBus List Names .

QDBusConnection bus = QDBusConnection::sessionBus();
QDBusInterface dbus_iface("org.freedesktop.DBus", "/org/freedesktop/DBus",
                          "org.freedesktop.DBus", bus);
qDebug() << dbus_iface.call("ListNames").arguments().at(0);

Вот пример использования командной строки:

# qdbus --literal --system org.freedesktop.DBus /org/freedesktop/DBus org.freedesktop.DBus.ListNames
{"org.freedesktop.DBus", ":1.23", ":1.31", "org.freedesktop.Avahi", ":1.24", ":1.26"}
# dbus-send --system --dest=org.freedesktop.DBus --print-reply=literal /org/freedesktop/DBus org.freedesktop.DBus.ListNames
   array [
      org.freedesktop.DBus      :1.23      org.freedesktop.Avahi      :1.24      :1.33      :1.26   ]

Вы также можете просто перейти непосредственно к источнику tools / qdbus / qdbus / qdbus.cpp в источнике qt.Там вы заметите, что если args.empty() он вызывает printServiceNames(), который просто возвращает результат registeredServiceNames(), вызванный на интерфейсе для системной шины.Затем этот код выполняет следующее:

QDBusReply<QStringList> QDBusConnectionInterface::registeredServiceNames() const
{
    return internalConstCall(QDBus::AutoDetect, QLatin1String("ListNames"));
}

Теперь мы прошли полный круг.

...