さまざまなマシンにサービスを提供するサーバー(C)を作成しています。インターネットを介したリモートプロシージャコールにD-Busを使用したいのですが、D-Busは多くのマシンでは使用できず、1台のマシンで使用できると聞きました。そうですか?この状況でD-Busを使用できますか?
3 に答える
短い答えはイエスです。これは可能です。dbus は異なるマシン間で使用できます (ただし、以下のセキュリティ警告を参照してください)。
サーバーでは、dbus-daemon 構成ファイル (システム バスやセッション バスを再利用するのではなく、サービスのためだけに他のバス全体をセットアップすることをお勧めします) は、ローカル ソケット経由ではなく、TCP 経由で接続を受け入れるように構成する必要があります。/tmp
. 十分に文書化されているdbus-daemon で適切なリッスン コマンドを設定するためのいくつかのトリックがあります。
さらに、ローカルの dbus-daemon を変更できない場合 (または、リモート ソケットをリッスンしない、RHEL で配布されている古い壊れたバージョンの dbus-daemon を使用せざるを得ない場合)、dbus-daemonというアプリケーションを実行できます。 -proxyソケットをリッスンし、接続をローカルの dbus-daemon に転送します。
いずれにしても、クライアント マシンでDBUS_SESSION_BUS_ADDRESS変数を設定して、dbus-daemon またはプロキシ サーバーがリッスンしている IP アドレスとポートを設定する必要があります。
セキュリティ上の警告: ネットワーク上のデータは暗号化されず、dbus アクセス メカニズムはローカル接続にのみ適用され、TCP 接続には適用されません。TCP トランスポート メカニズムを使用する dbus 接続を適切に保護するには、少し作業が必要です。
dbus-daemon の実装については確かなことは言えませんが、ワイヤ プロトコルの観点から次のシナリオが考えられます。
1) マシン A と B がメッセージを交換し、どちらも tcp 経由でサーバー C の dbus バス デーモンに接続できるようにする必要があります。C にとって、それらは接続名によって識別される単なる「接続org.freedesktop.DBus.Hello
」org.freedesktop.DBus.RequestName
です。 '
2) マシン A はマシン B に接続し、ピアツーピア (メッセージ バスなし) モードを使用してメッセージを交換します。