Що таке 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:
- Мтчелл м. - програмування для linux. Професійний підхід
- Вибір місця установки додатка apk
- Примусовий вибір установки apk додатки андроїд
- Кращі vpn для linux 2016
- Чим відрізняється uefi від bios
- Що таке root в android?
- Що таке jailbreak?
- Що нового в php7.1: ключове слово void.
- Що це таке launcher (лончер) і навіщо він потрібен?
- Що таке apk?
- Установка steam в ubuntu 16.04
- Утиліта ss в linux
- Очищення системи debian 8
- Системи ініціалізації linux
- Групи користувачів linux
- Управління службами linux
- Установка telegram ubuntu 16.04
- Написання скриптів оболонки - поради експертів
- Порівняння arduino vs raspberry
- Сервіс по генерації трикутників.
- Перезавантаження комп`ютера в linux