我在UBuntu 12.04 LTS上工作。我正在尝试使用sendignal并从此site接收函数,但它们无法正常工作。在我的程序中,我首先调用sentignal(“mySignal”)然后接收()。我得到以下信息:
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.
如何让它运作?
答案 0 :(得分:1)
也许试试:
在终端中运行dbus-launch
。将终端输出复制并粘贴到文件中,然后对其进行编辑以将内容导出为环境变量。通过执行此操作,您将启动一个新的dbus守护程序并将其公开给后续应用程序。
在运行信号发送和接收示例之前,请在终端中获取环境设置文件。这使得应用程序连接到新的会话总线。
我猜你的发送示例正在启动自己的dbus守护程序,但是另一个应用程序并不知道该守护程序是什么,因此您需要通过env变量公开守护程序。另一个可能的原因是您的发送和接收应用程序正在使用defaule登录会话总线,但该策略不允许它们使用。
让我们知道这是否有效。