DCOP
DCOP (Desktop 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-Busは freedesktop.org が標準化したメッセージバスシステムであり、DCOPから強い影響を受けている。KDEの次のバージョンである KDE4では、DCOPがD-Busに置き換えられる予定である。
外部リンク
- DCOP Documentation
- Tutorial for creating a DCOP Interface
| |||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Software Compilation | ![]() | ||||||||||||||||||
ワークスペース | |||||||||||||||||||
アプリケーション |
| ||||||||||||||||||
プラットフォーム | |||||||||||||||||||
モジュール | |||||||||||||||||||
コミュニティ |
| ||||||||||||||||||
|