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