D-Bus

Поделись знанием:
Перейти к: навигация, поиск
D-Bus
Тип

IPC

Разработчик

FreeDesktop.org

Написана на

C

Операционная система

Кроссплатформенный

Последняя версия

1.9.16 (14 мая 2015[1])

Лицензия

GNU GPL v2, или
AFL 2.1

Сайт

[dbus.freedesktop.org/ eedesktop.org]

К:Википедия:Статьи без изображений (тип: не указан)

D-Bus — система межпроцессного взаимодействия, которая позволяет приложениям в операционной системе сообщаться друг с другом.

D-Bus является частью проекта freedesktop.org. Она обладает высокой скоростью работы, не зависит от рабочей среды, работает на POSIX-совместимых операционных системах, также существует версия для Windows (пока на стадии разработки). Состоит из двух частей: демона и низкоуровневого API. Существуют высокоуровневые библиотеки для фреймворков Qt, Java, GLib, C#, Python, Ruby и библиотека для C++.





История

Приложения одной среды рабочего стола должны тесно взаимодействовать между собой. В графической среде KDE для этого не так давно использовался DCOP, но другие настольные среды (например, GNOME) не имели аналогичных систем.

Существовала возможность сообщения посредством CORBA, SOAP или XML-RPC, но CORBA больше подходит для систем уровня предприятия, чем для графических сред (KDE и GNOME прошли этап его использования за время своего существования), а SOAP и XML-RPC предназначены для веб-служб.

Раньше GNOME использовал Bonobo, основанный на CORBA, но из-за зависимости от GObject, Bonobo не использовался в других рабочих средах, а низкое быстродействие CORBA К:Википедия:Статьи без источников (тип: не указан)[источник не указан 4071 день] сказывалось на скорости всей среды.

Требовалось организовать обмен сообщениями между приложениями двух разных сред. Для решения этой задачи и был создан проект D-Bus. Реализация оказалась удачной и впоследствии было решено проект KDE 4 перевести на использование D-Bus.

Принципы работы

D-Bus предоставляет системе несколько шин:

  1. Системная шина. Создаётся при старте демона D-Bus. С её помощью происходит общение различных демонов, таких как UPower, а также взаимодействие пользовательских приложений с этими демонами.
  2. Сессионная шина. Создаётся для пользователя, авторизировавшегося в системе. Для каждой такой шины запускается отдельная копия демона, посредством неё будут общаться приложения, с которыми работает пользователь.

Каждое сообщение D-Bus, передаваемое по шине, имеет своего отправителя. В случае, если сообщение не является широковещательным сигналом, то оно имеет и получателя. Адреса отправителей и получателей называются путями объектов, поскольку D-Bus предполагает, что каждое приложение состоит из набора объектов, а сообщения пересылаются не между приложениями, а между объектами этих самых приложений.

Каждый объект может поддерживать один или более интерфейсов, которые представлены здесь в виде именованных групп методов и сигналов — аналогично интерфейсам Glib, Qt или Java.

D-Bus также предусматривает концепцию сервисов. Сервис — уникальное местоположение приложения на шине. При запуске приложение регистрирует один или несколько сервисов, которыми оно будет владеть до тех пор, пока самостоятельно не освободит, до этого момента никакое другое приложение, претендующее на тот же сервис, занять его не сможет. Именуются сервисы аналогично интерфейсам. После закрытия приложения ассоциированные сервисы также разрегистрируются, а D-Bus посылает сигнал о том, что сервис закрыт.

Сервисы делают доступной ещё одну функцию — запуск необходимых приложений в случае поступления сообщений для них. Для этого должна быть включена автоактивация, а в конфигурации D-Bus за этим сервисом должно быть закреплено одно приложение.

После подключения к шине приложение должно указать, какие сообщения оно желает получать, путём добавления масок совпадений (matchers). Маски представляют собой наборы правил для сообщений, которые будут доставляться приложению. Фильтрация может основываться на интерфейсах, путях объектов и методах.

Сообщения в D-Bus бывают четырёх видов: вызовы методов, результаты вызовов методов, сигналы (широковещательные сообщения) и ошибки.

