问题标签 [qtdbus]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
linux - 系统 D-Bus 不允许使用 conf 文件打出所有权
我正在尝试创建一个在系统总线上运行的守护程序服务,其中从该服务发送和接收的权限应该对任何人完全开放。(安全性不是此服务的问题)。当我尝试使用 QtDbus 注册服务时(使用 PyQt),我收到此错误:Connection ":1.0" is not allowed to own the service "org.dbus.arduino" due to security policies in the configuration file
. 另一个堆栈溢出具有相同的错误,但由于某种原因在这种情况下根本没有帮助。dbus_bus_request_name ()
: 不允许连接拥有服务。
通常,您应该保留该system.conf
文件并在目录中添加您的权限“打孔”配置文件system.d
。我已经这样做了,但它似乎并没有改变任何东西,无论我如何打开权限。事实上,我几乎可以肯定它不会改变任何东西!这是我的 conf 文件,因为它就在此刻。
即使我这样做或类似的事情,它仍然不起作用。
我什至将文件的名称以 az 开头,以便它可能是最后一个被读入的文件。这是 system.conf 文件,注意我在哪里注释掉了“允许自己”部分。这是让它工作的唯一方法(也是最糟糕的“修复”)。
我绝对必须使用系统总线,因为我将它部署在没有 GUI 的 Raspberry Pi 上(没有 x11,也没有会话总线)。只有完全允许系统总线上的所有内容,我才能让 Raspberry Pi 正常工作(在这个设备上,安全性并没有那么重要)。显然,我不允许在我的开发机器上发生这种情况。作为背景,我使用的是 Opensuse 12.2,而 Raspberry Pi 是 Debian Squeeze。除非我完全打开权限,否则我不能用我的用户帐户或 root 拥有该服务,在这种情况下它工作得很好。我还要注意,当我完全打开系统总线时,我仍然必须使用 root 向守护进程发送消息(终止命令)。我希望该解决方案能够通过具有 root 访问权限的特定用户运行。
感谢您的帮助,我确定这是一个小问题!
macos - 如果不是从 Library-Path 启动,Qt DBUS 库将无法加载
在经历了很多问题之后让 DBUS 在 OS X Mavericks 上工作后,我遇到了最后一个问题。如果我不在 libdbus 所在的目录中,我的应用程序无法与总线交互。
为了清楚起见:下面的简单程序,基本上是 Widgets-Template,用于测试:
当从 QT Creator 中运行它时,我会得到:
当移动到我的 lib-Path(它是 /opt/local/lib/;通过端口安装 dbus)并调用 /path/to/project/executable 时,我得到:
那么我必须做些什么才能从每个位置启动我的应用程序?
c++ - 从 shell 向 qt 应用程序发送 dbus 消息
我想做 dbus-send 从 shell/console 到 qt 应用程序。
这是一个简单的 QT 应用程序的代码
从终端,我发送这个命令
我收到此错误:接口“com.mydomain.mcp”上带有签名“s”的方法“usb”不存在
我究竟做错了什么?
谢谢
c++ - Qt DBus 属性转换为地图
我需要得到一个 DBus 接口的属性,所以我做了interface.property(name)
. 这会返回一个 QVariant,但 QVariant 可以返回的地图只有QMap<QString, QVariant>
,而我需要QMap<QString, QDBusVariant>
。我应该怎么办?
c++ - DBUS需要同步吗?
我对如何同步 DBUS 调用或使其安全有疑问?这更像是一个概念问题。我知道这种情况不会出现在 SOCKET 中。除非生产者完成其任务,否则消费者会被阻塞 - 套接字/管道中的 recvfrm 和 sendfrm()。基本上,生产者和消费者工作分别在套接字的两侧进行了很好的定义。
这是一个场景。实际上,我在我的项目中使用 QT-DBUS。但是,我认为这并不特定于 QT DBUS。这个问题适用于任何 DBUS。
有一个名为“GetTemperatureValue()”的函数。此类通过 DBUS 注册其服务 - “GetTemperatureValue()”。并且“GetTemperatureValue()”可以从 DBUS 客户端调用。现在,如果“GetTemperatureValue()”返回的值定期更改。假设一个计时器非常频繁地改变温度值。如果在客户端通过 DBUS 调用调用调用“GetTemperatureValue()”之间,那么它不会得到一个垃圾值。由于没有保护,返回的温度值可能已损坏。这里需要保护吗?如果需要保护,我们该怎么做?
这也是一个 qt-dbus 示例 - http://www.tune2wizard.com/linux-qt-signals-and-slots-qt-d-bus/
c++ - dbus session connections: connecting dbus signals with qt slots, how can it be done?
So, for the life of me, I can't get my object to connect to the session bus. So, I'm trying to connect "wakeup" of "my_obj" to the dBus signal "profileChanged". But, even though I'm sure (via qbusviewer) that this signal is being emitted, "wakeup" will not run. Here is a snippet of my code:
#xA;qDBus shows that "profileChanged" has the form "void (QString)" and I'm not getting any errors nor warnings. Here is the qdbus output for that particular signal:
#xA;So, I'd think this would work. I'm sure I'm missing some minute detail that's buried deep within some documentation. Would anybody know where I'm going wrong?
c++ - 尝试获取具有自定义类型的 DBus 属性时出现致命错误
我正在尝试将UDisks2与 Qt 应用程序接口,并读取自定义属性使程序崩溃。
对于 SMART 属性,一切正常(包括自定义属性),但是当我尝试读取 RAID 设备属性ActiveDevices时出现 Qt 致命错误并且应用程序崩溃
以下是说明行为的测试程序:
执行此代码产生以下输出
有人遇到过这种情况吗?我根本不认为它与我的代码有关,因为如果未声明自定义类型(仅保留主函数的内容),结果是相同的。
c++ - 从 net.connman.Manager 的 GetService 方法中动态提取 D-Bus 参数和对象路径
我正计划开发一个使用 DBus 和 connman(嵌入式设备的无线管理器)的应用程序。据我了解,DBus 公开了程序使用的方法,并允许开发人员在自己的程序中也使用这些方法。
我知道Qt有QtDbus模块,如果我的理解是正确的,net.connman.Manager接口下的GetServices方法显示了可用的无线网络。从 qdbusviewer 程序检查 GetServices 方法的输出,我可以看到每个无线网络都有自己独特的对象路径,例如/net/connman/service/wifi_00120ec15ba0_4c616964614d616774616c6173_managed_psk。
要在 net.connman.Services 接口下使用 Connect 和 Disconnect 方法,我需要对象路径,以便创建一个允许调用 Connect/Disconnect 的新接口。我目前正在尝试此处概述的方法如何在 Qt DBus 调用中从 QDBusMessage 中提取返回的数据?,但是当我尝试返回对象路径时,我只得到一个空白:
这是我获取对象路径的代码:
如何提取 GetService 方法返回的参数和对象路径?有没有人正确地做到这一点?我是 Qt 和编程的新手,所以任何帮助将不胜感激。
谢谢
qt - QtDbus 在 Windows 7 上的 Qt5.4.1 中不起作用
当我运行 Qt Creator dbus 示例时,它们无法运行,是否有任何设置或东西可用于工作 QtDbus 模块或任何先决条件?
例如在chat
项目中:
返回1
和程序终止。
c++ - 如何在 posix 线程中使用 qt dbus 绑定?
我正在为应用程序编写一个库,它加载我的库 dinamycaly,并在 posix 线程中开始执行。我要求应用程序的开发人员使用 QThreads,但他们说他们无法更改任何内容。
在我的库中,我想使用 Qt Dbus 绑定,但它并不能很好地工作,因为它没有在 QThread 上下文中运行。我注意到两件事:
- 我没有收到对异步调用的响应(如QDBusPendingCallWatcher 的文档中所述)。同步(阻塞)调用工作正常。
创建 dbus 接口时收到下一条消息:
QSocketNotifier:只能用于以 QThread 启动的线程
QSocketNotifier:只能用于以 QThread 启动的线程
我找到的所有信息都说我需要创建 QThread 才能使其工作,而不是使用 posix 线程,但我别无选择。
是否可以让 QSocketNotifier 在非 QThread 上下文中工作?如果是,如何?
PS 我可以从源代码编译 qt 库,并且可以做任何我喜欢的事情。因此,即使修补它也可以。
我找到了 qt 4.8 的这个补丁来启用自定义事件调度程序的安装。但我不确定它是否会破坏任何东西,以及它是否是线程安全的。会玩一点,看看它是否有效。