Я начал работать с DBus и Bluetooth в Qt. Я хочу разработать скрипт, который будет просто вызывать метод через DBus и получать ответ. Часть кода здесь (это основная часть):
QString hostname("00:07:80:60:CE:22");
QDBusConnection bus = QDBusConnection::sessionBus();
QDBusInterface interface("org.bluez", "/", "Manager", bus, 0);
qDebug()<<"is valid: "<<interface.isValid()<<interface.lastError();
interface.lastError () выдает следующую ошибку:
QDBusError («org.freedesktop.DBus.Error.ServiceUnknown», «Имя org.bluez не было предоставлено никакими файлами .service»)
У меня установлены bluez и dbus. Я могу искать устройства Bluetooth из команды.
Я также попробовал команду sudo bluetoothd -d -n, и я получил это:
Ошибка установки D-Bus: имя уже используется
bluetoothd [21952]: невозможно подключиться к D-Bus
Кто-нибудь знает в чем может быть проблема?
Ошибка, которую вы получаете (name already in use
) означает, что демон bluetooth уже запущен в вашей системе. Вы можете остановить это, сделав sudo service bluetooth stop
Хотя я чувствую, что это довольно жестокий способ покончить с демоном Bluetooth. Если вы завершаете работу демона, вы также завершаете реализацию BlueZ D-Bus, поэтому вы не сможете его использовать.
Хотя я никогда не работал с реализацией Qt bluetooth / dbus, с вашим кодом есть несколько проблем:
Прежде всего, интерфейс BlueZ публикуется через система автобус, а не сессия автобус, так что это первое изменение, которое должно быть сделано.
Во-вторых, какова функция "Manager"
параметр вашего прохождения? Если вы пытаетесь подключиться к интерфейсу DBus под названием "Manager"
тогда нет ни одного. Я не уверен, что так и было, поскольку вы задали этот вопрос в 2013 году. Вы можете увидеть интерфейсы DBus, которые BlueZ реализует, используя программу под названием D-Feet. Вы должны попробовать это, поскольку это помогло мне понять работу BlueZ с DBus. рекомендую sudo apt-get install d-feet
, Единственные интерфейсы, которые публикуются на "/"
путь org.freedesktop.DBus.Introspectable
а также org.freedesktop.DBus.Objectmanager
, Опять же, это можно легко увидеть и экспериментировать с использованием D-Feet, так как он позволяет визуально представлять абстрактные интерфейсы и пути.
Если, случайно, у вас возникнут проблемы с ГАТТ позже; бежать bluetoothd
с -E
экспериментальный флаг; это включает функциональность BlueZ GATT. (Просто на голову).
Других решений пока нет …