DBus - 如何列出系统总线中的所有服务(总线名称)?
Posted
技术标签:
【中文标题】DBus - 如何列出系统总线中的所有服务(总线名称)?【英文标题】:DBus - How can I list all services (bus name) in the system bus? 【发布时间】:2012-04-05 05:48:44 【问题描述】:我想创建一个连接到 dbus --system bus 的程序并列出所有连接的服务 (bus_names)。就像“qdbus”一样。
有人可以帮助我吗?
我的 dbus 版本是 dbus-1.2.24,我正在用 C 编程(没有绑定)。
【问题讨论】:
【参考方案1】:您可能想看看Qt DBus List Names example。
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 ]
您可能还想直接转到 qt 源代码中的源代码 tools/qdbus/qdbus/qdbus.cpp。您会注意到,如果args.empty()
它调用printServiceNames()
,它只返回在系统总线接口上调用的registeredServiceNames()
的结果。然后,该代码执行以下操作:
QDBusReply<QStringList> QDBusConnectionInterface::registeredServiceNames() const
return internalConstCall(QDBus::AutoDetect, QLatin1String("ListNames"));
现在我们绕了一圈。
【讨论】:
此答案中的链接已损坏/移至doc.qt.digia.com/4.7/dbus-listnames-listnames-cpp.html 这里是链接:unix.stackexchange.com/questions/46301/… 使用 send-dbus 显示: 其实dbus-listnames最好的Qt站点是:doc.qt.io/qt-5/qtdbus-listnames-example.html以上是关于DBus - 如何列出系统总线中的所有服务(总线名称)?的主要内容,如果未能解决你的问题,请参考以下文章
linux 进程间通信 dbus-glib实例详解二(下) 消息和消息总线(ListActivatableNames和服务器的自动启动)(附代码)