「Qtの基礎 - D-Bus」の版間の差分

ナビゲーションに移動 検索に移動
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>


案内メニュー