を実行していますUSBドライブ。私は私のx86 Linuxデスクトップ上で正常に動作InterfacesAdded from org.freedesktop.UDisks2、を聞くためにQtのD-バスのサポートを使用しています。最善の方法は、</p> <p>私は、ユーザーが挿入したときに通知する必要ラズベリーパイのためのプログラムを書いています(この質問は異なるstackexchangeサイト上のほうであれば私の謝罪)
はここに私のクラスのスロットにD-バス信号を設定します私のコードです:
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");
}
それはパイでは動作しません。 udisksdが必要なときに自動的に起動するはずですが、udisksdが実行されていないという事実まで追跡しました。
私は(ないGUI)をコンソールに起動すると、それだけでは、D-バスを持っているだけでは不十分だと、シグナルハンドラを追加しているので、自動的にudisksd始めることを推測しています。
私はbus.connect
その後、すべての作品に私の呼び出しの前に
auto msg = QDBusMessage::createMethodCall("org.freedesktop.UDisks2", "/org/freedesktop/UDisks2", "org.freedesktop.DBus.ObjectManager", "GetManagedObjects");
bus.call(msg);
を追加した場合。
確認udisksdが実行されているようにする良い方法はありますか?私はむしろPi上の設定ファイルを変更するだけで、サービスを "起動"するために余分なコードを持たなければなりません。
だそれ!私は、udisks2が通常のsystemdサービスファイルとして書かれていることを認識しませんでした。それは[「静的」](https://bbs.archlinux.org/viewtopic.php?id=147964)サービスだから、それは通常のサービスの場合と同じようしかし、 'systemctl enable'コマンドが動作しません。だから、私自身のアプリはsystemdサービスとして開始されているので、udisks2に依存するようにすることができます。 –