D-Bus

D-Bus
「DBus」はチベットの州については、Dbusを参照してください 計算、D-BUS(「の短いデスクトップバス」 )はメッセージ指向ミドルウェアの複数間で通信可能にするメカニズムプロセス同じマシン上で同時に実行します。 Dバスを開発したの一部としてfreedesktop.orgによって開始されたプロジェクト、ハヴォック・ペニントンからレッドハットが提供するサービスを標準化するために、Linuxの デスクトップ環境などGNOMEとKDEを。 D-Bus 開発者 Red Hat 初回リリース
2006年11月; 14年前 (2006-11)
安定したリリース
1.12.20 / 2020年7月2日 ; 7か月前  (2020-07-02)
プレビューリリース
1.13.18 / 2020年7月2日 ; 7か月前  (2020-07-02)
リポジトリ
cgit .freedesktop .org / dbus / dbus /
で書かれている C オペレーティング・システム
クロスプラットフォーム
タイプ
IPCデーモン
デスクトップ上のLinux
ライセンス
GPLv2の+またはAFL  2.1
ウェブサイト
www .freedesktop .org / wiki / Software / dbus
freedesktop.orgプロジェクトは、仕様のリファレンス実装として、libdbusと呼ばれる無料のオープンソースソフトウェアライブラリも開発しました。GDBus(GNOME)、 QtDBus(Qt / KDE)、 dbus-java など、D-Bus仕様の他の実装も存在するため、このライブラリをD-Bus自体と混同しないでおよびsd-bus(systemdの一部)。
内容
1 概要
2 D-Bus仕様
2.1 バスモデル 2.2 オブジェクトモデル 2.3 コミュニケーションモデル
3 内部
4 歴史と採用
5 実装
5.1 libdbus 5.2 GDBus 5.3 QtDBus 5.4 sd-bus 5.5 libnih-dbus 5.6 kdbus 5.7 言語バインディング
6 も参照してください
7 参考文献
8 外部リンク
概要
D-Busは、GNOMEおよびKDE Linuxデスクトップ環境(それぞれCORBAおよびDCOP)で使用されるソフトウェアコンポーネント通信システムを置き換えるために最初に設計されたIPCメカニズムです。 これらのデスクトップ環境のコンポーネントは通常、多くのプロセスに分散されており、各プロセスは少数の(通常は1つの)サービスのみを提供します。これらのサービスは、通常のクライアントアプリケーションまたはデスクトップ環境の他のコンポーネントがタスクを実行するために使用できます。
Processes without D-Bus   D-Busを使用しないプロセス
  D-Busと同じプロセス
