Утилиты для работы с DBus сервисами



Пока я решал задачу с профилями энергопотребления, использовал ряд утилит, которые помогали мне взаимодействовать с dbus сервисами. Коротко пробежимся по самым основным:



1) qdbusviewer: графическая Qt утилита, которая позволяет просматривать активные сервисы в которые можно постучаться по системной (system bus) или пользовательской (session bus) шине. Она предоставляет удобный интерфейс для работы с объектами, методами и сигналами.





$ sudo apt install qttools5-dev-tools

$ qdbusviewer





2) dbus-send: низкоуровневый cmd инструмент, который позволяет вручную отправлять запросы к сервисам:





$ sudo apt install dbus

$ dbus-send --system --dest=com.redhat.tuned --type=method_call --print-reply /Tuned com.redhat.tuned.control.active_profile





Подписаться на сигнал через "dbus-send" не получится, для этого нужны утилиты, которые умеют прослушивать сервисы в реальном времени - "dbus-monitor".



3) dbus-monitor: выводит на консоль информацию о сигналах в момент их получения либо о методах в момент вызова:





$ dbus-monitor "type='method_call',interface='org.kde.Solid.PowerManagement'"





Входит в пакет dbus. Хорошо мне подходил для дебага. Я сначала пытался отследить сигнал - если приходит отбивка, значит сервис активен, интерфейс верный и можно переходить к коду.



4) busctl: современный аналог dbus-send, включен в systemd. С помощью утилиты можно вызывать (busctl call) методы и прослушивать (busctl monitor) события. Также можно выводить список узлов на пользовательской и системной шинах:





$ sudo apt install systemd



$ busctl call com.redhat.tuned /Tuned com.redhat.tuned.control active_profile



$ busctl --system monitor "com.redhat.tuned.control" "profile_changed"





$ busctl --user list

$ busctl --system list





LinuxCamp | #utils