我在 UBuntu 12.04 LTS 上工作。我正在尝试使用发送信号并从此 site 接收函数但它们不能正常工作。在我的程序中,我首先调用 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.
如何让它工作?
最佳答案
也许试试:
在终端中运行
dbus-launch
。将终端输出复制并粘贴到一个文件中,然后编辑它以将内容导出为环境变量。通过这样做,您将启动一个新的 dbus 守护进程并将其公开给后续应用程序。在运行信号发送和接收示例之前,在您的终端中获取环境设置文件。这使得应用程序连接到新的 session 总线。
我猜你的发送示例正在启动它自己的 dbus 守护进程,但另一个应用不知道守护进程是什么,因此你需要通过 env 变量公开守护进程。另一个可能的原因是您的发送和接收应用程序正在使用 defaule 登录 session 总线,但策略不允许它们使用。
让我们知道这是否有效。
关于c - dbus c api 示例不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21608745/