D-Bus入門(序)——d-bus公式紹介


オンライン抜粋
D-Busは、デスクトップアプリケーションのプロセス間の通信メカニズム、いわゆるIPC(inter-processcommunication)メカニズムに実質的に適している.Linuxプラットフォームで生まれたのはfreedesktopです.orgプロジェクトの一部を開発しました.Linuxデスクトップに浸透しました.Qt 4,GNOME,WindowsおよびMaemoで実装されている.KDE 4では有名なDCOPに取って代わり、GNOMEでは重いBonoboに取って代わった.組み込みシステムではC/S構造を実現するためによく用いられる.
現在、多くのIPC(interprocess communication)があり、異なるソリューションに使用されています.CORBAは、オブジェクトプログラミングにおける複雑なIPC向けの強力なソリューションです.DCOPは軽量級のIPCフレームワークであり、機能は少ないが、Kデスクトップ環境にうまく統合できる.SOAPおよびXML−RPCは、Webサービスのために設計されているので、その伝送プロトコルとしてHTTPを使用する.D-Busは、デスクトップアプリケーションとOS通信用に設計されています.D-Bus(Dは元々デスクトップ「Desktop」を意味する)とは、デスクトップオペレーティングシステム用の通信バスである.現在では組み込みシステムに導入されつつあるが,名前は元の呼び方を残しているだけである.
典型的なデスクトップでは、複数のアプリケーションが実行され、互いに通信する必要があることがよくあります.DCOPはKDE用のソリューションですが、Qtに依存するため、他のデスクトップ環境では使用できません.同様に,BonoboはGNOME用の解であるが,CORBAに基づくため非常に重い.GObjectにも依存するため、GNOME以外にも使用できません.D-Busの目標は、DCOPとBonoboを簡単なIPCに置き換え、この2つのデスクトップ環境を統合することです.D-Busに必要な依存性を最小限に抑えることができるため、他のD-Busを使用する可能性のあるアプリケーションでは依存性の導入を心配する必要はありません.他のIPCに比べて、D-Busは不要で複雑なものをなくした.そのため、D-Busは比較的速く、簡単である.D-Busは下位層のIPCと直接競争しない.例えば、sockets、shared memory or messagequeues.これらの低層点のIPCには独自の特徴があり、D-Busと衝突していない.
リンクをクリックしてネットの紹介を見て、以下は本人の翻訳で、ほとんど見なくてもいいです.
概要-DBUS公式ドキュメント
README
d-busは簡潔なプロセス間通信と協調のシステムである.
d-busの調整能力はdbusの特色であり、次のようなデーモンプロセスを提供します.
あるプログラムに通知し、他のプログラムはすでに終了した.
必要に応じてサービスを開始します.
single-instanceプログラムをサポートする.
libdbusはD-busの核心概念であり、low-level APIの部分に属する.多くのプログラマーはGlib,Qt,Pythonのようなインタフェースを使用します.これらのインタフェースは、main D-busパッケージとは別にメンテナンスが完了しています.main D-busパッケージには、low-level libdbus、bus daemon、およびd-bus launchなどのcommand-lineツールが含まれています.
dbus-specification.html
dbusは低遅延で低コストで使いやすいIPCメカニズムです.低遅延はround tripsを回避し,非同期動作を可能にするように設計されているためである.低コストは、XMLのようなtextフォーマットに変換する必要がなく、バイナリプロトコルを使用するため、dbusはコストマシン通信を設計され、興味深い最適化です.dbusはメッセージベースなので使いやすいです.
dbusのコアプロトコルはone-to-oneプロトコル(peer-to-peerまたはclient-server)です.これは単一プログラムと単一プログラムが通信するメカニズムです.
dbusはシステムハードウェアの変更、デスクトップのインタラクションに使用できます.
dbus-tutorial.html
What is D-Bus? d-busは、構造的に分類された通信メカニズムを参照するプロセスです.
  libdbus
  messages bus daemon
