You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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/Object
  • m_busInterface: diag.signal.Type
  • m_busMember: CameraEvent
  • msg.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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.12 17:06:14