<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
	<id>http://lorwiki.zhbert.ru/index.php?action=history&amp;feed=atom&amp;title=D-Bus</id>
	<title>D-Bus - История изменений</title>
	<link rel="self" type="application/atom+xml" href="http://lorwiki.zhbert.ru/index.php?action=history&amp;feed=atom&amp;title=D-Bus"/>
	<link rel="alternate" type="text/html" href="http://lorwiki.zhbert.ru/index.php?title=D-Bus&amp;action=history"/>
	<updated>2026-10-13T00:43:36Z</updated>
	<subtitle>История изменений этой страницы в вики</subtitle>
	<generator>MediaWiki 1.39.0</generator>
	<entry>
		<id>http://lorwiki.zhbert.ru/index.php?title=D-Bus&amp;diff=37&amp;oldid=prev</id>
		<title>Admin: 1 версия импортирована</title>
		<link rel="alternate" type="text/html" href="http://lorwiki.zhbert.ru/index.php?title=D-Bus&amp;diff=37&amp;oldid=prev"/>
		<updated>2023-02-27T18:39:13Z</updated>

		<summary type="html">&lt;p&gt;1 версия импортирована&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;ru&quot;&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Предыдущая версия&lt;/td&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Версия от 21:39, 27 февраля 2023&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-notice&quot; lang=&quot;ru&quot;&gt;&lt;div class=&quot;mw-diff-empty&quot;&gt;(нет различий)&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>http://lorwiki.zhbert.ru/index.php?title=D-Bus&amp;diff=36&amp;oldid=prev</id>
		<title>lor&gt;Cetjs2: Откат правок 163.172.227.165 (обсуждение) к версии Mandala</title>
		<link rel="alternate" type="text/html" href="http://lorwiki.zhbert.ru/index.php?title=D-Bus&amp;diff=36&amp;oldid=prev"/>
		<updated>2018-05-13T08:31:43Z</updated>

		<summary type="html">&lt;p&gt;Откат правок &lt;a href=&quot;/index.php/%D0%A1%D0%BB%D1%83%D0%B6%D0%B5%D0%B1%D0%BD%D0%B0%D1%8F:%D0%92%D0%BA%D0%BB%D0%B0%D0%B4/163.172.227.165&quot; title=&quot;Служебная:Вклад/163.172.227.165&quot;&gt;163.172.227.165&lt;/a&gt; (&lt;a href=&quot;/index.php?title=%D0%9E%D0%B1%D1%81%D1%83%D0%B6%D0%B4%D0%B5%D0%BD%D0%B8%D0%B5_%D1%83%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA%D0%B0:163.172.227.165&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new&quot; title=&quot;Обсуждение участника:163.172.227.165 (страница не существует)&quot;&gt;обсуждение&lt;/a&gt;) к версии &lt;a href=&quot;/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:Mandala&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new&quot; title=&quot;Участник:Mandala (страница не существует)&quot;&gt;Mandala&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Новая страница&lt;/b&gt;&lt;/p&gt;&lt;div&gt;'''D-Bus''' — это система межпроцессного взаимодействия, которая предоставляет приложениям несколько шин для передачи сообщений. Она обеспечивает беспроблемную связь десктопных приложений между собой и связь между десктопными приложениями и системными сервисами.&lt;br /&gt;