В D-Bus у каждого объекта своё, уникальное имя, которое выглядит как путь в файловой системе. Например, объект может быть именован как /org/kde/kspread/sheets/3/cells/4/5. Предпочтительны имена, которые несут какую-либо смысловую нагрузку, тем не менее, разработчики могут выбрать и имя /com/mycompany/c5yo817y0c1y1c5b, если это имеет смысл для их приложения.

Имена объектов находятся в пространствах имён, чтобы обеспечить разграничение разных программных модулей. Пространствам имён обычно даётся префикс, специфичный для разработчика, например /org/kde.

См. также

Напишите отзыв о статье "D-Bus"

Примечания

  1. [cgit.freedesktop.org/dbus/dbus/tree/NEWS dbus/dbus - a lightweight ipc mechanism]

Источник

  • Роман Химов. [citkit.ru/articles/243/ Посредник D-BUS] // Chip Special Linux, 31 October 2006

Ссылки

  • [dbus.freedesktop.org Официальный сайт]  (англ.)
  • [dbus.freedesktop.org/doc/dbus-tutorial.html Руководство по использованию]  (англ.)
  • [www.linux.org.ru/wiki/en/D-Bus Страница, посвящённая D-Bus на LOR wiki]. С примерами.
  • [wiki.linuxformat.ru/wiki/LXF99:D-Bus D-Bus: шины для вашего Linux] - Статья в журнале Linux Format 99 (12), Декабрь 2007.
  • [www.ibm.com/developerworks/linux/library/l-dbus/index.html Статья на IBM developerWorks]. С примерами.  (англ.)

Отрывок, характеризующий D-Bus

