dbus-send - メッセージ・バスにメッセージを送信する
dbus-send [ --system | --session | --bus=ADDRESS | --peer=ADDRESS ] [--sender=NAME] [--dest=NAME] [ --print-reply [=literal]] [--reply-timeout=MSEC] [--type=TYPE] OBJECT_PATH INTERFACE.MEMBER [CONTENTS...]
dbus-send コマンドを使って D-Bus メッセージ・バスにメッセージを送信することができる。全体像について詳しく知りたければ https://www.freedesktop.org/wiki/Software/dbus/ を見よ。
周知のメッセージ・バス(well-known message buses)が2つ存在する:システム全体から使えるメッセージ・バス(「メッセージ・バス」サービスとして多くのシステムにインストールされている)とユーザ・ログイン・セッション毎のメッセージ・バス(ユーザがログインする度に起動される)である。オプション「--system」あるいは「--session」を指示として与えると、dbus-send はメッセージをシステム・バスあるいはセッション・バスへ送信するようになる。どちらも指定しなかった場合、dbus-send はセッション・バスへ送信する。
dbus-send のほとんど全ての用法では引数 --dest を指定する必要がある。この引数はメッセージの送信先となる、バス上の「接続」の名前を表す。--dest の指定を省略した場合、宛先は一切設定されない。
送信するメッセージのオブジェクト経路と名前を常に指定しなければならない(訳註:「名前」とはインターフェイス名とメンバ名をピリオドで繋げたもの)。以下の引数が存在する場合、それはメッセージの内容(メッセージの引数)である(訳註:dbus-send コマンドの引数ではなく d-bus メッセージの引数である)。この引数は、型の指定を伴う値から成り、以下に示すようにコンテナ型(配列型、辞書型、ヴァリアント型)を含んでいても良い。
<contents> ::= <item> | <container> [ <item> | <container>...]
<item> ::= <type>:<value>
<container> ::= <array> | <dict> | <variant>
<array> ::= array:<type>:<value>[,<value>...]
<dict> ::= dict:<type>:<type>:<key>,<value>[,<key>,<value>...]
<variant> ::= variant:<type>:<value>
<type> ::= string | int16 | uint16 | int32 | uint32 | int64 | uint64 | double | byte | boolean | objpath
D-Bus ではこれ以外の型も使用できるが、dbus-send では今のところ使用できない。また、dbus-send では空のコンテナや入れ籠型のコンテナ(例えばヴァリアントの配列)も使用できない。
dbus-send の使用例を挙げる:
dbus-send --dest=org.freedesktop.ExampleName \
/org/freedesktop/sample/object/name \
org.freedesktop.ExampleInterface.ExampleMethod \
int32:47 string:'hello world' double:65.32 \
array:string:"1st item","next item","last item" \
dict:string:int32:"one",1,"two",2,"three",3 \
variant:int32:-8 \
objpath:/org/freedesktop/sample/object/name
インターフェイスはドット「.」を挟んでメソッドやシグナルと繋がっているが、実際のプロトコルではインターフェイスとそのメンバとは別個のフィールドであることに注意。
以下のオプションを使用することができる:
--dest=NAMEメッセージを受信する接続の名前を指定する。
--print-reply送ったメッセージに対するリプライ(返答)を受け取るまで待機し(block)、受信したリプライを人間が読める形で表示する。また、このオプションを指定するとメッセージ型(--type=)に method_call を指定したことになる。
--print-reply=literal送ったメッセージに対するリプライ(返答)を受け取るまで待機し(block)、リプライの本体を表示する。リプライの内容がオブジェクト経路や文字列である場合、それらを句読記号やエスケープ文字無しで文字通りに表示する。
--reply-timeout=MSEC最大 MSEC ミリ秒だけリプライを待ち受ける。デフォルト値は実装次第であるが、大抵は 25 秒である(訳註:dbus-dbus-1.16/dbus/dbus-connection-internal.h:48行目「#define _DBUS_DEFAULT_TIMEOUT_VALUE (25 * 1000)」)。
--systemシステムのメッセージ・バスへ送信する。
--sessionセッションのメッセージ・バスへ送信する。(これがデフォルトである。)
--bus=ADDRESSADDRESS のアドレスを持つメッセージ・バス(大抵は dbus-daemon)に登録する。
--peer=ADDRESSADDRESS のアドレスを持つ、メッセージ・バスでない D-Bus サーバに送信する。この場合、dbus-send は Hello メソッドを呼び出さない。
--sender=NAMEメッセージを送信する前に名前 NAME の所有権を要求する。dbus-send が終了した時、この名前は解放される。
--type=TYPEmethod_call か signal を指定する(デフォルト値は「signal」である)。