Поддерживается не только широковещательная рассылка сообщений (сигналов), но и удалённый вызов методов.&lt;br /&gt;
&lt;br /&gt;
Некоторые системные сервисы, например как [[HAL]] или WPA Supplicant, предоставляют соответствующие D-Bus сервисы на системной шине сообщений, таким образом мы можем с ними общаться с помощью любого D-Bus клиента.&lt;br /&gt;
&lt;br /&gt;
== Основные понятия ==&lt;br /&gt;
&lt;br /&gt;
* '''Системная шина (System bus)''' — данная шина создается при старте сервера D-Bus. К данной шине подключены системные сервисы (HAL, NetworkManager, bluez, WPA Supplicant...). На этой шине работают сервисы, которые нельзя отнести к какой-то определённой пользовательской сессии, и которые относятся к системе в целом.&lt;br /&gt;
* '''Сессионная шина (Session bus)''' — данная шина создается на каждый вход пользователя в систему. К данной шине подключаются приложения залогинившегося пользователя, через нее проходит общение программ запущенных в данной рабочей сессии пользователя&amp;lt;ref&amp;gt;Это надо полностью переписать.&amp;lt;/ref&amp;gt;.&lt;br /&gt;
* '''Имя на шине (Bus name), Имя сервиса (Service name)''' — каждая программа, подключенная к шине получает свое уникальное имя, которое начинается с двоеточия (&amp;quot;:&amp;quot;). Если использовать аналогию с сетью, то это - IP адрес. Однако связь через IP адрес не очень удобна, поэтому используются доменные имена. Также и в D-Bus — приложение может взять несколько дополнительных имен, чтобы другие программы смогли связываться. Имя сервиса представляет собой набор из символов, разделенных точками (&amp;quot;.&amp;quot;). Пример: сервис имеет реальное имя &amp;quot;:1.5&amp;quot;, и символьное представление - &amp;quot;org.freedesktop.NetworkManager&amp;quot;. Мы можем подсоединится и к &amp;quot;:1.5&amp;quot; и к &amp;quot;org.freedesktop.NetworkManager&amp;quot; - это один и тот же сервис. Создавать или нет символьное представление имени каждый клиент решает самостоятельно.&lt;br /&gt;
* '''Путь к объекту (Object path)''' — представляет собой путь к некому объекту внутри адресуемого сервиса. Если продолжать аналогию с сетью, то путь к объекту — это &amp;quot;/wiki&amp;quot; в адресе http://linux.org.ru/wiki. Пример: &amp;quot;/org/freedesktop/NetworkManager/Device/eth0&amp;quot;. Сервис может обслуживать несколько объектов. &lt;br /&gt;
* '''Интерфейс (Interface)''' — каждый объект предоставляет доступ к некоторому набору методов и сигналов, который называется интерфейсом. При этом один объект может предоставлять несколько интерфейсов, которые не накладываются друг на друга. Пример: &amp;quot;org.freedesktop.NetworkManager.Device.Wireless&amp;quot;.&lt;br /&gt;
* '''Метод (Method)''' — некоторое действие, которое может производить объект в данной программе на данном интерфейсе. Аналогично функциям с языке Си, метод может вернуть набор некоторых данных, код ошибки, либо может вообще не возвращать данных (void).&lt;br /&gt;
* '''Сигнал (Signal)''' — некоторое сообщение, которое распространяется среди всех программ, подписанных на этот сигнал на этом интерфейсе данного объекта данной программы. Сигналы могут содержать набор данных.&lt;br /&gt;
* '''Сообщение (Message)''' — каждая передача данных на шине представляется в виде сообщений. Они могут быть 4х типов: вызовы методов, сигналы, результаты методов, ошибки.&lt;br /&gt;
* '''Прокси-объект (Proxy object)''' — объект языка программирования (C++, Python, Java), вызовы методов которого проецируются на вызовы методов D-Bus. &amp;lt;ref&amp;gt;Добавить свойства&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Отметим также, что архитектура сервис-объект-интерфейс свойственна многим компонентым системам типа COM, XPCOM, CORBA и т.д.&lt;br /&gt;
== Принципы работы ==&lt;br /&gt;
&lt;br /&gt;
=== Соединение с шиной ===&lt;br /&gt;
&lt;br /&gt;
После соединения с шиной приложение, которое создаёт на шине новый сервис, получает уникальный идентификатор для соединения в рамках шины. Также любой D-Bus сервис может присвоить себе дополнительное, более понятное имя (например, ru.org.linux.trollhouse). Этот механизм схож с созданием символьных ссылок на файловой системе - у вас может быть один реальный файл и несколько ссылок на него с разными именами. Имя сервиса, автоматически создаваемое для него системой D-Bus, имеет вид &amp;quot;:X.Y&amp;quot;, где X и Y - компоненты, определяющие уникальность данного сервиса, обычно числа, например &amp;quot;:1.5&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Следующим шагом при инициализации приложения является установка фильтров, указывающих, какие сообщения приложением принимаются. Фильтровать можно по типу сообщения (signal, method_call), отправителю (sender), интерфейсу, пути к объекту и имени метода.&lt;br /&gt;
&lt;br /&gt;
Затем задаются обработчики сигналов и методов (будет рассмотрено ниже).&lt;br /&gt;
&lt;br /&gt;
Пример на Tcl:&lt;br /&gt;
&amp;lt;pre&amp;gt;:&lt;br /&gt;
package require dbus 0.7&lt;br /&gt;
&lt;br /&gt;
proc processMethodCall {info thing} {&lt;br /&gt;
    puts &amp;quot;Method call: $info&amp;quot;&lt;br /&gt;
    puts &amp;quot;Argument: $thing&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    return &amp;quot;$thing ne nuzhno!&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
set conn [ dbus::connect session ]&lt;br /&gt;
puts &amp;quot;Connection ID: $conn&amp;quot;&lt;br /&gt;
&lt;br /&gt;
dbus name session &amp;quot;ru.org.linux.trollhouse&amp;quot;&lt;br /&gt;
&lt;br /&gt;
dbus filter session add -interface ru.org.linux.Troll -member SaySomething -path /troll&lt;br /&gt;
dbus register session /troll processMethodCall&lt;br /&gt;
&lt;br /&gt;
vwait forever&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Тестирование:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
dbus-send --session --dest=ru.org.linux.trollhouse --type=method_call --print-reply /troll ru.org.linux.Troll.SaySomething string:KDE&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Рассылка сигналов ===&lt;br /&gt;
&lt;br /&gt;
Сигнал с точки зрения шины представляет собой сообщение с destination=NULL, т.е. которое надо доставить всем (с учётом фильтров, разумеется).&lt;br /&gt;
&lt;br /&gt;
Пример:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
package require dbus 0.7&lt;br /&gt;
&lt;br /&gt;
dbus connect session&lt;br /&gt;
dbus name session ru.org.linux.trollhouse&lt;br /&gt;
dbus signal session \&lt;br /&gt;
    -signature si \&lt;br /&gt;
    /troll ru.org.linux.troll.Eat NeedSugar \&lt;br /&gt;
    &amp;quot;I want more sugar!&amp;quot; 2&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Получение сигналов от HAL при появлении/извлечении устройства:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
package require dbus 0.7&lt;br /&gt;
&lt;br /&gt;
proc processDeviceAddRemove {info udi} {&lt;br /&gt;
    if {[ dict get $info member ] == &amp;quot;DeviceAdded&amp;quot;} {&lt;br /&gt;
        puts &amp;quot;Device added: $udi&amp;quot;&lt;br /&gt;
    } else {&lt;br /&gt;
        puts &amp;quot;Device removed: $udi&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
dbus connect system&lt;br /&gt;
foreach member {DeviceAdded DeviceRemoved} {&lt;br /&gt;
    dbus filter system add \&lt;br /&gt;
        -sender org.freedesktop.Hal \&lt;br /&gt;
        -interface org.freedesktop.Hal.Manager \&lt;br /&gt;
        -member $member \&lt;br /&gt;
        -type signal \&lt;br /&gt;
        -path /org/freedesktop/Hal/Manager&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
dbus register system \&lt;br /&gt;
    /org/freedesktop/Hal/Manager processDeviceAddRemove&lt;br /&gt;
&lt;br /&gt;
vwait forever&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=== Удалённый вызов методов ===&lt;br /&gt;
&lt;br /&gt;
Вызов метода состоит из отправки двух сообщений:&lt;br /&gt;
* Сообщение с типом method_call и аргументами функции.&lt;br /&gt;
* Сообщение с типом method_result или error, содержащее результат исполнения метода. В случае, если у исходного сообщения выставлен флаг noreply, ответ не посылается. При этом у ответного сообщения поле replyserial устанавливается в значение поля serial исходного сообщения, чтобы вызывающий смог определить, какой ответ к какому вызову метода относится.&lt;br /&gt;
&lt;br /&gt;
Исходя из вышеописанного, существует два способа удалённого вызова методов через D-Bus: синхроннный (вызывающий процесс блокируется до прихода ответа) и асинхронный (ответ обрабатывается по мере получения).&lt;br /&gt;
&lt;br /&gt;
Пример синхронного вызова:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
package require dbus 0.7&lt;br /&gt;
&lt;br /&gt;
dbus connect session&lt;br /&gt;
dbus call session \&lt;br /&gt;
    -dest ru.org.linux.trollhouse \&lt;br /&gt;
    -signature s \&lt;br /&gt;
    /troll ru.org.linux.Troll SaySomething \&lt;br /&gt;
    &amp;quot;Gnome&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Пример асинхронного вызова:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
package require dbus 0.7&lt;br /&gt;
&lt;br /&gt;
proc resultHandler {info result} {&lt;br /&gt;
    if {[ dict get $info messagetype ] == &amp;quot;error&amp;quot;} {&lt;br /&gt;
        puts &amp;quot;Unable to speak to troll: $result&amp;quot;&lt;br /&gt;
    } else {&lt;br /&gt;
        puts &amp;quot;Troll says: $result&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
dbus connect session&lt;br /&gt;
dbus call session \&lt;br /&gt;
    -dest ru.org.linux.trollhouse \&lt;br /&gt;
    -handler resultHandler \&lt;br /&gt;
    -signature s \&lt;br /&gt;
    /troll ru.org.linux.Troll SaySomething \&lt;br /&gt;
    &amp;quot;Gnome&amp;quot;&lt;br /&gt;
&lt;br /&gt;
vwait forever&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Пример асинхронной обработки вызова метода:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
package require dbus 0.7&lt;br /&gt;
&lt;br /&gt;
proc processMethodCall {info thing} {&lt;br /&gt;
    puts &amp;quot;Method call: $info&amp;quot;&lt;br /&gt;
    puts &amp;quot;Argument: $thing&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    set bus session&lt;br /&gt;
    set dest [ dict get $info sender ]&lt;br /&gt;
    set serial [ dict get $info serial ]&lt;br /&gt;
    if [ string match -nocase $thing unix ] {&lt;br /&gt;
        # возврат ошибки&lt;br /&gt;
        set action [ list dbus error $bus $dest $serial &amp;quot;UNIX rulez!&amp;quot; ]&lt;br /&gt;
    } else {&lt;br /&gt;
        # возврат результата&lt;br /&gt;
        set action [ list dbus return $bus $dest $serial &amp;quot;$thing is not needed!&amp;quot; ]&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    # специально вставим задержку, чтобы показать неблокирующий режим работы&lt;br /&gt;
    after 10000 $action&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
set conn [ dbus::connect session ]&lt;br /&gt;
puts &amp;quot;Connection ID: $conn&amp;quot;&lt;br /&gt;
&lt;br /&gt;
dbus name session &amp;quot;ru.org.linux.trollhouse&amp;quot;&lt;br /&gt;
&lt;br /&gt;
dbus filter session add -interface ru.org.linux.Troll -member SaySomething -path /troll&lt;br /&gt;
dbus register session -async \&lt;br /&gt;
    /troll processMethodCall&lt;br /&gt;
&lt;br /&gt;
vwait forever&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=== Стандартные интерфейсы ===&lt;br /&gt;
&lt;br /&gt;
Существует несколько предопределенных интерфейсов, использование которых может быть полезно многим программам&amp;lt;ref&amp;gt;ЩИТО?&amp;lt;/ref&amp;gt;&amp;lt;ref&amp;gt;[http://dbus.freedesktop.org/doc/dbus-specification.html#standard-interfaces Второе предложение в первом абзаце]&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==== Интроспекция ====&lt;br /&gt;
&lt;br /&gt;
Почти все библиотеки для работы с dbus позволяют автоматически генерировать методы для интроспекции (кроме низкоуровневых вроде libdbus или dbus-tcl).&lt;br /&gt;
&lt;br /&gt;
Для того, чтобы получить информацию о методах, сигналах и свойствах, надо вызвать метод Introspect из интерфейса org.freedesktop.DBus.Introspectable. Результат отдаётся в виде строки, которая представляет собой XML документ. Этот документ содержит корневой элемент типа node. Под ним располагаются элементы типов interface (содержащие описание реализуемых интерфейсов; имя интерфейса хранится в атрибуте name) и элементы типа node, указывающие, что в дереве объектов есть объекты ниже данного (атрибут name показывает, что надо дописать к пути, чтобы туда достучаться).&lt;br /&gt;
&lt;br /&gt;
Описание интерфейса содержит элементы типа method (имя задаётся в атрибуте name), signal и property. Внутри каждого из этих элементов находится произвольное количество элементов типа arg, обозначающих аргументы функции или сигнала.&lt;br /&gt;
&lt;br /&gt;
Атрибуты: name --- имя параметра (может отсутствовать), direction --- направление (in --- аргументы метода, out --- возвращаемое значение; только для методов), type --- тип элемента (например: i, s, as...).&lt;br /&gt;
&lt;br /&gt;
Пример:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ qdbus --system org.freedesktop.Hal / org.freedesktop.DBus.Introspectable.Introspect&lt;br /&gt;
&amp;lt;!DOCTYPE node PUBLIC &amp;quot;-//freedesktop//DTD D-BUS Object Introspection 1.0//EN&amp;quot;&lt;br /&gt;
&amp;quot;http://www.freedesktop.org/standards/dbus/1.0/introspect.dtd&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;node&amp;gt;&lt;br /&gt;
  &amp;lt;interface name=&amp;quot;org.freedesktop.DBus.Introspectable&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;method name=&amp;quot;Introspect&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;arg name=&amp;quot;data&amp;quot; direction=&amp;quot;out&amp;quot; type=&amp;quot;s&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;/method&amp;gt;&lt;br /&gt;
  &amp;lt;/interface&amp;gt;&lt;br /&gt;
  &amp;lt;node name=&amp;quot;org&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/node&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table style=&amp;quot;vertical-align:middle;padding:8px;margin:10px 50px 10px 50px;border:1px solid yellow;&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
        &amp;lt;td&amp;gt;&amp;lt;b&amp;gt;TODO&amp;lt;/b&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;td&amp;gt;пример с интроспекцией&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Свойства ====&lt;br /&gt;
&lt;br /&gt;
Для работы со свойствами существует интерфейс org.freedesktop.DBus.Properties, у которого определены 3 метода: Get(in STRING interface_name, in STRING property_name, out VARIANT value), Set(in STRING interface_name, in STRING property_name, in VARIANT value) и GetAll(in STRING interface_name, out DICT&amp;lt;STRING,VARIANT&amp;gt; props);&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table style=&amp;quot;vertical-align:middle;padding:8px;margin:10px 50px 10px 50px;border:1px solid yellow;&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
        &amp;lt;td&amp;gt;&amp;lt;b&amp;gt;TODO&amp;lt;/b&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;td&amp;gt;пример&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== org.freedesktop.DBus.Ping ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table style=&amp;quot;vertical-align:middle;padding:8px;margin:10px 50px 10px 50px;border:1px solid yellow;&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
        &amp;lt;td&amp;gt;&amp;lt;b&amp;gt;TODO&amp;lt;/b&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;td&amp;gt;описать&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Ссылки ==&lt;br /&gt;
&lt;br /&gt;
*[http://dbus.freedesktop.org/doc/dbus-tutorial.html D-Bus tutorial]&lt;br /&gt;
*[http://dbus.freedesktop.org/doc/dbus-python/doc/tutorial.html D-Bus python tutorial]&lt;br /&gt;
*[http://dbus-tcl.sourceforge.net/ D-Bus bindings for Tcl] содержит также высокоуровневый биндинг dbus-intf.&lt;br /&gt;
*[http://code.google.com/p/dbus-snit Высокоуровневая привязка к объектной системе Snit для Tcl]&lt;br /&gt;
*[http://doc.trolltech.com/4.4/intro-to-dbus.html Привязки к Qt4]&lt;br /&gt;
*[http://dbus.freedesktop.org/doc/dbus-specification.html D-Bus Specification]&lt;br /&gt;
&lt;br /&gt;
== Отладочные утилиты ==&lt;br /&gt;
&lt;br /&gt;
* dbus-send&amp;lt;ref&amp;gt;Поддерживает не все типы данных. По этому с её помощью нельзя к примеру открыть всплывающую подсказку [http://ubuntuforums.org/showthread.php?t=959664 Подробности→]&amp;lt;/ref&amp;gt; и dbus-listen из комплекта dbus&lt;br /&gt;
* qdbus из пакета libqt-dbus. В отличие от dbus-send использует интроспекцию, поэтому не требует указания типов аргументов и позволяет просматривать объекты на шине.&lt;br /&gt;
* qdbusviewer из пакета qt4-dev-tools. Отображает иерархию объектов на шине графически, показывает методы, сигналы и свойства (properties). Позволяет с ними работать.&lt;br /&gt;
* d-feet из одноимённого пакета. Позиционируется как d-bus отладчик.&lt;br /&gt;
== Сноски ==&lt;br /&gt;
&lt;br /&gt;
По мере исправления сноски необходимо удалять.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Системное ПО]]&lt;br /&gt;
[[Category:Программирование]]&lt;/div&gt;</summary>
		<author><name>lor&gt;Cetjs2</name></author>
	</entry>
</feed>