Какой интерфейс я должен проверить для обнаружения подключенного USB?

Я пытаюсь определить, что USB-устройство было подключено или удалено из программы qt с помощью метода: http://doc.qt.io/qt-4.8/qdbusconnection.html#connect

Мой текущий код соответствующего класса выглядит так:

#include "usbhandler.h"#include <QDebug>

USBHandler::USBHandler()
{
QDBusConnection *bus;
bool success;

bus = new QDBusConnection("DeviceAdded");

if (bus == NULL)
{
qDebug() << "Allocation Error";
return;
}

if (!QDBusConnection::systemBus().isConnected())
{
qDebug() << "Cannot connect to system bus";
}

success = QDBusConnection::systemBus().connect(
"org.freedesktop.UDisks",
"/org/freedesktop/UDisks",
"org.freedesktop.UDisks",
"DeviceAdded",
this, SLOT(deviceAdded(QDBusObjectPath)));

if (success != true)
{
qDebug() << "Unsuccesfully connected!";
delete bus;
return;
}
}

void USBHandler::deviceAdded(QDBusObjectPath dev)
{
qDebug() << "device added!"<<dev.path();
}

Когда я бегу solid-hardware listen Я получаю при подключении / отключении следующие уведомления:

Device Added:
udi = '/org/freedesktop/UDisks2/block_devices/sdb'
"/org/freedesktop/UDisks2/block_devices/sdb1" has new interfaces:     ("org.freedesktop.UDisks2.Block", "org.freedesktop.UDisks2.Filesystem", "org.freedesktop.UDisks2.Partition")

Device Added:
udi = '/org/freedesktop/UDisks2/block_devices/sdb1'
"/org/freedesktop/UDisks2/block_devices/sdb1" lost interfaces: ("org.freedesktop.UDisks2.Partition", "org.freedesktop.UDisks2.Filesystem", "org.freedesktop.UDisks2.Block")

Device Removed:
udi = '/org/freedesktop/UDisks2/block_devices/sdb1'
"/org/freedesktop/UDisks2/block_devices/sdb" lost interfaces: ("org.freedesktop.UDisks2.PartitionTable", "org.freedesktop.UDisks2.Block")

Device Removed:
udi = '/org/freedesktop/UDisks2/block_devices/sdb'

Поэтому я был уверен, что система уведомит USB-накопитель, и теперь я уже часами играю с интерфейсами с именами USB, но не могу добиться успеха, если моя программа отреагирует на подключение / отключение накопителя.

Так что я делаю не так?
Каким должен быть интерфейс и имя параметра connect() быть как?
И можете ли вы объяснить мне, что именно они делают?

1

Решение

Device Added:
udi = '/org/freedesktop/UDisks2/block_devices/sdb'
"/org/freedesktop/UDisks2/block_devices/sdb1" has new interfaces:

Я не уверен, что это ваша проблема, но UDI содержит UDisks2, не UDisks. Я предлагаю вам настроить свой звонок на connect(), Что-то вроде этого:

success = QDBusConnection::systemBus().connect(
"org.freedesktop.UDisks",
"/org/freedesktop/UDisks2",
"org.freedesktop.UDisks2",
[...]);
-1

Другие решения


По вопросам рекламы [email protected]