協調するプロセスの大規模なグループは、それらの間で(1対1のIPCメソッドを使用して)個々の通信チャネルの密なメッシュを必要とします。D-Busは、単一の共有チャネルでIPC要件を簡素化します。
関係するプロセスの数が多いため(サービスを提供するプロセスとそれらにアクセスするクライアントを合計する)、それらすべての間で1対1のIPC通信を確立することは、非効率的で非常に信頼性の低いアプローチになります。代わりに、D-Busは、単一の共有仮想チャネルを介してプロセスのグループ間のすべての通信を収集するソフトウェアバスの 抽象化を提供します。バスに接続されたプロセスは、バスが内部でどのように実装されているかを知りませんが、D-Bus仕様は、バスに接続されたすべてのプロセスがバスを介して相互に通信できることを保証します。
GNU + Linuxデスクトップ環境は、特に次のように複数のバスをインスタンス化することにより、D-Bus機能を利用します。
単一のシステム・バス(によって提供さすなわちサービスシステムサービスへのアクセスを提供するすべてのユーザーとシステムのプロセスに利用できる、オペレーティングシステムの任意のシステムでも、とのデーモン)
セッション・バスと同じデスクトップセッションでユーザアプリケーションにデスクトップ・サービスを提供し、全体としてデスクトップセッションの統合を可能にする各ユーザーのログインセッション、用
プロセスは、バスへのアクセスが許可されていれば、任意の数のバスに接続できます。実際には、これは、すべてのユーザープロセスがシステムバスとその現在のセッションバスに接続できることを意味しますが、別のユーザーのセッションバス、または同じユーザーが所有する別のセッションバスに接続することはできません。後者の制限は、すべてのユーザーセッションが単一のユーザーバスに結合された場合、将来変更される可能性が
D-Busは、情報共有、モジュール性、特権分離など、アプリケーションに追加または既存の機能を簡素化します。たとえば、BluetoothまたはSkypeを介して受信した着信音声通話に関する情報は、現在実行中の音楽プレーヤーによって伝播および解釈できます。音楽プレーヤーは、音量をミュートするか、通話が終了するまで再生を一時停止することで対応できます。
D-Busは、ユーザーアプリケーションのさまざまなコンポーネントを統合するためのフレームワークとしても使用できます。たとえば、オフィススイートは、セッションバスを介して通信し、ワードプロセッサとスプレッドシートの間でデータを共有できます。
D-Bus仕様
バスモデル
バスへのすべての接続は、D-Busのコンテキストでは、いわゆるバス名によって識別されます。バス名は、ドットで区切られた2つ以上の文字、数字、ダッシュ、およびアンダースコアの文字列で構成されます。有効なバス名の例はですorg.freedesktop.NetworkManager。
プロセスがバスへの接続を設定すると、バスは接続に一意の接続名と呼ばれる特別なバス名を割り当てます。 このタイプのバス名は不変であり、接続が存在する限り変更されないことが保証されています。さらに重要なことに、バスの存続期間中は再利用できません。 これは、同じプロセスがバスへの接続を閉じて新しい接続を作成した場合でも、そのバスへの他の接続がそのような一意の接続名を割り当てることはないことを意味します。一意の接続名は、コロン文字で始まるため、簡単に識別できます。 一意の接続名の例は次のとおりです:1.1553(コロンの後の文字には特別な意味はありません)。
プロセスは、要求された名前がバスへの別の接続によってまだ使用されていない場合、その接続のために追加のバス名を要求できます。D-Busの用語では、バス名が接続に割り当てられている場合、その接続がバス名を所有していると言われます。 その意味で、バス名を2つの接続で同時に所有することはできませんが、一意の接続名とは異なり、これらの名前は、使用可能な場合は再利用できます。プロセスはバス名を再利用できます。別のプロセスによって(意図的かどうかにかかわらず)リリースされます。
これらの追加のバス名(一般に既知の名前と呼ばれる)の背後にある考え方は、事前に設定されたバス名を使用してサービスを参照する方法を提供することです。 たとえば、システムバスの現在の日時を報告するサービスは、プロセスに関係なく、接続がorg.freedesktop.timedate1バス名を所有するプロセスに
バス名は、シングルインスタンスアプリケーションを実装する簡単な方法として使用できます(2番目のインスタンスはバス名がすでに使用されていることを検出します)。プロセスの終了によりバス名が解放されるとバスが通知を送信するため、サービスプロセスのライフサイクルを追跡するためにも使用できます。
オブジェクトモデル
D-Busは、いくつかのコンポーネント指向通信システムの代替としての当初の概念により、クライアントとサービス間の通信のセマンティクスを表現するためのオブジェクトモデルを前任者と共有しています。D-Busオブジェクトモデルで使用される用語は、一部のオブジェクト指向 プログラミング言語で使用される用語を模倣しています。これは、D-Busが何らかの形でOOP言語に限定されているという意味ではありません。実際、最も使用されている実装( libdbus)は、手続き型プログラミング言語であるCで記述されています。
  D-Feetを使用して、D-Busバス内の既存のバス名、オブジェクト、インターフェイス、メソッド、および信号を参照する