«Ежели это один из обыкновенных штабных франтиков, посылаемых для получения крестика, то он и в ариергарде получит награду, а ежели хочет со мной быть, пускай… пригодится, коли храбрый офицер», подумал Багратион. Князь Андрей ничего не ответив, попросил позволения князя объехать позицию и узнать расположение войск с тем, чтобы в случае поручения знать, куда ехать. Дежурный офицер отряда, мужчина красивый, щеголевато одетый и с алмазным перстнем на указательном пальце, дурно, но охотно говоривший по французски, вызвался проводить князя Андрея.
Со всех сторон виднелись мокрые, с грустными лицами офицеры, чего то как будто искавшие, и солдаты, тащившие из деревни двери, лавки и заборы.
– Вот не можем, князь, избавиться от этого народа, – сказал штаб офицер, указывая на этих людей. – Распускают командиры. А вот здесь, – он указал на раскинутую палатку маркитанта, – собьются и сидят. Нынче утром всех выгнал: посмотрите, опять полна. Надо подъехать, князь, пугнуть их. Одна минута.
– Заедемте, и я возьму у него сыру и булку, – сказал князь Андрей, который не успел еще поесть.
– Что ж вы не сказали, князь? Я бы предложил своего хлеба соли.
Они сошли с лошадей и вошли под палатку маркитанта. Несколько человек офицеров с раскрасневшимися и истомленными лицами сидели за столами, пили и ели.
– Ну, что ж это, господа, – сказал штаб офицер тоном упрека, как человек, уже несколько раз повторявший одно и то же. – Ведь нельзя же отлучаться так. Князь приказал, чтобы никого не было. Ну, вот вы, г. штабс капитан, – обратился он к маленькому, грязному, худому артиллерийскому офицеру, который без сапог (он отдал их сушить маркитанту), в одних чулках, встал перед вошедшими, улыбаясь не совсем естественно.
– Ну, как вам, капитан Тушин, не стыдно? – продолжал штаб офицер, – вам бы, кажется, как артиллеристу надо пример показывать, а вы без сапог. Забьют тревогу, а вы без сапог очень хороши будете. (Штаб офицер улыбнулся.) Извольте отправляться к своим местам, господа, все, все, – прибавил он начальнически.
Князь Андрей невольно улыбнулся, взглянув на штабс капитана Тушина. Молча и улыбаясь, Тушин, переступая с босой ноги на ногу, вопросительно глядел большими, умными и добрыми глазами то на князя Андрея, то на штаб офицера.
– Солдаты говорят: разумшись ловчее, – сказал капитан Тушин, улыбаясь и робея, видимо, желая из своего неловкого положения перейти в шутливый тон.
Но еще он не договорил, как почувствовал, что шутка его не принята и не вышла. Он смутился.
– Извольте отправляться, – сказал штаб офицер, стараясь удержать серьезность.
Князь Андрей еще раз взглянул на фигурку артиллериста. В ней было что то особенное, совершенно не военное, несколько комическое, но чрезвычайно привлекательное.
Штаб офицер и князь Андрей сели на лошадей и поехали дальше.
Выехав за деревню, беспрестанно обгоняя и встречая идущих солдат, офицеров разных команд, они увидали налево краснеющие свежею, вновь вскопанною глиною строящиеся укрепления. Несколько баталионов солдат в одних рубахах, несмотря на холодный ветер, как белые муравьи, копошились на этих укреплениях; из за вала невидимо кем беспрестанно выкидывались лопаты красной глины. Они подъехали к укреплению, осмотрели его и поехали дальше. За самым укреплением наткнулись они на несколько десятков солдат, беспрестанно переменяющихся, сбегающих с укрепления. Они должны были зажать нос и тронуть лошадей рысью, чтобы выехать из этой отравленной атмосферы.
– Voila l'agrement des camps, monsieur le prince, [Вот удовольствие лагеря, князь,] – сказал дежурный штаб офицер.
Они выехали на противоположную гору. С этой горы уже видны были французы. Князь Андрей остановился и начал рассматривать.
– Вот тут наша батарея стоит, – сказал штаб офицер, указывая на самый высокий пункт, – того самого чудака, что без сапог сидел; оттуда всё видно: поедемте, князь.
– Покорно благодарю, я теперь один проеду, – сказал князь Андрей, желая избавиться от штаб офицера, – не беспокойтесь, пожалуйста.
Штаб офицер отстал, и князь Андрей поехал один.
Чем далее подвигался он вперед, ближе к неприятелю, тем порядочнее и веселее становился вид войск. Самый сильный беспорядок и уныние были в том обозе перед Цнаймом, который объезжал утром князь Андрей и который был в десяти верстах от французов. В Грунте тоже чувствовалась некоторая тревога и страх чего то. Но чем ближе подъезжал князь Андрей к цепи французов, тем самоувереннее становился вид наших войск. Выстроенные в ряд, стояли в шинелях солдаты, и фельдфебель и ротный рассчитывали людей, тыкая пальцем в грудь крайнему по отделению солдату и приказывая ему поднимать руку; рассыпанные по всему пространству, солдаты тащили дрова и хворост и строили балаганчики, весело смеясь и переговариваясь; у костров сидели одетые и голые, суша рубахи, подвертки или починивая сапоги и шинели, толпились около котлов и кашеваров. В одной роте обед был готов, и солдаты с жадными лицами смотрели на дымившиеся котлы и ждали пробы, которую в деревянной чашке подносил каптенармус офицеру, сидевшему на бревне против своего балагана. В другой, более счастливой роте, так как не у всех была водка, солдаты, толпясь, стояли около рябого широкоплечего фельдфебеля, который, нагибая бочонок, лил в подставляемые поочередно крышки манерок. Солдаты с набожными лицами подносили ко рту манерки, опрокидывали их и, полоща рот и утираясь рукавами шинелей, с повеселевшими лицами отходили от фельдфебеля. Все лица были такие спокойные, как будто всё происходило не в виду неприятеля, перед делом, где должна была остаться на месте, по крайней мере, половина отряда, а как будто где нибудь на родине в ожидании спокойной стоянки. Проехав егерский полк, в рядах киевских гренадеров, молодцоватых людей, занятых теми же мирными делами, князь Андрей недалеко от высокого, отличавшегося от других балагана полкового командира, наехал на фронт взвода гренадер, перед которыми лежал обнаженный человек. Двое солдат держали его, а двое взмахивали гибкие прутья и мерно ударяли по обнаженной спине. Наказываемый неестественно кричал. Толстый майор ходил перед фронтом и, не переставая и не обращая внимания на крик, говорил: