Как я познакомился с Димасом Dbus-ом



В общем-то, с dbus я уже был ранее знаком, но последние рабочие такски заставили меня прибегнуть к практике. Если кто не в танке, dbus (Desktop Bus) - это система межпроцессного взаимодействия в Linux. Позволяет она удобно из одного приложения дергать код другого, подписываться на сигналы и передавать информацию.



Задача была следующая - на стороне приложения отслеживать профили энергопотребления системы (balanced, powersave, performance) и корректировать поведение для экономии заряда либо выдавать сверх производительность.



Для этого нужно было понять, какие вообще подсистемы за это отвечают и как с ними работать. Пока разбирался с задачей, рассмотрел 2 сервиса:



1) tuned (com.redhat.tuned) - приложение, которым можно переключать и отслеживать профили. Можно использовать независимо от окружения;



2) PowerManagement (org.kde.Solid.PowerManagement) - kde модуль, который позволяет отслеживать состояние батареи: идет ли питание от провода, низкий ли заряд и т.д.;



По итогу, через PowerManagement получилось отследить 3 состояния: AC (питание по проводу), Battery и LowBattery. Если хотите проверить у себя:





$ qdbus org.kde.Solid.PowerManagement /org/kde/Solid/PowerManagement org.kde.Solid.PowerManagement.currentProfile





Полный интерфейс вывести можно вот так:





$ busctl --user introspect org.kde.Solid.PowerManagement /org/kde/Solid/PowerManagement





Приложение tuned позволило более гибко настроить приложуху и отследить профили (balanced, powersave, performance), которые могут выставляться независимо от заряда батареи. Узнать профиль:





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





Вывести полный интерфейс:





$ busctl --system introspect com.redhat.tuned /Tuned




Конечно же для языка C у нас есть либа (libdbus), через которую аналогичную процедуру можно реализовать кодом. Задача еще в работе, поэтому по мере своего продвижения в dbus буду постить полезности.



LinuxCamp | #story