D-Busでは、プロセスはオブジェクトを公​​開することでサービスを提供します。これらのオブジェクトには、呼び出すことができるメソッドと、オブジェクトが発行できるシグナルがメソッドとシグナルは、まとめてオブジェクトのメンバーと呼ばれます。バスに接続されているすべてのクライアントは、そのメソッドを使用したり、要求を行ったり、オブジェクトにアクションを実行するように命令したりすることで、オブジェクトと対話できます。たとえば、タイムサービスを表すオブジェクトは、現在の日付と時刻を返すメソッドを使用してクライアントからクエリを実行できます。クライアントは、通常は基盤となるサービスに関連する特定のイベントによって状態が変化したときにオブジェクトが発するシグナルをリッスンすることもできます。例としては、USBやネットワークドライバーなどのハードウェアデバイスを管理するサービスが「新しいハードウェアデバイスが追加されました」というイベントを通知する場合がD-Busバスは、登録された関心を持つプロセスにのみ信号を渡すため、クライアントは、特定のオブジェクトから特定の信号を受信することに関心があることをバスに指示する必要が
D-Busバスに接続されたプロセスは、必要な数のD-Busオブジェクトをエクスポートするように要求できます。各オブジェクトは、オブジェクトパス、スラッシュ文字で区切られ、接頭辞が付いた数字、文字、アンダースコアの文字列によって識別されます。これは、Unixファイルシステムパスに類似しているため、スラッシュ文字と呼ばれます。 オブジェクトパスは要求プロセスによって選択され、そのバス接続のコンテキストで一意である必要が有効なオブジェクトパスの例はです/org/kde/kspread/sheets/3/cells/4/5。ただし、オブジェクトパス内に階層を形成することは強制されていませんが、推奨されサービスのオブジェクトの特定の命名規則は、完全にそのようなサービスの開発者次第ですが、多くの開発者は、プロジェクトの予約済みドメイン名をプレフィックスとして使用して名前空間を付けることを選択します(例:
/ org / kde)。
すべてのオブジェクトは、エクスポートされた特定のバス接続に密接に関連付けられており、D-Busの観点からは、そのような接続のコンテキストでのみ存在します。したがって、特定のサービスを使用できるようにするには、クライアントは、目的のサービスを提供するオブジェクトパスだけでなく、サービスプロセスがバスに接続されているバス名も示す必要がこれにより、バスに接続された複数のプロセスが、同一のオブジェクトパスを持つ異なるオブジェクトを明確にエクスポートできるようになります。
オブジェクトで使用できるメンバー(メソッドとシグナル)は、インターフェイスによって指定されます。インターフェースは似ドットで区切られた名前によって識別される(その通過及び戻りパラメータを含む)メソッドの宣言と(そのパラメータも含む)信号の集合であり、Java言語インターフェース表記。 有効なインターフェース名の例はorg.freedesktop.Introspectable。です。それらの類似性にもかかわらず、インターフェース名とバス名は間違えられるべきではありません。D-Busオブジェクトは複数のインターフェイスを実装できますが、少なくとも1つを実装する必要があり、それによって定義されるすべてのメソッドとシグナルをサポートします。オブジェクトによって実装されるすべてのインターフェースの組み合わせは、オブジェクトタイプと呼ばれます。
オブジェクトを使用する場合、クライアントプロセスがメンバーの名前に加えてメンバーのインターフェイス名を提供することをお勧めしますが、オブジェクトによって実装されたさまざまなインターフェイスから利用できる重複したメンバー名によってあいまいさが生じる場合にのみ必須です —それ以外の場合、選択されたメンバーは未定義またはエラーです。一方、放出された信号は、それがどのインターフェイスに属しているかを常に示す必要が
D-Bus仕様では、独自のインターフェイスに加えて、オブジェクトが実装する可能性のあるいくつかの標準インターフェイスも定義されています。技術的にはオプションですが、ほとんどのD-Busサービス開発者は、イントロスペクションなどの重要な追加機能をD-Busクライアントに提供するため、エクスポートされたオブジェクトでそれらをサポートすることを選択します。これらの標準インターフェースは次のとおりです。
org.freedesktop.DBus.Peer:D-Bus接続が有効かどうかをテストする方法を提供します。
org.freedesktop.DBus.Introspectable:クライアントプロセスが実行時に、オブジェクトが実装するインターフェイス、メソッド、およびシグナルの説明(XML形式)を取得できるイントロスペクションメカニズムを提供します。
org.freedesktop.DBus.Properties:D-Busオブジェクトが、基になるネイティブオブジェクトのプロパティまたは属性を公​​開したり、存在しない場合はそれらをシミュレートしたりできるようにします。
org.freedesktop.DBus.ObjectManager:D-Busサービスがオブジェクトを階層的に配置する場合、このインターフェイスは、単一のメソッド呼び出しを使用して、パスの下にあるすべてのサブオブジェクト、およびそれらのインターフェイスとプロパティについてオブジェクトにクエリを実行する方法を提供します。 。
D-Bus仕様では、org.freedesktop.DBusバス名にある/ org / freedesktop / DBusオブジェクトを使用して実行されるいくつかの管理バス操作(「バスサービス」と呼ばれる)が定義されて
います
。各バスは、この特別なバス名をそれ自体のために予約し、バス名とオブジェクトパスのこの組み合わせに対して特別に行われた要求を管理します。バスによって提供される管理操作は、オブジェクトのインターフェースorg.freedesktop.DBusによって定義されたもの
です。これらの操作は、たとえば、バスのステータスに関する情報を提供するために、または追加の既知のバス名の要求と解放を管理するために使用されます。
コミュニケーションモデル
D-Busは、一般的な高レベルのプロセス間通信システムとして考案されました。このような目標を達成するために、D-Bus通信は、「生のバイト」ではなく、プロセス間のメッセージ交換に基づいています。 D-Busメッセージは、プロセスがバスを介して別の接続されたプロセスに送信できる高レベルの個別のアイテムです。メッセージは明確に定義された構造を持っており(ペイロードで運ばれるデータのタイプも定義されています)、バスがメッセージを検証し、不正な形式のメッセージを拒否できるようにします。この点で、D-Busは、独自の型定義システムと独自のマーシャリングを備えた、従来のIPCメカニズムよりもRPCメカニズムに近いです。
  D-Busを介してメソッドを呼び出すための1対1の要求/応答メッセージ交換の例。ここで、クライアントプロセスは、バス内のorg.example.foo(または
)という名前のサービスプロセスから/ org / example / object1オブジェクト
のSetFoo()メソッドを
呼び出します :1.14
バスは、クライアントとサービスプロセス間でメッセージを交換する2つのモードをサポートしています:
1対1の要求/応答:これは、クライアントがオブジェクトのメソッドを呼び出す方法です。クライアントはオブジェクトをエクスポートするサービスプロセスにメッセージを送信し、サービスはクライアントプロセスにメッセージで応答します。クライアントによって送信されるメッセージには、オブジェクトパス、呼び出されたメソッドの名前(およびオプションでそのインターフェイスの名前)、およびオブジェクトの選択されたインターフェイスによって定義された入力パラメータの値(存在する場合)が含まれている必要が応答メッセージには、オブジェクトのメソッド呼び出しによって返される出力パラメーターの値や、エラーが発生した場合の例外情報など、要求の結果が含まれます。
パブリッシュ/サブスクライブ:これは、オブジェクトがシグナルの発生を関係者に通知する方法です。オブジェクトのサービスプロセスは、バスがオブジェクトの信号にサブスクライブしている接続されたクライアントにのみ通過するというメッセージをブロードキャストします。メッセージには、オブジェクトパス、シグナルの名前、シグナルが属するインターフェイス、およびシグナルのパラメータの値(存在する場合)が含まれます。通信は一方向です。送信者は受信者のIDも数も知らないため、クライアントプロセスからの元のメッセージに対する応答メッセージはありません。
すべてのD-Busメッセージは、ヘッダーと本文で構成されています。ヘッダーは、メッセージのタイプ、送信者、およびメッセージを受信者に配信するために必要な情報(宛先バス名、オブジェクトパス、メソッドまたは信号名、インターフェイス名など)を識別するいくつかのフィールドで構成されます。 )。 本文には、レシーバープロセスが解釈するデータペイロード(入力引数や出力引数など)が含まれています。すべてのデータは、整数や浮動小数点数、文字列、複合型などのさまざまな型のシリアル化をサポートするワイヤー形式と呼ばれるよく知られたバイナリ形式でエンコードされます。マーシャリングとも呼ばれます。
D-Bus仕様は、ワイヤープロトコル、つまりD-Bus接続内のプロセス間で交換されるD-Busメッセージを作成する方法を定義します。ただし、これらのメッセージを配信するための基本的な転送方法は定義され
内部
ほとんどの既存のD-Bus実装は、リファレンス実装のアーキテクチャに従います。このアーキテクチャは、次の2つの主要コンポーネントで構成されています。
2つのプロセス間でメッセージを交換するためにD-Busワイヤプロトコルを実装するポイントツーポイント通信ライブラリ。リファレンス実装では、このライブラリはlibdbusです。他の実装では、
libdbusは別の高レベルのライブラリ、言語バインディングによってラップされるか、同じ目的を果たす別のスタンドアロン実装によって完全に置き換えられる場合がこのライブラリは、2つのプロセス間の1対1の通信のみをサポートします。
 
