DCOP

出典: フリー百科事典『ウィキペディア(Wikipedia)』
移動: 案内検索

DCOPDesktop COmmunication Protocol)とは、プロセス間またはソフトウェアコンポーネント間の軽量なプロセス間通信システムである。このシステムの主眼は、アプリケーション群が相互にやり取りして、全体として複雑なタスクを実施できるようにすることである。基本的に DCOP は「遠隔制御」システムであり、あるアプリケーションやスクリプトから他のアプリケーションの助けを得ることを可能にする。X Window Systemのクライアント間通信プロトコルをベースとして構築されている。

DCOP を使うことで、新たなアプリケーションを一から書かなくとも新機能を実現できるようになる。KDEのアプリケーションとライブラリは DCOP を多用しており、多くの KDE アプリケーションは DCOP の機構を通してスクリプトから制御できる。

最近の KDE システムでは、全ての KDE アプリケーションが基本的な DCOP インタフェースを備えており、これはそのアプリケーションの作者が明示的に DCOP を使用していない場合でもそのようになっている。例えば、全てのアプリケーションが "quit" コマンドによるアプリケーションのクローズを自動的にサポートしている。

DCOP を組み込んだアプリケーションとシェルから通信するコマンド行ツールとして 'dcop'(小文字である点に注意)がある。また、同じインタフェースを提供するGUIツールとして 'kdcop' がある。

例えば、KDE デスクトップには一定時間間隔で背景の壁紙を切り換える機能がある。しかし、今の壁紙が気に入らないとき、それを即座に簡単に切り換えることはできない。また、ある壁紙を実際に見てみて、今後表示されないようにしたいと思った場合も、簡単に削除する方法はない。

しかし、dcop を使えば、そのような操作が簡単に追加できる。次のコマンド

 dcop kdesktop KBackgroundIface changeWallpaper

は、シェルから壁紙を次に切り換えさせるものである。そして、次のコマンド

 dcop kdesktop KBackgroundIface currentWallpaper 1

は、デスクトップ 1 の現在の壁紙のファイル名を得ることができる(KDE を含む X のデスクトップ環境では、仮想デスクトップを複数サポートしているのが一般的である)。これらを組み合わせてシェルスクリプトを組めば、壁紙を切り換えて、前に表示していた壁紙を削除することができる。例えば、次のようになる。

 OLDWALLPAPER=`dcop kdesktop KBackgroundIface currentWallpaper 1`
 dcop kdesktop KBackgroundIface changeWallpaper
 rm "$OLDWALLPAPER"

このように DCOP によって、アプリケーションが本来持っていなかった機能を簡単に追加することが可能となる。

DCOP モデル[編集]

モデルは単純である。DCOP を使っているアプリケーションは全てクライアントである。クライアントは DCOP サーバを通して相互に通信する。DCOP サーバは一種の交通管制を行い、メッセージや呼び出しが適切な送信先に届くようにする。全てのクライアントは同列に扱われる。

DCOP では2種類のアクションが可能である。"send and forget" メッセージは送信するだけで、ブロックされない。"calls" はデータが返されるのを待つ。

送信データは、Qt の全てのクラスに備わっている QDataStream オペレータを使ってシリアライズされる。これは高速で単純であり、マーシャリングのためのコードを書くのも簡単である。さらにIDL風のコンパイラがあり(dcopidl と dcopidl2cpp)、スタブとスケルトンを生成できる。dcopidl コンパイラを使うと、データ型を間違えないという利点もある。

D-Busfreedesktop.org が標準化したメッセージバスシステムであり、DCOP から強い影響を受けている。KDE の次のバージョンである KDE4 では、DCOP が D-Bus に置き換えられる予定である。

外部リンク[編集]