Що таке dbus

Якщо ви досить давно користуєтеся операційною системою Linux, то, напевно, вже не раз чули про сервіс DBus. Він фігурує в різних балках програм, інструкціях по налаштуванню системи, а також ви можете бачити сервіс DBus-daemon, який незрозуміло навіщо завантажується при старті системи.

У цій статті ми спробуємо розібратися, що таке DBus, навіщо він потрібен, а також як його можна використовувати для ефективного управління додатками в системі.

Що таке Dbus?

Dbus або Desktop Bus - це система, яка використовується в основному в операційній системі Linux для того, щоб різні додатки і сервіси могли спілкуватися між собою. Але за допомогою Dbus можуть взаємодіяти не тільки додатки, але і користувачі з додатками.

По суті, DBus складається з керуючого демона, API для мов програмування, за допомогою яких додатки можуть взаємодіяти з системою і консольного клієнта.

Кожна програма, яка хоче працювати з DBus, має зареєструвати свій сервіс в демона DBus. Оскільки всі додатки і сервіси можуть безперешкодно обмінюватися повідомленнями, цей спосіб ще називається шина DBus. На шині кожен додаток має свою адресу, а кожен додаток має свого відправника і адресата. Додаток може обмінюватися повідомленнями навіть не з одним, а кількома додатками одночасно. Кожна програма може відправляти повідомлення і прослуховувати вхідні.

Цей механізм дає системі величезну гнучкість, наприклад, програми можуть підписуватися на повідомлення про підключення нових пристроїв, зміні налаштувань, зміні стану системи і багато іншого. Все це за допомогою стандартизованого інтерфейсу DBus, що гарантує сумісність. Також програми можуть реєструвати свої сервіси таким чином, щоб програма запускалася тільки при надходженні повідомлень і не працювала в тлі.

Зазвичай Dbus створює дві шини або області, в яких програми можуть обмінюватися повідомленнями. Це системна шина - для системних сервісів. Її головне завдання - доставка повідомлень про зміну стану обладнання. Друга шина сесійний, створюється окремо для кожного користувача і дозволяє додаткам, запущеним від його імені взаємодіяти між собою.

об`єкти Dbus




Кожна програма, яка використовує Dbus, реєструє свій об`єкт, а також може реєструвати кілька інтерфейсів. Коли об`єкту відправляється повідомлення, його отримує і додаток. У кожного об`єкта унікальне ім`я. Воно схоже на шлях в файлової системі. Щоб ім`я кожного об`єкта було унікальним в ньому використовується префікс розробника, наприклад, / org / kde або / com / redhat.

Шлях об`єкта DBus складається з трьох частин:

  • Ім`я сервісу;
  • Ім`я об`єкта;

Кілька прикладів об`єктів:

  • org.freedesktop.NetworkManager
  • org.freedesktop.UDisks
  • org.freedesktop.DisplayManager
  • org.kde.plasmashell

Відео: ЩО ЦЕ ТАКЕ? - [під мікроскoпoм]




Частини імені об`єктів розділені крапкою. Кожен об`єкт має один або кілька інтерфейсів, яким можна відправляти повідомлення.

Інтерфейси мають дуже схожий шлях на шлях об`єкта, в деяких випадках, ім`я інтерфейсу збігається з ім`ям об`єкта, але якщо інтерфейсів кілька, то вони можуть відрізнятися. На відміну від об`єкта ім`я інтерфейсу розділене слешем. Ось кілька прикладів імен інтерфейсів, в дужках я привів об`єкти, в яких є ці інтерфейси:

  • / Org / mpris / MediaPlayer2 / Player (org.mpris.MediaPlayer2.VLC)
  • / Org / PluseAudio / ServerLookup1 (org.PluseAudio1)

повідомлення Dbus

Повідомлення Dbus це теж досить складна тема. Вони бувають чотирьох різних типів. Це виклики методів, результати викликів, сигнали і помилки. Dbus проектувався для використання в першу чергу в програмах, тому і були реалізовані такі складні структури. Коли здійснюється виклик методу, програма повинна обробити дані і потім у відповідному повідомленні повернути результат (результат виконання) або помилку.

Відео: [UNІX] [GNU / Linux] Лекція 2. Термінал і командний рядок

Доступні об`єкти Dbus

Більшість доступних об`єктів Dbus описані на сайті freedesktop.org. Але найкращий спосіб дізнатися які сервіси підтримує система - це скористатися програмою qdbusviewer. В оточенні робочого столу kde вона поставляється за замовчуванням, в Gnome і інших її можна встановити з пакету qttools5-dev-tools:

$ Dbus-send --system --print-reply --reply-timeout = 120000 --type = method_call --dest = `org.freedesktop.NetworkManager` `/ org / freedesktop / NetworkManager` org.freedesktop.NetworkManager.GetDevices

Що тут відбувається? Ми повідомляємо програмі, що хочемо бачити відповідь, тип повідомлення - виклик методу, об`єкт org.freedesktop.NetworkManager, інтерфейс / org / freedesktop / NetworkManager, і метод org.freedesktop.NetworkManager.GetDevices

Включимо музику в плеєрі VLC:

$ Dbus-send --print-reply --dest = org.mpris.MediaPlayer2.vlc / org / mpris / MediaPlayer2 org.mpris.MediaPlayer2.Player.Pause

Тут org.mpris.MediaPlayer2.vlc - об`єкт, інтерфейс - / org / mpris / MediaPlayer2, метод - org.mpris.MediaPlayer2.Player.Pause

Методи можуть отримувати параметри, наприклад, перемотати наш трек на кілька секунд:

$ Dbus-send --print-reply --dest = org.mpris.MediaPlayer2.vlc / org / mpris / MediaPlayer2 org.freedesktop.DBus.Properties.Get string: org.mpris.MediaPlayer2.Player string: Volume

Замість того щоб звернутися безпосередньо до змінної інтерфейсу, ми використовуємо метод org.freedesktop.DBus.Properties.Get об`єкта / org / mpris / MediaPlayer2 і передаємо йому два рядки. Ім`я інтерфейсу і ім`я змінної. Даний приклад показує, як подивитися поточну гучність VLC.

Встановити значення змінної ще складніше. Для цього використовується метод org.freedesktop.DBus.Properties.Set:

Поділися в соціальних мережах:

Схожі
Що нового в php7.1: ключове слово void.Що нового в php7.1: ключове слово void.
Права доступу до файлів в linuxПрава доступу до файлів в linux
Що таке jailbreak?Що таке jailbreak?
Установка telegram ubuntu 16.04Установка telegram ubuntu 16.04
Установка steam в ubuntu 16.04Установка steam в ubuntu 16.04
Мтчелл м. - програмування для linux. Професійний підхідМтчелл м. - програмування для linux. Професійний підхід
Утиліта ss в linuxУтиліта ss в linux
Очищення системи debian 8Очищення системи debian 8
Що таке root в android?Що таке root в android?
Порівняння arduino vs raspberryПорівняння arduino vs raspberry