D-Busメッセージバスデーモンとして機能する
dbus-daemonプロセス。バスに接続されているすべてのプロセスは、1つのD-Bus接続を維持します。
バスの役割を果たし、残りのプロセスがD-Busポイントツーポイント通信ライブラリを使用して接続する特別なデーモンプロセス。このプロセスは、として知られているメッセージ・バス・デーモン、 、それは別のバスに接続された任意のプロセスからのメッセージをルーティングする責任があるからです。リファレンス実装では、この役割はdbus-daemonによって実行されます。dbus -daemon自体はlibdbusの上に構築されてい
ます。メッセージバスデーモンの別の実装は、sd-busの上に構築されたdbus-brokerです。
  プロセスAとBは、Unixドメインソケットを介してlibdbusを使用して1対1のD-Bus接続を
行います。彼らはそれを使ってメッセージを直接交換することができます。 このシナリオでは、バス名は必要ありません。
  プロセスAとBはどちらも、Unixドメインソケットを介してlibdbusを使用
してdbusデーモンに接続されてい
ます。メッセージを交換してメッセージバスプロセスに送信すると、メッセージバスプロセスが適切なプロセスにメッセージを配信します。このシナリオでは、宛先プロセスを識別するためにバス名が必須です。
libdbusのライブラリー(またはその等価物)は、内部D-バス接続の両端に2つのプロセス間に必要なD-BUSメッセージを転送するネイティブ下位IPCメカニズムを使用します。D-Bus仕様では、サポートするトランスポート方法を決定するのは通信ライブラリであるため、どの特定のIPCトランスポートメカニズムを使用できるかを義務付けたとえば、LinuxおよびUnixライクなオペレーティングシステムでは、
libdbusは通常Unixドメインソケットを基盤となるトランスポートメソッドとして使用しますが、TCPソケットもサポートします。
両方のプロセスの通信ライブラリは、選択した転送方法と、通信に使用される特定のチャネルについて合意する必要がこの情報は、D-Busがアドレスと呼ぶものによって定義されます。 Unixドメインソケットはファイルシステムオブジェクトであるため、ファイル名で識別できるため、有効なアドレスはunix:path=/tmp/.hiddensocket。になります。 両方のプロセスは、それらの間のD-Bus接続を確立するために、それぞれの通信ライブラリに同じアドレスを渡す必要がアドレスは、コンマ区切りのkey=valueペアの形式で通信ライブラリに追加データを提供することもできます。 このようにして、たとえば、それをサポートする特定のタイプの接続に認証情報を提供できます。
dbus- daemonのようなメッセージバスデーモンを
使用してD-Busバスを実装する場合、バスに接続するすべてのプロセスは、バスアドレス(プロセスが中央へのD-Bus接続を確立できるアドレス)を知っている必要がメッセージバスプロセス。 このシナリオでは、メッセージバスデーモンがバスアドレスを選択し、残りのプロセスはその値を対応するlibdbusまたは同等のライブラリに渡す必要があり dbus-daemonは、提供するバスインスタンスごとに異なるバスアドレスを定義します。これらのアドレスは、デーモンの構成ファイルで定義されています。
2つのプロセスはD-Bus接続を使用してそれらの間で直接メッセージを交換できますが、これはD-Busが通常使用されることを意図した方法ではありません。通常の方法は、各プロセスがポイントツーポイントのD-Bus接続を確立する必要がある通信の中心点として、常にメッセージバスデーモン(つまり、dbus-daemon)を使用することです
。プロセス(クライアントまたはサービス)がD-Busメッセージを送信すると、メッセージバスプロセスは最初にそれを受信し、適切な受信者に配信します。メッセージバスデーモンは、受信者プロセスへのD-Bus接続を介してメッセージを繰り返すことにより、各メッセージを宛先に到達させることを担当するハブまたはルーターと見なすことができます。受信者プロセスは、メッセージのヘッダーフィールドの宛先バス名によって、または信号伝播メッセージの場合はメッセージバスデーモンによって維持される信号へのサブスクリプション情報によって決定されます。メッセージバスデーモンは、存在しないバス名にメッセージを送信したプロセスへのエラーメッセージなど、特定の条件への応答として独自のメッセージを生成することもできます。
dbus-daemonは、D-Bus自体がすでに提供している機能セットを追加機能で改善します。たとえば、サービスのアクティブ化により、必要に応じて、つまりそのようなサービスのバス名に対する最初の要求がメッセージバスデーモンに到着したときに、サービスを自動的に開始できます。このように、サービスプロセスは、システムの初期化またはユーザーの初期化の段階で起動する必要も、使用されていないときにメモリやその他のリソースを消費する必要もありません。この機能は元々setuidヘルパーを使用して実装されていましたが、現在ではsystemdのサービスアクティベーションフレームワークによって提供することもできます。サービスのアクティブ化は、サービスのプロセスライフサイクルの管理を容易にする重要な機能です(たとえば、デスクトップコンポーネントを開始または停止するタイミング)。
歴史と採用
D-Busは、Havoc Pennington、Alex Larsson(Red Hat)、AndersCarlssonによって2002年に開始されました。バージョン1.0(API安定版と見なされます)は2006年11月にリリースされました。
  dbusのデーモンは、最近のLinuxで重要な役割を果たしている
