dbus-send与sd_bus_emit_signal()发送信号的差异及问题排查
DBus信号发送:dbus-send成功但sd_bus_emit_signal无输出
一、dbus-send可正常发送信号
执行以下dbus-send命令能成功向DBus守护进程发送信号:
dbus-send /diag/signal/Object diag.signal.Type.CameraEvent string:"mod=Power[0-3] values='11900/126 11900/126 11970/045 11900/123'"
该信号可被目标DBus守护进程接收,同时也能通过dbus-monitor "type='signal',interface='diag.signal.Type'"捕获到输出。
二、sd_bus_emit_signal无信号输出
使用libsystemd的sd_bus_emit_signal()发送信号时,代码返回值始终>=0无错误,但dbus-monitor无输出,目标守护进程也未接收到信号:
int ret = 0; if ((ret = sd_bus_default_user(&m_sdbus)) < 0) return ret; if ((ret = sd_bus_emit_signal ( m_sdbus, m_busObj.c_str(), m_busInterface.c_str(), m_busMember.c_str(), "s", msg.payload.c_str() )) < 0) return ret;
其中参数对应:
m_busObj:/diag/signal/Objectm_busInterface:diag.signal.Typem_busMember:CameraEventmsg.payload内容与dbus-send中的string参数完全一致。
三、已做的排查
- 确认
sd_bus_emit_signal()的所有参数与dbus-send对应参数完全匹配 - 所有相关进程均通过
dbus-launch配置了相同的DBus环境变量:dbus-launch > /tmp/dbus.env export $(cat /tmp/dbus.env) - 知晓
man dbus-send的说明:注意,接口与方法或信号名称通过点分隔,但实际协议中二者为单独字段
问题
dbus-send与sd_bus_emit_signal()发送信号的行为存在哪些差异?我是否遗漏了关键步骤?
内容的提问来源于stack exchange,提问作者Keelung
相关产品推荐
相关产品推荐

