【问题标题】:dbus c api example doesn't workdbus c api 示例不起作用
【发布时间】:2014-03-03 17:50:07
【问题描述】:

我在 UBuntu 12.04 LTS 上工作。我正在尝试使用来自 site 的 sendsignal 和接收功能,但它们无法正常工作。在我的程序中,我首先调用 sendsignal("mySignal),然后调用 receive()。我得到以下信息:

Sending signal with value mySignal
Name Error(Connection ":1.95" is not allowed to own the service "test.signal.source" due to security policies in the configuration file)

因此,我在两个函数中都将 conn = dbus_bus_get(DBUS_BUS_SYSTEM, &err); 替换为 conn = dbus_bus_get(DBUS_BUS_SESSION, &err);。现在发送了一个信号,但接收函数看不到该信号,即 NULL == msg 这是真的。由于以下错误,我还注释掉了dbus_connection_close(conn);

process 12612: Applications must not close shared connections - see dbus_connection_close() docs. This is a bug in the application.

如何让它工作?

【问题讨论】:

  • 还需要帮助吗?如果您尝试描述您从根本上想要实现的目标会更好。此外,如果您遇到权限问题,请尝试以 root 身份运行该程序。

标签: c ubuntu-12.04 dbus


【解决方案1】:

不妨试试:

  • 在终端中运行dbus-launch。将终端输出复制并粘贴到文件中,并对其进行编辑以将内容导出为环境变量。通过这样做,您启动了一个新的 dbus 守护进程并将其公开给后续应用程序。

  • 在运行信号发送和接收示例之前,在终端中获取环境设置文件。这使应用程序连接到新的会话总线。

我猜您的发送示例正在启动它自己的 dbus 守护程序,但其他应用程序不知道守护程序是什么,因此您需要通过 env 变量公开守护程序。另一个可能的原因是您的发送和接收应用程序正在使用默认登录会话总线,但策略不允许它们使用。

让我们知道这是否有效。

【讨论】:

    猜你喜欢
    • 2012-12-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多