グラフィカルなデスクトップ環境。
KDEのバージョン2および3で使用されているDCOPシステムの影響を強く受けた、D-BusはKDE4リリースでDCOPに取って代わりました。 D-Busの実装は、ほとんどのPOSIXオペレーティングシステムをサポートしており、Windows用のポートが存在します。Qt4とGNOMEで使用されます。GNOMEでは、以前のBonoboメカニズムのほとんどの部分が徐々に置き換えられています。Xfceでも使用されます。
初期の採用者の1つは、(現在は非推奨の)ハードウェアアブストラクションレイヤーでした。HALは、D-Busを使用して、コンピューターに追加またはコンピューターから削除されたハードウェアに関する情報をエクスポートしました。
D-Busの使用は、デスクトップ環境の当初の範囲を超えて着実に拡大しており、ますます多くのシステムサービスをカバーしています。たとえば、NetworkManagerネットワークデーモン、BlueZ Bluetoothスタック、PulseAudioサウンドサーバーは、D-Busを使用してそのサービスの一部またはすべてを提供します。systemdに用途Dバスとの間の通信のためのワイヤプロトコルsystemctlとシステムD、またなどD-バスサービスへの伝統的なシステムデーモン、促進さlogindを。 D-Busのもう1つのヘビーユーザーは、システムバスに接続されたサービスとしてポリシー権限デーモンが実装されているPolkitです。
また、ホームオートメーション用のAllJoynプロトコルのワイヤープロトコルとしても使用されます。この目的のために、AllJoynは、検出、セッション管理、セキュリティ、ヘッダー圧縮、組み込みデバイスのサポートを追加し、トランスポートに依存しないようにします。
実装 libdbus D-Busにはいくつかの実装がありますが、最も広く使用されているのは、仕様を設計したのと同じfreedesktop.orgプロジェクトによって開発されたリファレンス実装libdbusです。ただし、libdbusは低レベルの実装であり、アプリケーション開発者が直接使用することを意図したものではなく、D-Busの他の再実装(デスクトップ環境の標準ライブラリやプログラミング言語バインディングに含まれるものなど)のリファレンスガイドとして使用されます。 )。freedesktop.orgプロジェクト自体は、アプリケーションの作成者が代わりに「より高いレベルのバインディングまたは実装の1つを使用する」ことを推奨しています。最も使用されているD-Bus実装としてのlibdbusの優位性により、「D-Bus」と「libdbus」という用語がしばしば同じ意味で使用され、混乱を招きました。 GDBus GDBus は、GLibに含まれているGIOストリームに基づくD-Busの実装であり、GTK +およびGNOMEでの使用を目的としています。GDBusはlibdbusのラッパーではありませんが、D-Busの仕様とプロトコルの完全で独立した再実装です。 MATE Desktop およびXfce(バージョン4.14)もGTK + 3に基づいており、GDBusも使用します。 QtDBus QtDBus は、バージョン4.2以降のQtライブラリに含まれているD-Busの実装です。このコンポーネントは、システムで利用可能なD-Busサービスにアクセスするために、KDEアプリケーション、ライブラリ、およびコンポーネントによって使用されます。 sd-bus 2013年、systemdプロジェクトはコードを簡素化するためにlibdbusを書き直しましたが、D-Bus全体のパフォーマンスも大幅に向上しました。予備的なベンチマークで、BMWはsystemdのD-Busライブラリがパフォーマンスを360%向上させることを発見しました。のバージョン221でsystemdに、SD-バスAPIは安定したと宣言しました。 libnih-dbus libnihプロジェクトは、D-BusのCサポートの軽量な「標準ライブラリ」を提供します。さらに、クロスコンパイルを適切にサポートします。 kdbus   kdbusは、キャラクターデバイスドライバーとして実装されています。
プロセス間のすべての通信は、の特殊文字デバイスノードを介して行われます
/dev/kdbus(devfsを参照 )。 kdbusは、カーネルを介したピアツーピアのプロセス間通信メカニズムとしてD-Busを再実装することを目的としたプロジェクトでした。パフォーマンスの向上に加えて、kdbusには、名前空間や監査などの他のLinuxカーネル機能、 カーネルの仲介によるセキュリティ、競合状態の解消、起動時とシャットダウン時のD-Busの使用を可能にすることから生じる利点があります( systemdで必要)。のLinuxカーネル内kdbus含めることは、論争の証明との賛成で滴下したBUS1より一般的なように、プロセス間通信。
言語バインディング
Java、C#、Rubyなど、D-Bus用のプログラミング言語バインディングがいくつか開発されています。
も参照してください

 無料のオープンソースソフトウェアポータル
