D-Bus是一个消息总线系统,它允许客户端程序调用服务上的过程 - 基本上,机器本地等同于XML-RPC和SOAP。
在QDBustractInterface(通过QDBUSXML2CPP)上构建的QT DBU代理,什么是处理您想要接口的服务/对象以在启动时无法使用的最佳方法? 注意:我不是
#include C中的DBU(Linux)程序在C中发送带有目的地的信号。代码如下: #include <stdio.h> #include <stdlib.h> #include <dbus/dbus.h> #include <unistd.h> /** * Connect to the DBUS bus and send a broadcast signal */ void sendsignal(DBusConnection* conn, char* sigvalue) { DBusMessage* msg; DBusMessageIter args; DBusError err; int ret; dbus_uint32_t serial = 0; printf("Sending signal with value %s\n", sigvalue); // create a signal & check for errors msg = dbus_message_new_signal("/test/signal/Object", // object name of the signal "test.signal.Type", // interface name of the signal "Test"); // name of the signal if (NULL == msg) { fprintf(stderr, "Message Null\n"); exit(1); } // set the destination of the signal dbus_message_set_destination(msg, "it.smartsecurity.dbus"); // append arguments onto signal dbus_message_iter_init_append(msg, &args); if (!dbus_message_iter_append_basic(&args, DBUS_TYPE_STRING, &sigvalue)) { fprintf(stderr, "Out Of Memory!\n"); exit(1); } // send the message and flush the connection if (!dbus_connection_send(conn, msg, &serial)) { fprintf(stderr, "Out Of Memory!\n"); exit(1); } dbus_connection_flush(conn); printf("Signal Sent\n"); // free the message and close the connection dbus_message_unref(msg); //dbus_connection_close(conn); } int main(int argc, char **argv) { DBusMessage* msg; DBusMessageIter args; DBusConnection* conn; DBusError err; int ret; // initialise the error value dbus_error_init(&err); // connect to the DBUS system bus, and check for errors conn = dbus_bus_get(DBUS_BUS_SYSTEM, &err); if (dbus_error_is_set(&err)) { fprintf(stderr, "Connection Error (%s)\n", err.message); dbus_error_free(&err); } if (NULL == conn) { exit(1); } // register our name on the bus, and check for errors ret = dbus_bus_request_name(conn, "it.smartsecurity.dbus", DBUS_NAME_FLAG_REPLACE_EXISTING , &err); if (dbus_error_is_set(&err)) { fprintf(stderr, "Name Error (%s)\n", err.message); dbus_error_free(&err); } if (DBUS_REQUEST_NAME_REPLY_PRIMARY_OWNER != ret) { exit(1); } do { sendsignal(conn, "CIAO"); sleep(1); } while (1); // dbus_connection_close(conn); return 0; } 然后用ZBUS板条箱写了Followng代码: use futures_util::stream::StreamExt; use zbus::{zvariant::OwnedObjectPath, proxy, Connection}; use zbus::zvariant::Value; #[proxy( default_service = "it.smartsecurity.dbus", default_path = "/test/signal/Object", interface = "test.signal.Type", )] trait Systemd1Manager { // Defines signature for D-Bus signal named `Test` #[zbus(signal)] fn test(&self, unit: String) -> zbus::Result<()>; // si deve chiamare come il segnale } async fn watch_systemd_jobs() -> zbus::Result<()> { let connection = Connection::system().await?; // `Systemd1ManagerProxy` is generated from `Systemd1Manager` trait let systemd_proxy = Systemd1ManagerProxy::builder(&connection) .destination("it.smartsecurity.dbus")? .path("/test/signal/Object")? .interface("test.signal.Type")? .build().await?; // Method `receive_job_new` is generated from `job_new` signal let mut new_jobs_stream = systemd_proxy.receive_test().await?; while let Some(msg) = new_jobs_stream.next().await { //dbg!(&msg); // struct `JobNewArgs` is generated from `job_new` signal function arguments let args = msg.args(); dbg!(&args); println!("====================="); // stampa il nome del servizio e il suo valore let x = msg.message().header(); let y = x.member(); if y.is_some() { println!("Header: {}", y.unwrap()); } dbg!(&y); let unit = args.unwrap().unit; println!("Param: {}", unit); } panic!("Stream ended unexpectedly"); } #[tokio::main] async fn main() { watch_systemd_jobs().await.unwrap(); } 我的问题是,此生锈代码不会捕获信号,我不明白我在做什么。 当您将总线消息发送到特定目的地时,它们不再是广播(与您的代码注释相反) - 仅将其发送到该目的地。接收此类信号。 在您的代码中,总线名称由发件人而不是接收器声明,因此发件人实际上将信号发送给本身。
我编写了以下golang程序作为main.go来学习Go中的dbus: 包主 进口 ( “FMMT” “github.com/godbus/dbus/v5” “时间” ) // 监听器函数...
跟踪 startUnit dbus 调用 systemd 的结果
上下文 我正在开发一个执行 dbus 调用来管理 systemd 单元的应用程序。 为了了解调用的情况,我正在编写一个小型 shell 脚本,该脚本应该检测诸如 systemctl 之类的失败单元:
使用 D-Bus Python Bluez Mesh API 获取新配置节点的组成数据
我目前正在 Raspberry Pi 4 上使用 Python D-Bus API 实现基于 BlueZ v5.54 的配置器节点和示例测试网格,我想读取网格网络中节点的组成数据...
这里是从事 BLE 项目的新手。使用 https://github.com/Douglas6/cputemp (根据我的具体需求定制)让 GATT 服务器与广告、服务等一起使用。还有客户
我正在尝试创建一个系统来通过 mpris 跟踪当前正在播放的媒体。改编自这个问题的 PyQt6 答案,我尝试了以下代码: 从 PyQt6 导入 QtCore、QtWidgets、
我正在尝试创建一个系统来通过 mpris 跟踪当前正在播放的媒体。改编自这个问题的 PyQt6 答案,我尝试了以下代码: 从 PyQt6 导入 QtCore、QtWidgets、
RaspberryPi 蓝牙文件应用程序始终要求在 iOS 上进行配对
我目前正在开发一个移动应用程序,该应用程序连接到 Ble 外围设备并从中读取数据。为了测试连接是否正常。我编写了一个小型 C# 应用程序,用于...
BlueZ github 上提供的示例服务器和客户端不起作用(我在两个树莓派上测试了它们,一个带有客户端,一个带有服务器)。我首先尝试了带有 nRF Connect 的服务器...
使用 PyInstaller 构建 onefile 可执行文件后没有名为“gi”的模块
我正在尝试将用 Python 编写的脚本构建为单个文件可执行文件。当我在计算机上使用 pyinstaller -F script.py 时,效果很好。但是当我尝试通过 GitHub Workflo 构建可执行文件时...
我在连接 dbus 时遇到问题: 尝试: logging.debug(“尝试连接到 D-Bus。”) self.bus = SessionBus() self.keepass_service = self.bus.get(&...
“org.ofono”服务中缺少“org.ofono.MessageManager 接口”
我正在使用“org.ofono.MessageManager”接口来检测当前连接的蓝牙设备上的“MessageAdded”信号。然而,当内省对象时...
我正在尝试从命令行为 ColorManager 创建一个显示对象(我没有,因为没有任何程序/守护进程为此运行)。我已经尝试了所有我知道的命令: dbus-发送 --syst...
我正在分析 Chromium 操作系统。 我已经使用 dbus-monitor 捕获了 dbus 方法调用,并希望通过 dbus-send 重新显示它。 下面是我想要重现的内容。 我的铬! # dbus-monitor --系统“
我需要通过蓝牙将我的 Android 手机连接到 Linux PC。电话需要能够通过 PC MAC 和服务的 UUID(或仅 UUID)完全自动地创建连接。还有...
我想获取有关当前在支持 MPRIS2 的 Linux 音乐播放器上播放音乐的元数据。 Python 有一个库为此提供了高级 API,但 JavaScript 没有。 我试过烧焦...
android 上的 BLE 无法调用 onCharacteristicChanged()
我正在尝试开发一个贝尔通信的演示 BLE服务器运行在带有BT模块的linux板上,服务器使用python-dbus开发,Characteristic部分如下所示 班级