Использование утилиты dbus-send
dbus-send
может подключаться к системным службам и службам других приложений на этом же
устройстве с помощью механизма D-Bus.
В ОС Аврора представлены несколько системных программ, предоставляющих D-Bus-сервисы. К их документации можно обратиться в разделе Справочная документация. Использование других API не рекомендуется, так как не гарантированы их стабильность и доступность.
Получение списка D-Bus-сервисов
Для получения списка D-Bus-сервисов, доступных на конкретном устройстве или эмуляторе, можно
использовать утилиту dbus-send
и D-Bus-сервис данной утилиты — org.freedesktop.DBus
.
Предварительно на устройстве или эмуляторе следует авторизоваться по протоколу ssh:
ssh defaultuser@device # команда для устройства
ssh -p 2223 -i ~/AuroraOS/vmshare/ssh/private_keys/sdk defaultuser@localhost # команда для эмулятора
У D-Bus-сервиса org.freedesktop.DBus
следует обратиться к методу ListNames
интерфейса
org.freedesktop.DBus
по пути /org/freedesktop/DBus
, чтобы узнать список доступных сервисов.
Поскольку у D-Bus две шины, то будет два списка доступных сервисов: на системной шине
и на сессионной шине.
Пример команды для сессионной шины:
dbus-send --session --print-reply --dest=org.freedesktop.DBus /org/freedesktop/DBus org.freedesktop.DBus.ListNames
Пример команды для системной шины:
dbus-send --system --print-reply --dest=org.freedesktop.DBus /org/freedesktop/DBus org.freedesktop.DBus.ListNames
В ответ будет выведен список сервисов, доступных на данной шине.
D-Bus-сервисы, которыми рекомендуется пользоваться в коде приложений,
описываются в документации ОС Аврора,
за исключением org.freedesktop.*
, для которых
общедоступная документация актуальна и для ОС Аврора.
Обращение к другим API не рекомендуется. Стабильная работа сервисов, которые не включены в публичный API и не документированы на этом портале, не гарантируется от релиза к релизу. Вместо D-Bus API в таких случаях рекомендуется пользоваться библиотеками-обёртками.
Работа с dbus-send
Утилита dbus-send позволяет обращаться к методам и свойствам D-Bus-интерфейсов.
Для обращения к конкретному интерфейсу нужно знать несколько параметров:
- шину, на которой зарегистрирован сервис — системной или сессионной;
- название сервиса;
- путь к интерфейсу;
- название интерфейса;
- имя метода или свойства, к которому нужно обратиться.
Эти параметры прописываются в команде dbus-send
.
Сессионная шина указывается как опция --session
, системная — как опция --system
.
Название сервиса указывается в опции --dest
, путь к интерфейсу указывается после сервиса
через пробел.
Если нужно вызвать метод, то после пути следует написать интерфейс и метод, название метода указывается через точку сразу после интерфейса.
Пример вызова метода getOsVersion
у сервиса ru.omp.deviceinfo
и интерфейса
ru.omp.deviceinfo.Features
, находящегося по пути /ru/omp/deviceinfo/Features
.
dbus-send \
--system --print-reply \
--dest=ru.omp.deviceinfo /ru/omp/deviceinfo/Features \
ru.omp.deviceinfo.Features.getOsVersion
Значение свойства можно получать и изменять с помощью методов Get
и Set
у системного интерфейса org.freedesktop.DBus.Properties
.
Пример получения свойства ApiVersion
у системного сервиса ru.omprussia.SystemLogs
:
dbus-send \
--system --print-reply \
--dest=ru.omprussia.SystemLogs /ru/omprussia/SystemLogs \
org.freedesktop.DBus.Properties.Get \
string:ru.omprussia.SystemLogs string:ApiVersion