デスクトップ上のLinux
共通言語基盤
Common Object RequestBrokerアーキテクチャ
コンポーネントオブジェクトモデル
分散コンポーネントオブジェクトモデル
外部関数インターフェース
Javaリモートメソッド呼び出し
リモートプロシージャコール XPCOM 参考文献
^ 「D-Bus1.12.x変更ログ」。
^ 「現在のブランチのNEWSファイル」。
^ Havocのブログ2007年7月
^ ワード、ブライアン(2004)。「14:Linuxデスクトップの簡単な調査」。Linuxのしくみ:すべてのスーパーユーザーが知っておくべきこと(2版)。サンフランシスコ:ノースターチプレス(2014年公開)。p。305. ISBN  9781593275679。Linuxデスクトップから生まれる最も重要な開発の1つは、メッセージパッシングシステムであるデスクトップバス(D-Bus)です。D-Busは、デスクトップアプリケーションが相互に通信できるようにするプロセス間通信メカニズムとして機能するため重要です。
^ a b c d e f g h i j k l m n o p q r s t u Vermeulen、Jeroen(2013年7月14日)。「D-Busの紹介」。FreeDesktop.org 。取得した22年10月2015。
^ a b c d e f g h i j k l m n o p q r s t コカーニュ、トム。「DBusの概要」。pythonhosted.org 。取得した22年10月2015。
^ Vermeulen、Jeroen(2013年7月14日)。「D-Busの紹介」。FreeDesktop.org 。検索された10月3日に2015。D-Bus は、メインの無料デスクトップ環境の下にある統合ミドルウェアレイヤーとして使用するように設計されています。
^ a b c パルミエリ、ジョン。「D-BUSに乗る」。Red HatMagazine。2015年10月23日にオリジナルからアーカイブされました。取得した3年11月2015。
^ a b “”gdbus””。GNOME開発者。
^ a b “”QtDBusモジュール””。Qtプロジェクト。
^ 「DBus-Javaドキュメント」。FreeDesktop.org 。
^ ポッターリング、レナート(2015年6月19日)。「systemdの新しいsd-busAPI」。取得した21年10月2015。
^ ペニントン、ハボック; ウィーラー、デビッド; ウォルターズ、コリン。「D-Busチュートリアル」。取得した21年10月2015。デスクトップセッション内のユースケースの場合、GNOMEおよびKDEデスクトップには、CORBAやDCOPなどのさまざまなIPCソリューションに関する重要な経験がD-Busはその経験に基づいて構築されており、特にこれらのデスクトッププロジェクトのニーズを満たすように注意深く調整されています。
^ Vermeulen、Jeroen(2013年7月14日)。「D-Busの紹介」。FreeDesktop.org 。検索された10月3日に2015。D-Busは、GNOMEデスクトップ環境の基盤となるCORBAのようなコンポーネントモデルを置き換えるために最初に構築されました。DCOP(KDEで使用される)と同様に、D-BusはGNU / Linuxおよびその他のプラットフォームの主要な無料デスクトップ環境の標準コンポーネントになるように設定されています。
^ a b c d e f g h i j k l m ペニントン、ハボック; カールソン、アンダース; ラーソン、アレクサンダー; ハーズバーグ、スヴェン; McVittie、Simon; ツォイテン、デビッド。「D-Bus仕様」。Freedesktop.org 。取得した22年10月2015。
^ ac ad ae af ag ah ai Pennington、Havoc; ウィーラー、デビッド; ウォルターズ、コリン。「D-Busチュートリアル」。取得した21年10月2015。
^ ポッターリング、レナート(2015年6月19日)。「systemdの新しいsd-busAPI」。取得した21年10月2015。私たちは、ユーザーがたまたまログインした回数に関係なく、システム上のユーザーごとに1つしかない真のユーザーバスに物事を移動することに取り組んでいます。
^ a b 愛、ロバート(2005年1月5日)。「D-BUSに乗る」。LinuxJournal。取得した14年10月2014。
^ 「D-Busとは何ですか?」。FreeDesktop.org 。取得した29年10月2015。C#、Java、Rubyなどの言語用のD-Busプロトコルの再実装もいくつかこれらはlibdbusリファレンス実装を使用しません
^ a b 「D-Busとは?」。FreeDesktop.org 。取得した29年10月2015。一般的な1対1のメッセージパッシングフレームワークの上に構築されており、任意の2つのアプリで直接通信するために使用できます(メッセージバスデーモンを経由せずに)
^ 「D-BUSシステムアクティベーション」。FreeDesktop.org 。取得した18年2月2016。
^ パルミエリ、ジョン(2006年11月9日)。「D-Bus1.0.0「BlueBird」発売」。dbus(メーリングリスト)。
^ a b モルケンティン、ダニエル(2006年11月12日)。「D-Bus1.0「ブルーバード」発売」。KDEニュース。取得した3年11月2015。
^ セイゴ、アーロン。「D-BUS入門」。KDETechBase 。取得した3年11月2015。
^ ポッターリング、レナート(2015年6月19日)。「systemdの新しいsd-busAPI」。取得した21年10月2015。systemdの開始以来、インターフェースを公開するのはIPCシステムでした。
^ 「Polkitリファレンスマニュアル」。FreeDesktop.org 。取得した3年11月2015。
^ 「アーカイブされたコピー」。アーカイブされたオリジナルの2015年7月21日に。
CS1 maint:タイトルとしてアーカイブされたコピー(リンク)
^ 「D-Busとは何ですか?」。FreeDesktop.org 。低レベルの実装は、主にアプリケーションの作成者が使用するように設計されむしろ、それは著者を拘束するための基礎であり、再実装のための参照です。それが可能な場合は、より高いレベルのバインディングまたは実装の1つを使用することをお勧めします。
^ 「GDBusへの移行」。GNOME開発者。取得した21年10月2015。dbus-glibはlibdbusリファレンス実装を使用しますが、GDBusは使用しません。代わりに、トランスポート層としてGIOストリームに依存し、D-Bus接続のセットアップと認証のための独自の実装が
^ 「MATE:ロードマップ」。
^ ポッターリング、レナート(2013年3月20日)。「 libsystemd-bus + kdbusplans」。systemd-devel(メーリングリスト)。
^ a b エッジ、ジェイク(2013年5月30日)。「ALS:Linuxプロセス間通信とkdbus」。LWN.net 。取得した21年10月2015。
^ ポッターリング、レナート(2015年6月19日)。「 systemdv221」。systemd-devel(メーリングリスト)。
^ 「kdbusの除幕式」。LWN.net。2014-01-13。
^ 「Documentation / kdbus.txt(初期パッチセットから)」。LWN.net。2014-11-04。
^ コルベット、ジョナサン(2014年1月13日)。「kdbusの除幕式」。LWN.net 。取得した11年4月2014。
^ Kroah-Hartman、Greg(2015年4月13日)。”” kdbus for4.1-rc1″”。linux-kernel(メーリングリスト)。
^ コルベット、ジョナサン(2015年4月22日)。「kdbuswreck」。LWN.net 。検索された29年6月2015年。
^ 「基調講演:LinuxFoundationフェローのGregKroah-Hartmanとの炉辺談話」。YouTube。2016年10月18日。
^ 「D-Busバインディング」。FreeDesktop.org 。
外部リンク
Freedesktop.orgのD-Busホームページ
D-Bus仕様
Freedesktop.orgwikiのD-Busの紹介
D-Busチュートリアル
DBusの概要”

投稿日:
カテゴリー: D