Начал перевод учебника по D-Bus. Осталось 2 части. Если есть желание помочь или пофиксить переводы:
git clone git@gitorious.org:ruby-dbus-doc-russian/mainline.git
Пишите на mi@antono.info
Это учебник по Ruby D-Bus, библиотеке обеспечивающей доступ к возможностям D-Bus для ваших программ на Ruby. Введение состоит из следующих секций:
Что такое D-Bus?
Определения
D-Bus это протокол RPC(Remote Procedure Call). Обычно в системе запущено несколько D-Bus демонов которые направляют вызовы и сигналы в форме сообщений. Каждый такой демон имеет шину. Шина обычно используется в современных десктопах и доступна в рамках сессии под названием шина сессии (session bus). Другая шина, которая может быть доступна всей системе называется системная шина (systen bus). Её использует например демон Hardware Abstraction Layer. Нужно отметить, что D-Bus RPC протокол может быть использован без системной шины или шины сессии. Однако я никогда не встречал такого использования.
На уровне десктопа D-Bus позволяет взаимодейстовать некоторым компонентам. D-Bus вам нужен если вы пишите приложение или скрипт, который должен взаимодействовать с вашим веб-браузером, музыкальным плейером или просто должен вывести нотификацию.
На системном уровне Hardware Abstraction Layer это привелигированный демон который уведомляет другие программы об активности аппаратуры. Обычно если вы хотите быть уведомлены о вставленном в CD-ROM диске, или если вы хотите исследовать аппаратуру, вам нужен этот системный демон.
Система D-Bus RPC как мы увидим объектно ориентирована.
Шины предоставляют доступ к сервисам предоставленным запущенными или готовыми к запуску программами. Позвольте мне объяснить некоторые термины до того как мы обсудим API для Ruby D-Bus.
Клиент D-Bus это процесс, который соединяется с D-Bus. Он вызывает метод и регистрируется на шине для приема сигналов и событий.
Присоединенный клиент может экспортировать некоторые свои обекты и позволяет другим клиентам вызвывать их методы. Такие клиенты обычно регистрируют специальное имя (например org.freedesktop.Notifications) - имя сервиса.
Существуют различные типы сервисов. Они предоставляются процессом, который запускает D-Bus по запросу. С тех пор как сервис запущен он регистрирует имя сервиса и ведет себя как любой другой клиент.
Нужно отметить что шины сами по себе предоставляют сервис org.freedesktop.DBus и некоторые возможности через него.
Путь к объекту это путь D-Bus используемый для определения адреса экземпляра объекта. Сервис может предоставлять разные экземпляры объектов внешнему миру таким образом внешние процессы могут вызывать методы в каждом из них. Путь к объекту - это адрес экземпляра очень похожий на путь к файлу на файловой системе. Например /org/freedesktop/Notification - это путь к объекту предоставленному сервисом org.freedesktop.Notification.
Внимание: имена сервисов и пути к объектам могут: но не должны быть связаны. Вы возможно наткнетесь на большое количество программ, где путь к объекту повторяет имя сервиса с косыми чертами вместо точек.
Обычно в объектной модели класс реализует интерфейс. В этом случае класс - это определения методов сгруппированные в интерфейс. Это в точности то, что представляет из себя D-Bus. Интерфейсы D-Bus имеют имена. Эти имена должны быть указаны при вызове методов.
Сервис org.freedesktop.Notification предоставляет экземпляр объекта с именем /org/freedesktop/Notification. Этот экземпляр объекта реализует интерфейс с именем org.freedesktop.Notifications, он же предоставляет два специальных специфичных для D-Bus интерфейса: org.freedesktop.DBus.Introspect и org.freedesktop.DBus.Properties. Еще раз, пути к объектам, имена сервисов и имена интерфейсов могут, но не должны быть одинаковыми.
В простейшем случае org.freedesktop.DBus.Introspect имеет метод Introspect, который возвращает XML-данные, описывающие объект /org/freedesktop/Notification. Этот метод активно используется в D-Bus (и ruby-dbus).
Метод означает метод в его классическом понимании. Это функция, которая вызывается в контексте экземпляра объекта. Метод имеет типизированные параметры (аргументы) и типизированные значения которые он может возвращать.
Сигналы - это упрощенные вызовы методов, которые не возвращают значений. Однако они имеют типизированные параметры (аргументы).
Вызовы методов, возвращаемые значения, сигналы, ошибки: все это закодированно в виде D-Bus сообщений и передается по шине. Сообщения состоят из заголовков пакета с адресами источника и назначения, типом (вызов метода, ответ после вызова, сигнал) и тела, содержащего параметры (для сигналов и вызовов метода) или возвращаемые значения (для возвращеемых методами значений).
D-Bus типизирован и динамичен и поэтому каждое сообщение приходит с сигнатурой, которая описывает типы данных которые содержатся в сообщении. Сигнатура - это строка с предельно простым описанием типов данных. Вам понадобится немнго знаний о том как выглядит сигнатура если вы захотите создать свой сервис. Если вы программируете D-Bus клиент, вы можете обойтись без этих знаний.
Спасибо, давно хотел начать разбираться с DBus, ибо привык скриптить десктоп с DCOP…
“реализовывает” Может, реализует?
поправил, спасибо