LINUX.ORG.RU

Dbus и работа с ним из скрипта sh

 , , ,


0

1

Пишу скрипт для управления bluetooth устройствами, современный bluez5 предполагается контролировать через dbus. Возникло пару мелких вопросов.

1. Если метод (например Connect) возвращает ошибку (допустимые ошибки org.bluez.Error.NotReady, org.bluez.Error.Failed, org.bluez.Error.InProgress, org.bluez.Error.AlreadyConnected), эти ошибки будут выданы в ответе dbus-send --print-reply или их отдельно надо как-то отлавливать?

2. Из скрипта как-то можно наладить контроль за сигналами типа org.freedesktop.DBus.Properties.PropertiesChanged или запускать для них dbus-monitor и парсить его вывод?

В help по dbus-send для параметра --print-reply есть дополнение что формат может быть --print-reply[=literal] нигде не встречал описания, на что влияет этот =literal

★★★★★

эти ошибки будут выданы в ответе dbus-send --print-reply или их отдельно надо как-то отлавливать?

Вообще, с --print-reply ответ в любом случае будет, но если адрес dbus недоступен, то ошибками срать в ответ тебе будет уже сам dbus. Просто потыкай dbus-send в нужный адрес при разных обстоятельствах (если он лежит/отсутствует, неверный запрос и прочее) с перенаправлением 2>&1 >/dev/null (не наоборот!), и пиши условия уже на конкретные выхлопы.

Из скрипта как-то можно наладить контроль за сигналами типа org.freedesktop.DBus.Properties.PropertiesChanged или запускать для них dbus-monitor и парсить его вывод?

dbus-monitor — слишком жирно, делай дополнительный вызов не с назначением (set), а с получением (get), если таковой вызов имеется, и проверяй, если тебе с --print-reply не выдаёт ответ что-то типа boolean true.

r3lgar ★★★★★
()
Ответ на: комментарий от r3lgar

да с ошибками уже столкнулся, выдает сразу в ответе, а для анализа ошибок самого dbus, можно код завершения анализировать.

делай дополнительный вызов не с назначением (set), а с получением (get), если таковой вызов имеется,

это его в цикле придется прокручивать... ну тоже вариант в принципе

irton ★★★★★
() автор топика
Ответ на: комментарий от irton

это его в цикле придется прокручивать

Нафига?! Сразу после set делаешь get, sed'ом (но я бы сделал через awk) вычленяешь нужное, сверяешь. Я так делал для симуляции toggle. Но вообще…

для анализа ошибок самого dbus, можно код завершения анализировать

this.

r3lgar ★★★★★
()
19 сентября 2017 г.

Все было очень неплохо, пока не потребовалось разрулить метод Discovery, для того чтобы начался процесс поиска устройств.

Я успешно запускаю метод StartDiscovery через dbus-send и поиск начинается, но проблема в том, что я не могу остановить поиск. Разработчики Bluetooth говорят что команда остановки должна поступить с того же отправителя, откуда пришёл StartDiscovery.

В dbus-send задать отправителя возможности вроде нет, а сам отправитель перестаёт существовать как только отправляется запрос StartDiscovery.

irton ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.