dbus


dbus

概要

  • dbus 自体は,IPC と RMI を実現するためのプロトコル(実装?)
  • 主にデスクトップアプリケーション間(GNOME, KDE, etc)で利用されることを想定している.
    • よって,TCP/IP 越しでのメッセージパッシングは想定外.
    • したい場合は,magic cookie と呼ばれる鍵のようなものをサーバ,クライアント双方で利用しなければならない.これは,NFS でホームディレクトリを共有していると言う想定のもの.
  • C言語で記述されている.
  • さまざまな言語にマッピングされていて,マッピング言語の方から利用するのが一般的.
    • glib, python, c++, java, etc …

オブジェクト

native object and object path

  • native object は,各言語のオブジェクトを指す.GObject, java.lang.Object, etc.
  • 他の言語からオブジェクトをマッピングできるように,dbus 内で名前を付けている.
    • /org/kde/kspread/sheets/3/cells/4/5
  • 名前の最初の方はドメイン名にでもしとけ,とチュートリアル.

methods and signals

  • dbus において,オブジェクトは必ずメソッドとシグナル(GUIプログラミングの時のイベントに相当)を持つ.
    • method はオブジェクトに対して適用可能な操作.
    • signal はオブジェクトから他のオブジェクトに対するマルチキャスト(原文はbroadcasts from the object to any interested observers…)

Interfaces

  • method と signal をまとめたもの
    • org.freedesktop.Introspectable
  • ほとんどの実装では,これらの名前をそれぞれの言語のインタフェースに直接マッピングする.

bus names

  • com.mycompany.TextEditor のような名前で外部アプリケーションから参照される名前.
  • bus name は内部的に一意な番号で管理される.
  • : で始まる.ex) :34-907 数字に意味なし.
  • 名前の所有者が管理されている.
    • ホスト内において同一アプリケーションの複数動作を回避するために利用できる.

address

  • dbus daemon にアクセスするためのアドレス.
    • unix domain, tcp/ip でもなんでもよし.
  • unix 環境では後述の dbus-launch によって設定する.

dbus-glib

dbus related commands

dbus-daemon

  • アプリケーション間メッセージを中継するためのデーモン
  • システムワイドデーモンと,セッションデーモンの 2 種類.
    • システムワイドデーモン:アプリケーション全てにブロードキャストする.
      • udev の実装とかに使われているのかな?
    • セッションデーモン:アプリケーション同士のメッセージパッシングに利用される.自分でアプリケーションを書く場合は基本的にこれを利用する.

dbus-luanch

  • dbus-daemon を利用する環境を整えるためのコマンド
    1. dbus-daemon に対するアドレスを環境変数にセットする.
    2. dbus-daemon が起動してなければ,起動する.
    • dbus を利用するアプリケーションは,起動時に,要求する bus name を持つ dbus-daemon が起動しているかを探索する(この時X11を要求してくるため,コマンドライン上では動作しないことがある).発見できた場合,その dbus-daemon のアドレス(デフォルトだと unix domain socket name)を取得し,アプリケーションが実行されたシェルの環境変数にセットする.

備考

ネットワーク越しの利用

  • 基本的に TCP/IP は利用不可能.
  • Havoc というメインの人が強烈に嫌がっているので,dbus-daemon にその機能が統合されることはなさそう.
  • 一応,conf ファイルに tcp を指定する部分があるが,socket credential が共有できる環境(ホームディレクトリが NFS で共有されているとか)でなければ意味なし.
  • FreeBSD だと,tcp は全く動作せず(2008/09/10現在)
    • dbus-sysdeps-unix.c において,INET ソケットに対して credential を読もうとしているが,FreeBSD では許可されていない.credential を利用している限りは解決しないので,しばらくは無理かと思う.

dbus-launch の使い方

  • コマンドラインプログラミングで,サーバとクライアントを利用する場合は,以下のような流れにするべき.
dbus-launch --sh-syntax
  • でアプリケーションが利用する用の dbus-daemon を起動.同時にプリントされた環境変数を書き留めておく.次に,サーバプログラムを起動するシェルで環境変数をセットし,起動.次に,クライアントプログラムを起動するシェルで環境変数をセットし,起動.
dbus.txt · 最終更新: 2012/11/14 14:00 by 127.0.0.1
文書の先頭へ
Driven by DokuWiki Recent changes RSS feed Valid CSS Valid XHTML 1.0