kded のサービスを利用する前に、KDE におけるその立場とそれ自体の用途について知っておく必要があります、その上でサービスがアクセスされるようになります。
kded がクライアントとやりとりするのに CORBA を使用する際、(クライアントとしての)アプリケーションは以下のようにする必要があります。
kded ライブラリ、 libkdedへのリンク
libmicoへのリンク
MICO ORB の初期化
最初の二点については全てのクライアントに対して求められます。三つ目は特定のクライアントに対してのみです。普通次の中から選択しなければなりません:
アプリケーションがすでに KOM を使用しているなら、 KOMApplication (いつでも必要となるような) を使用した方が良いでしょう。
KOM を使いたくないなら、 ORBAを手動で初期化します:CORBA::ORB_ptr orb = CORBA::ORB_init( argc, argv, "mico-local-orb" );この構造及び似たような構造を用いる際、同時に KDE/Qt クラスを利用している場合は CORBA サーバ としては動作することができない という点に注意して下さい。これは ORBが独自のイベントループを必要とし、更にメインとなる Qt イベントループも要するということに関係しています。現在は KDE オブジェクトモデルの一部としてKOMApplication だけが、両イベントループを統合するのに必要な機能を供給し、それ故、KDE アプリケーション作成が CORBA オブジェクトに受け渡されます。
kdedは CORBA を広く用いますが、API はシンプルさを保ち、複雑な CORBA スタッフの影響は受けません。実際、 kded について話をする場合、API はkdedサーバではなく、KDEデーモンライブラリを意味します。このライブラリはサーバの全体的な機能に加えて(クライアントに対する)サーバへのインターフェースも含まれます。これはkded を使用するアプリケーションがkded サーババイナリの存在に依存することを強要されるべきではない、もしくはサーバの稼働状況に全く依存すべきでないという考え方に由来するものです。クライアントアプリケーションを起動する時、次の三つの状況が考えられます:
kded が起動しておらず、パスにkded サーバが存在しない。この場合、libkded はアプリケーションのプロセス上で自動的にkded のローカルな要請を起動します。
kded は起動していないがkded サーバは利用可。ここでlibkded は実行可能な kded を稼働し、接続します。
kded は既に動いている:-)。kde が動くという事実は X Root Window の特定のプロパティで指示されます。kded はその IOR(Interoperable Object Reference) をこのプロパティに受け渡します。また、これは kded インスタンスが X ディスプレイに明記されており、それゆえ KDE セッションにも明記されていることを保証するものです。
要約すると、libkded は、たとえアプリケーションが稼働している環境がどのようなものであろうと常に kdedのサービスがクライアントアプリケーションに対して利用可能な状態にしているのです:-)。そしてこのことに気を遣わなくても、次の三つのコマンドライン引数のうちの一つを自分のアプリケーションに追加することで libkdedの動作を随意にコントロールすることが出来ます:
>"-kdedlocal" - この引数は常に libkded に kdedのプロセス-ローカルインスタンスやそのサービスを起動させます。
"-kdedremote" - この引数は、稼働している kded インスタンスをローカルな方を起動する前に、libkdedに探させます。
"-kdedior ior_here" - この引数は与えられた IOR によって指定される kded サーバに libkded を接続させます。
実際の kded インターフェースとそのサービスは、kded_instance.h に定義されているKdedインスタンスクラスです。ですから kded を使用したいなら(だからこんなものを読んでいるのだとは思いますが)、忘れずにそのためのインスタンスを一つ作成しておいてください。好ましい方法はmain()の最初に次の行を追加することです:KdedInstance( argc, argv, _a_reference_to_the_orb_here_ ); KOMApplication をアプリケーションオブジェクトとして使用しているなら(この行の前にインスタンスを作成することを忘れないでください)、ORB に関してkomapp_orbを明記します。
このクラスのインスタンスが常にただ一つだけなら、どこからでもクラスのself()スタティックメソッドで簡単にアクセスすることが出来ます。プログラム中のKdedInstance引数をパスする必要はありません。
KdedInstanceについての更に詳しい情報として、kded_instance.hを読みたくなるかも知れません。これは素晴らしくよくまとめられています。