13,005
回編集
(→バス) |
|||
32行目: | 32行目: | ||
== D-Busの基礎 == | == D-Busの基礎 == | ||
==== D-Busとは ==== | |||
D-Busは、<u>メッセージ</u>を<u>オブジェクト</u>に届ける仕組みである。<br> | D-Busは、<u>メッセージ</u>を<u>オブジェクト</u>に届ける仕組みである。<br> | ||
メッセージはデータであり、オブジェクトはデータの受け手であるプログラムのことである。<br> | メッセージはデータであり、オブジェクトはデータの受け手であるプログラムのことである。<br> | ||
45行目: | 46行目: | ||
<br> | <br> | ||
オブジェクトは、<u>サービス</u>に内包された<u>操作対象を指す名前</u>である。<br> | オブジェクトは、<u>サービス</u>に内包された<u>操作対象を指す名前</u>である。<br> | ||
<br> | |||
==== D-Busサービス名とは ==== | |||
D-Busにおけるサービス名は、サービス提供プロセスがD-Busサーバに接続する時に登録する名前のことである。<br> | |||
"org.freedesktop.DBus"や"org.bluez"等のように、<code>.(コロン)</code>区切りの文字列(慣習として、サービスプログラム開発元の公式ドメイン)が使用される。<br> | |||
<br> | |||
※注意<br> | |||
D-Busサービス名は、<u>バス名</u>、<u>コネクション名</u>等、異なる名前で呼ばれる場合もある。<br> | |||
D-Busの仕様としては、<u>バス名</u>が正式名称であり、名前を明示的に指定したバス名を<u>サービス名</u>と呼ぶこともある。<br> | |||
<br> | |||
プロセスはサービス名を明示せずに、D-Busサーバに接続することも可能である。<br> | |||
この場合、":1.128"のようにD-Busサーバが適当に生成した数字の羅列が割り当てられる。<br> | |||
<br> | |||
==== D-Busオブジェクトとは ==== | |||
オブジェクトは、バス名(D-Busサービス名)に対して送られるメッセージに含まれる、そのバス名(D-Busサービス名)内におけるメッセージの宛先である。<br> | |||
<code>/</code>から始まり、<code>/(スラッシュ)</code>区切りの文字列で表記されており、これを、<u>オブジェクトパス</u>、あるいは、<u>パス名</u>、<u>パス</u>と呼ぶこともある。<br> | |||
<br> | |||
慣習として、パス名は、サービス名の<code>.</code>を<code>/</code>に置き換えた接頭辞(プレフィックス)を持たせる。<br> | |||
<br> | |||
例えば、BlueZのbluetoothデーモンは、サービス名org.bluezを持つが、BlueZのオブジェクトは/org/bluez/hci0のような名前である。<br> | |||
HCIインターフェースを複数持つシステムの場合、/org/bluez/hci1、/org/bluez/hci2のようなオブジェクト名により、どのインターフェースに対するメッセージかを識別することになる。<br> | |||
<br> | |||
サービスが持つオブジェクトの一覧は、イントロスペクト(Introspect)という機能により検索することができる。<br> | |||
例えば、BlueZ 5のサービスに対して、<code>dbus-send</code>コマンドを実行する。<br> | |||
dbus-send --print-reply --system --dest=org.bluez / --type=method_call org.freedesktop.DBus.Introspectable.Introspect | |||
# 出力例 | |||
...略 | |||
</interface><node name="org"/></node>" | |||
<br> | |||
上記の出力例のように、出力された<node name="org"/>の項目は、以下に示す内容を意味する。<br> | |||
# バス名(D-Busサービス名)<code>org.bluez</code>のD-Busオブジェクト<code>/</code>に対して、 | |||
# 手続きメッセージ<code>org.freedesktop.DBus.Introspectable.Introspect</code>を送信した時、 | |||
# <code>/</code>の下には<code>org</code>というオブジェクトがあるというメッセージを受信した。 | |||
<br><br> | <br><br> | ||