首页 > 其他分享 >dbus-send

dbus-send

时间:2023-04-04 15:00:43浏览次数:39  
标签:-- freedesktop dbus send session org

行工具dbus-send ,是freedesktoop提供的dbus包配套的命令客户端工具,可用于发送dbus消息。

GDbus GLib实现的dbus工具。较与 dbus-send,拥有更完整的功能。

dbus有两种消息总线 (message bus):system bus 和 session bus,通过使用 --system和 --session 选项来通过dbus-send 向系统总线或会话总线发送消息。如果两者都未指定,默认为**session bus*.

  • System Bus:

    • 在桌面上,为所有用户提供一条总线.
    • 专用于系统服务。
    • 有关于低级时间,例如 网络连接,USB设备。
    • 在嵌入式Linux系统中,system bus是唯一D-Bus类型。
  • Session Bus:

    • 每个用户会话一个实例
    • 为用户应用提供那个桌面服务。
    • 连接到 X-session
    • --dest=NAME : 这个是必选的参数,指定要接收消息的接口名称。例如 org.freedesktop.ExampleName 。

      --print-reply: 打印回复消息。

      --print-reply=literal: 如选项一样,打印回复正文。如有特殊字符,如对象或 object 则按字面打印,没有标点符号、转义字符等。

      --reply-timeout= : 可选参数,等待回复的超时时长,单位为 毫秒。

      --system|--session: 发送的消息是system bus还是session bus,默认为 session bus.

      --type=method_call|signal: 调用的方法:默认为signal。

      必须始终指定要发送的消息的对象路径和名称。以下参数(如果有)是消息内容(消息参数)。这些值作为类型指定的值给出,可能包括如下所述的容器(数组、dict和变体)。

      支持参数

      dbus-send 发送的消息,在调用方法需要传参数时,必须将这些值给出。dbus-send 支持传入的参数的类型,并不为D-Bus支持的所有的数据类型,仅为一些简单的类型:如

      • Type: 这里type 仅仅为简单的数据类型,即 type:content ,支持的内容如下: string | int16 | uint16 | int32 | uint32 | int64 | uint64 | double | byte | boolean | objpath
      • 数组:array = array:<type>:<value>[,<value>...]
      • 词典: dict = dict:<type>:<type>:<key>,<value>[,<key>,<value>...]
      • 变体:variant = variant:<type>:<value>

      根据官网的解析出来后如上述集中数据类型,更详细的描述可以根据官方 dbus-send 进行参考。

      可以通过一张图来理解 dbus-send 发送一个消息所需的几个必须参数

      通过简单的命令,来了解一个 dbus-send 命令如何传入参数

       dbus-send --dest=org.freedesktop.ExampleName \  # service
         /org/freedesktop/sample/object/name \  # object
         org.freedesktop.ExampleInterface.ExampleMethod \ # interface.method
         int32:47 string:'hello world' double:65.32	\ # param int
         array:string:"1st item","next item","last item" \ # param array
         dict:string:int32:"one",1,"two",2,"three",3 \ # param dict
         variant:int32:-8 \ # param variant
         objpath:/org/freedesktop/sample/object/name # param object_path
      

      使用案例

      如列出所有总线接口

      dbus-send --session \
        --dest=org.freedesktop.DBus \
        --type=method_call \
        --print-reply \
        /org/freedesktop/DBus \
        org.freedesktop.DBus.ListNames
      

      查看对方总线所支持的对象接口,org.freedesktop.DBus.Introspectable 、org.freedesktop.DBus.Properties 和 org.freedesktop.PowerManagement。每个接口实现一些方法和信号。这些是你可以与之互动的东西。

      dbus-send --session \
      	--type=method_call \
      	--print-reply \
      	--dest=org.freedesktop.DBus \ 
      	/ \
      	org.freedesktop.DBus.Introspectable.Introspect
      

      dbus-send,也支持调用远程总线接口,通过默认通过 DBUS_SESSION_BUS_ADDRESS 或 DBUS_SYSTEM_BUS_ADDRESS,来指定远程的总线。

      DBUS_SESSION_BUS_ADDRESS=""
      dbus-send --session \
      	--type=method_call \
      	--print-reply \
      	--dest=org.freedesktop.DBus \ 
      	/ \
      	org.freedesktop.DBus.Introspectable.Introspect
      

      gdbus

      gdbus是 GLib实现的dbus工具。较与 dbus-send,拥有更完整的功能。

      introspect : 可以打印出对象的接口和属性值。对应对象的所有者需要实现org.freedesktop.DBus.Introspectable 的接口。使用 --xml选项,将打印返回的xml 格式。--recurse 选项可将其子级等打印,--only 选项仅打印具有属性的接口。

      monitor: 类似于 dbus-monitor

      call: 调用一个方法,传入的必须为 GVariant ,而相应的也为GVariant

      emit: 发出信号。信号中包含的每个参数除字符串外都必须序列化为GVariant。

      使用案例

      gdbus introspect --system \
      	--dest org.freedesktop.UPower \
      	--object-path \
      	/ \
      	--recurse  \
      	--only-properties 
      

      通过call 来向一个dbus service发送信息

      gdbus call --session \
                   --dest org.freedesktop.Notifications \
                   --object-path /org/freedesktop/Notifications \
                   --method org.freedesktop.Notifications.Notify \
                   my_app_name \
                   42 \
                   gtk-dialog-info \
                   "The Summary" \
                   "Here's the body of the notification" \
                   [] \
                   {} \
                   5000
      (uint32 12,)
      

      监听一个服务的对象

      gdbus monitor \
      	--system \
      	--dest org.freedesktop.NetworkManager \
      	--object-path /org/freedesktop/NetworkManager/AccessPoint/4141
      

      发送信号

      gdbus emit --session \
      	--object-path /foo \
      	--signal org.bar.Foo "['foo', 'bar', 'baz']"
      

      想特定进程发送信号,`--dest 为指定进程。

       gdbus emit \
       	--session \
       	--object-path /bar \
       	--signal org.bar.Bar someString \
       	--dest :1.42

标签:--,freedesktop,dbus,send,session,org
From: https://www.cnblogs.com/hshy/p/17286421.html

相关文章

  • GDBUS使用框架
    (141条消息)GDBUS使用框架_gdbus教程_玩意儿他爸的博客-CSDN博客服务端生成文件:gdbus-codegen--generate-c-code=libtunerserviceinterface-S-A.xml客户端生成文件:gdbus-codegen--generate-c-code=libservice-c--c-generate-object-managerinterface-S-A.xmlCLIENT:****......
  • MODBUS协议下,PLC与组态软件能否实现无线通讯?
    本方案是组态软件与西门子S7-200Smart进行无线MODBUS通信的实现方法。此方案可以作为西门子S7-200Smart与组态软件的无线MODBUS通信实例。在本方案中采用了西门子PLC专用无线通讯终端DTD434M,作为实现无线通讯的硬件设备。一、方案概述1.有线MODBUS网络组态王配置为标准......
  • 组态王软件与S7-200SMART无线MODBUS通信
    本方案是组态软件与西门子S7-200Smart进行无线MODBUS通信的实现方法。此方案可以作为西门子S7-200Smart与组态软件的无线MODBUS通信实例。在本方案中采用了西门子PLC专用无线通讯终端DTD434M,作为实现无线通讯的硬件设备。一、方案概述1.有线MODBUS网络组态王配置为标准......
  • C#上位机开发源码 上位机项目源代码 采用基于RS485通讯总线的ModbusRtu协议
    C#上位机开发源码上位机项目源代码采用基于RS485通讯总线的ModbusRtu协议,支持用户权限管理、sqlite数据库、实时曲线、历史曲线、历史报表、导出Excel、主界面布局可调带记忆等功能YID:81150611746679046......
  • Thrift TSocket::write_partial() send() errno = 10053问题记录分析
    场景南浔项目,服务器日志打印大量的异常日志:TSocket::write_partial()send()<Host:::ffff:41.230.95.17Port:63165>errno=10053提示服务器发送数据给客户端失败,然后主动断开连接。根据日志可以接收到客户端的登陆请求和心跳信息因为客户端每一次登陆过来,服务器都无法成功发送......
  • Modbus协议
    Modbus协议也是属于一种应用层的通讯协议。 PDU:简单协议数据单元ADU:应用数据单元一.功能码:向服务器指示执行何种操作有效范围:1-255(128-255为异常响应保留)添加子功能码来定义更多的操作项MODBUS在串行链路的长度约束256字节,所以PDU=256-1(服务器地址)-2(CRC校......
  • s7-200和两台变频器modbus rtu通信程序采用西门子224xp,配mcgs触摸屏
    s7-200和两台变频器modbusrtu通信程序采用西门子224xp,配mcgs触摸屏,变频器一台三菱D700,一台台达vfd-m,通过modbusrtu程序可以控制变频器的正反转,停止,频率的设定,加减速,以......
  • C#上位机与台达PLC通信,modbus TCP协议
    C#上位机与台达PLC通信,modbusTCP协议。1.真实使用项目,该程序框架完整,适合在此基础上开发项目。2.使用VS2019开发。3.项目还涉及到halcon视觉检测功能。YID:76106345120......
  • What does STP message do which send from switch to PC
    WhatdoesSTPmessagedowhichsendfromswitchtoPCSwitchesdonotsendSTP(SpanningTreeProtocol)messagestoPCsorenddevices.STPisaprotocolus......
  • modbus CRC校验源码转载
     c#CRC校验 用于学习记录原文载自:https://www.cnblogs.com/ayxj/p/11481969.html用C#实现的几种常用数据校验方法整理(CRC校验;LRC校验;BCC校验;累加和校验)   ......