0X2207 d-bus

D-Bus - це шина повідомлень або один із способів взаємодії процесів між собою в операційній системі GNU / Linux, яка використовується практично у всіх сучасних дистрибутивах. Виконувані процеси часто хочуть взаємодіяти між собою; пайпи (pipes), спільна пам'ять (shared memory), RPC, і т.п. - все це забезпечує обмін інформацією між ними.

D-Bus представляє свій альтернативний спосіб такої взаємодії. Сам демон dbus займається маршрутизацією повідомлень, що розсилається додатками один одному. Концепція dbus приблизно наступна: існують

Кожне підключення до демона має своє ім'я, наприклад org.kde.kopete.
Таким чином додатки, знаючи один одного за таким імені, можуть працювати з об'єктами один одного.

інтроспекція


Виникає питання, а як нам дізнатися конкретні шляхи об'єктів і імена методів, щоб можна було зробити щось дійсно корисне? У цьому допомагає здатність об'єктів дивитися всередину себе, подібно однойменним методу психологічних досліджень. Кожен об'єкт, навіть якщо про нього заздалегідь нічого не відомо, має інтерфейс org.freedesktop.DBus.Introspectable в якому є один виклик Introspect.

Попросимо у кореневого об'єкта підключення org.freedesktop.DBus розповісти про себе:

dbus-send --type = method_call --print-reply --dest = org.freedesktop.DBus / org.freedesktop.DBus.Introspectable.Introspect


У відповідь повертається рядок, що містить XML файл з описом, з якого можна дізнатися, які доступні інтерфейси, які в них є методи і які є дочірні вузли, тобто об'єкти типу / Name

кілька прикладів

Дізнатися імена підключень:

dbus-send --session --dest = org.freedesktop.DBus --type = method_call --print-reply / org.freedesktop.DBus.ListNames


Слід зазначити, що існують системна (--system) і сесійний (--session) шини. Перша з них загальна для всіх процесів, друга призначена для користувача процесів і запускається в момент входу в систему (наприклад запуску сесії KDE).

Отримати масив, що містить список контактів запущеного kopete:

dbus-send --dest = org.kde.kopete --type = method_call --print-reply / Kopete org.kde.Kopete.contacts

Зробить голосніше музику:

dbus-send --dest = org.mpris.amarok --type = method_call --print-reply / Player org.freedesktop.MediaPlayer.VolumeSet int32: 95

Вимкне комп'ютер (без всяких root'овскіх прав):

dbus-send --system --dest = org.freedesktop.Hal --type = method_call --print-reply / org / freedesktop / Hal / devices / computer org.freedesktop.Hal.Device.SystemPowerManagement.Shutdown

Схожі статті