DCOP(Desktop Communication Protocol)は、
ソフトウェアコンポーネント間やプロセス間での効率的な通信を目的とした、軽量な
プロセス間通信システムです。このシステムは、複数のアプリケーションが連携して複雑なタスクを実行できるように設計されており、特にアプリケーションの「遠隔制御」に重点が置かれています。DCOPを利用することで、あるアプリケーションやスクリプトから別のアプリケーションの機能を呼び出すことが可能になります。
DCOPは、
X Window Systemのクライアント間通信プロトコルを基盤として構築されています。これにより、開発者は新しいアプリケーションをゼロから作成することなく、既存のアプリケーションに新しい機能を追加できます。特に
KDE(K Desktop Environment)環境ではDCOPが広く活用されており、多くの
KDEアプリケーションはDCOPのインターフェースを通じてスクリプトから制御できます。
KDEシステムでは、アプリケーションがDCOPを明示的に利用していなくても、基本的なDCOPインターフェースが自動的に提供されます。例えば、すべてのアプリケーションには「quit」コマンドによるアプリケーションの終了機能がデフォルトで備わっています。
DCOPを活用する際には、コマンドラインツールである`dcop`や、GUIツールである`kdcop`が利用できます。これらを使用することで、アプリケーションと
シェルとの間で通信が可能です。例えば、
KDEデスクトップの壁紙を一定間隔で切り替える機能は、DCOPを通じて制御できます。`dcop kdesktop KBackgroundIface changeWallpaper`コマンドを実行すると、壁紙が次のものに切り替わり、`dcop kdesktop KBackgroundIface currentWallpaper 1`コマンドで、現在の壁紙ファイル名を取得できます。これらのコマンドを組み合わせることで、
シェルスクリプトで壁紙を切り替え、以前の壁紙を削除するなどの操作が可能です。
bash
OLDWALLPAPER=`dcop kdesktop KBackgroundIface currentWallpaper 1`
dcop kdesktop KBackgroundIface changeWallpaper
rm "$OLDWALLPAPER"
この例からもわかるように、DCOPはアプリケーションに本来ない機能を追加する上で非常に役立ちます。
DCOPモデル
DCOPのモデルはシンプルで、DCOPを使用する全てのアプリケーションはクライアントとして機能します。これらのクライアントは、DCOPサーバーを通じて相互に通信を行います。DCOPサーバーは、メッセージや呼び出しが適切な宛先に届くように交通整理の役割を果たします。すべてのクライアントは同等の扱いを受けます。
DCOPでは、「send and forget」メッセージと「calls」の2種類のアクションが可能です。「send and forget」メッセージは送信後、処理の完了を待たずに次の処理に進みます。「calls」は送信したデータに対する応答を待ちます。
送信データは、
Qtの全てのクラスに存在する`QDataStream`オペレータを使用して
シリアライズされます。これにより高速かつ容易なマーシャリングが可能となり、開発者は複雑なコードを記述する必要がありません。また、IDL(Interface Definition Language)風のコンパイラ(`dcopidl`と`dcopidl2cpp`)が用意されており、スタブとスケルトンを自動生成できます。`dcopidl`コンパイラを利用することで、データ型の不整合を防ぐことが可能です。
D-Busは、freedesktop.orgによって標準化されたメッセージバスシステムであり、DCOPから大きな影響を受けています。
KDEの次バージョンである
KDE4では、DCOPは
D-Busに置き換えられる予定です。
外部リンク
DCOP Documentation
Tutorial for creating a DCOP Interface