wrapperまたはbindings
libdbusはone-to-oneのみをサポート
bus daemonはメッセージを受け入れ、適切な時に適切なプログラムに伝えることをサポートします.
within-desktop-session:GNOMEとKDEのIPCソリューションの経験を継承し、それらの特色を維持しています.
システム層とOSとの通信:hotplug通知イベントの解決
非同期バイナリプロトコル
安定で信頼性が高い
メッセージ・バスはデーモン・プロセスです
実現方法を定める
二モード-ネットワークリソース
D-BUSの内部動作方式
D-BUS設定は、いくつかのバスで構成されます.ブート時に起動する永続的なシステムバス(system bus)があります.このバスはオペレーティングシステムとバックグラウンドプロセスによって使用され、任意のアプリケーションがシステムイベントを騙すことができないようにセキュリティが非常に良い.ユーザーがログインした後に起動し、そのユーザープライベートに属するセッションバスもたくさんあります.これは、ユーザーのアプリケーションが通信するためのセッションバスです.もちろん、アプリケーションがシステムバスからのメッセージを受信する必要がある場合は、システムバスに直接接続するほうがいいですが、送信可能なメッセージは制限されます.
アプリケーションがバスに接続されると、マッチングを追加することで、どのメッセージを受信するかを宣言する必要があります.マッチングは、インタフェース、オブジェクトパス、およびメソッドに基づいて受信できるメッセージのルールのセット(後述)を指定します.これにより、アプリケーションは、メッセージの効率的なルーティングを実現するために、処理したいコンテンツの処理に集中し、バス上のメッセージの予想数を維持し、これらのメッセージによってすべてのアプリケーションのパフォーマンスが低下し、遅くなることがないようにすることができる.
Dbusには2つのAPIインタフェースがあり、1つはDBUSを直接使用するlow-levelAPIであり、1つはBindingを使用し、Bindingsには異なるタイプがあり、PERL Binding、PYTHON Binding、GLIBBindingなどがある.ここでは主にGLIB bindingの使用に注目する.low-level APIとは異なり、GLIB bindingはGLIBOBJECTのローカルイベント(native signal)とDbusイベントのバインドを完了することができる
使用例
D-BUSは比較的新しいが、迅速に採用された.前述したように、D−BUSサポートを有するudevは、ホットプラグデバイスの場合に信号を送信することができるように構築することができる.どのアプリケーションでも、これらのイベントをリスニングし、受信したときにアクションを実行できます.例えば、gnome-volume-managerは、USBメモリロッドの挿入を検出し、自動的にマウントすることができる.あるいは、デジタルカメラを挿入すると、自動的に写真をダウンロードすることができます.
もっと面白いが実用的でない例はJamboreeとRingalingの結合である.Jamboreeは簡単な音楽プレーヤーで、D-BUSインタフェースを備えており、次の曲への再生、音量の変更などを知らせることができます.Ringalingは、/dev/ttyS 0(シリアルポート)を開き、受信した内容を観察する小さなプログラムです.Ringalingがテキスト「RING」を発見すると、D-BUSでJamboreeに音量を減らすように伝えます.最終的には、コンピュータにモデムが挿入され、電話のベルが鳴ると、音楽の音量が減少します.これはまさにコンピュータが追求しているのです!
3つの例では、d-busの基礎概念-ネットワークリソースについて説明します.
最後にこの文章を見てみましょう
http://blog.csdn.net/fmddlmyy/article/details/3585730
Bus Name
Bus Nameは接続の名前として理解できます.Bus Nameは常にアプリケーションとメッセージバスの接続を表します.Bus Nameには共通名(well-known names)と一意名(Unique Connection Name)の2つの役割があります.
共通名は、「org.fmddlmyy.Test」、「org.bluez」など、いくつかのドットで区切られた複数の小文字フラグで構成されています.
アプリケーションがメッセージバスに接続されると、メッセージバスは各アプリケーションに一意の名前を割り当てます.一意の名前は「:」で始まり、「:」の後には通常、「:1.0」などの円点で区切られた2つの数値が表示されます.
ある接続は唯一の名前で、公衆名はありません.これらの名前は、パブリック名でアクセスできるサービスが提供されていないため、プライベート接続と呼ぶことができます.d-feetインタフェースには、プライベート接続を非表示にする「Hide Private」ボタンがあります.
Object Paths Bus Nameは、メッセージ・バスに適用される接続を特定します.1つのアプリケーションに複数のサービスを提供するオブジェクトがあります.これらのオブジェクトはツリー構造で組織されています.各オブジェクトには一意のパス(Object Paths)があります.あるいは、1つのアプリケーションでは、1つのオブジェクトパスが一意のオブジェクトを示す.
Interfaces
MethodsおよびSignalsインタフェースは、方法および信号を含む.
標準インタフェース「org.freedesktop.Dbus.Introspectable」のIntrospectメソッドは有用な方法です.Javaの反射インタフェースと同様に、Introspectメソッドを呼び出すと、インタフェースのxml記述を返すことができます.「Execute」ボタンを直接クリックします.
小結
クライアントのCコードでは、dbus_を使用すると同じ手順が表示されます.g_bus_getはセッションbusへの接続を得る.この接続にdbus_を使うg_proxy_new_for_name関数は、指定された共通名の接続を持つ指定されたオブジェクトの指定されたインタフェースのエージェントを取得します.最後にdbus_でg_proxy_call関数は、インタフェースエージェントを介してインタフェースが提供する方法を呼び出す.