gpt4 book ai didi

linux - 确保 udiksd 正在运行的最佳方法

转载 作者:太空宇宙 更新时间:2023-11-04 04:44:42 24 4
gpt4 key购买 nike

我正在为 Raspberry Pi 编写一个程序,当用户插入 USB 驱动器时需要收到通知。我正在使用 Qt 的 D-Bus 支持来收听 InterfacesAdded from org.freedesktop.UDisks2 ,在我的 x86 Linux 桌面上运行良好。

这是我的代码,用于将 D-Bus 信号设置到我的类的插槽:

auto bus = QDBusConnection::systemBus();
auto monitor = new UsbMonitor(&app); // my class

if (!bus.connect("org.freedesktop.UDisks2", "/org/freedesktop/UDisks2", "org.freedesktop.DBus.ObjectManager", "InterfacesAdded",
monitor, SLOT(handleit(QDBusObjectPath, QMap<QString,QVariant>)))) {
qFatal("FATAL Couldn't connect USB monitor to D-Bus signal");
}

它不适用于 Pi。我发现 udisksd 没有运行,尽管它应该在需要时自动启动。

我猜测是因为我启动到控制台(而不是 GUI)并且只添加了一个信号处理程序,所以这不足以让 D-Bus 自动启动 udisksd。

如果我添加

auto msg = QDBusMessage::createMethodCall("org.freedesktop.UDisks2", "/org/freedesktop/UDisks2", "org.freedesktop.DBus.ObjectManager", "GetManagedObjects");
bus.call(msg);

在调用 bus.connect 之前,一切正常。

是否有更好的方法来确保 udisksd 正在运行?我宁愿更改 Pi 上的配置文件,也不愿使用额外的代码来“唤醒”服务。

最佳答案

取决于您在 Pi 上运行的发行版。如果您使用的是使用 systemd 的发行版,则可以运行 sudo systemctl enable --now udisks2.service将服务配置为始终启动。

您可能想要扩展代码以观看 org.freedesktop.UDisks2 D-Bus 上的名称,因为当信号消失并重新出现时您可能需要重新连接。 (我不知道 Qt D-Bus 是如何处理这个问题的;它是否在信号处理程序注册时或信号发射时将众所周知的名称解析为唯一名称。)

关于linux - 确保 udiksd 正在运行的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43595885/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com