目次


IBM Lotus Expeditor 制限付きワークベンチ: ロックダウン・サービスおよび関連するネイティブ機能

Comments

IBM Lotus Expeditor 制限付きワークベンチは、オペレーティング・システム・シェルを置き換える代替ランタイム・モードであり、ユーザーがシステム管理者からの明示された権限を持たずにシステム・アプリケーションおよび機能にアクセスすることを防止します。制限付きワークベンチの目的は、システム・オペレーションへのユーザー・アクセスを、業務の遂行に必要なものにのみ限定することです。制限付きワークベンチはセキュリティーを高めるだけでなく、混乱も防止するため、ユーザーはより簡単に業務を完了させることができます。これは、キオスク端末、POS (point-of-sale) システム、または制限されたタスク・ベースの環境 (たとえば、銀行の窓口業務用デスクトップなど)など専用端末 として Lotus Expeditor を実行したい組織にとって非常に重要なポイントです。これらの環境では、システム管理者はユーザーのアクセスを必要最小限に制限したいものです。制限付きワークベンチは、Lotus Expeditor でこれを可能にします。

Microsoft Windows および Linux にインストールしてロックダウン・デスクトップ機能を提供するシステムを開発するときは、多数の要因を考慮しなければなりません。デスクトップ全体がロックダウンされたとき、ユーザーはどのような方法で既存のアプリケーションにアクセスするのでしょうか?パスワードの変更や制限された環境でのスクリーンのロックなど、必要なネイティブ機能をユーザーはどのように実行するのでしょうか?制限付きワークベンチがクラッシュすると、どうなるのでしょうか?この Lotus Expeditor フィーチャーを設計および開発するときは、これらを含む多数の疑問点を考慮する必要があります。主な疑問点については、この記事で解決していきます。

この記事では、制限モード、制限付きワークベンチ、ロックダウン、ロックダウン・デスクトップという用語は、いずれも同じ意味として使用します。Lotus Expeditor 制限付きワークベンチ・フィーチャーについて議論する際は、これらのすべての用語が用いられます。

前提条件

この記事を読むには、Eclipse プラグイン・モデルおよび Lotus Expeditor V6.1 を十分に理解している必要があります。

制限付きワークベンチ

制限付きワークベンチにより、オペレーティング・システムへのユーザーのアクセスが制限され、Lotus Expeditor ワークベンチをデスクトップ・シェルとして使用する環境が得られます。ロックダウン・フィーチャーがインストールされると、ワークベンチの動作およびルック・アンド・フィールが変更されます。Lotus Expeditor ワークベンチはロックダウン・サービスを使用して、次の属性を持つワークベンチ・ウィンドウを生成します。

  • タイトル・バーがない
  • サイズ変更用の境界がない
  • 全画面に最大表示
  • 他のウィンドウが背面に描画されないように、Z 方向の最下部に固定される
  • 閉じられない
  • サイズ変更できない
  • 最小化できない
  • メニュー・バーから「ファイル」->「終了」が削除される

次の 3 つのコンポーネントにより、Lotus Expeditor が完全に制限されたモードで実行されます。

  • ILockdownService インターフェースのインプリメンテーションを提供する必要があります。このコンポーネントは、ワークベンチ・ウィンドウを操作し、ユーザーによってウィンドウが変更されないようにする役割を持ちます。
  • Lotus Expeditor ネイティブ・ランチャーは、Lotus Expeditor プロセスの状態を管理および制御します。Windows では、システム・シェルはネイティブ・ランチャーに置き換えられます。
  • ネイティブ・インストール・スクリプトはロックダウンのインストールの一部として実行され、オペレーティング・システムの構成を変更する役割を持ちます。これらのスクリプトは、Microsoft Windows でのレジストリーの更新や Linux での Gnome セッションの変更などのタスクを実行します。

次のセクションで、これらの 3 つのコンポーネントについて詳細に説明します。

ILockdownService のインプリメンテーション

Lotus Expeditor の WorkbenchWindowAdvisor はワークベンチ・ウィンドウを配置します。これは、どのウィジェットをワークベンチのどの場所に配置するかを決めたり、メニュー・バーの有無やツールバーの有無を指定する役割を持ちます。これには、ワークベンチ・ウィンドウのライフ・サイクルのさまざまな時点で呼び出されるメソッド群が含まれています。

Lotus Expeditor のデフォルト・ワークベンチ・アドバイザー com.ibm.rcp.platform.personality.DefaultWorkbenchWindowAdvisor は、デフォルトの Lotus Expeditor ワークベンチを配置する役割を持つアドバイザー・オブジェクトです。このアドバイザーが実行する内容の 1 つに、ILockdownService インプリメンテーションの存在を検出することがあります。

バンドル com.ibm.rcp.lockdown は、デフォルトのロックダウン・サービスのインプリメンテーションを提供します。制限付きワークベンチ・フィーチャーには com.ibm.rcp.lockdown バンドルが含まれています。このため、制限付きワークベンチをインストールすると、必ず ILockdownService のインプリメンテーションが存在します。DefaultWorkbenchWindowAdvisor はロックダウン・サービスを検出し、preWindowOpen() および postWindowOpen() など、ウィンドウ構成のさまざまなライフ・サイクル・ポイントでそれを呼び出します。これらのポイントでロックダウン・サービスを呼び出すことにより、ウィンドウが開く前または閉じる前に、アドバイザーが必要なオペレーションをそのウィンドウに実行できます。たとえば、このサービスはウィンドウを Z 方向の一番下に固定したり、タイトル・バーやサイズ変更用の境界を削除します。さらに、ウィンドウを最大化し、メニュー・バーから「ファイル」->「終了」を削除し、このウィンドウをロックダウンするその他のタスクを実行します。

また、ロックダウン・サービスはネイティブ DLL をロードし、JNI 呼び出しを行い、Java コードにインプリメントできない一部のロックダウン機能を実行します。たとえば、このネイティブ・コードは、ウィンドウを Z 方向の一番下に固定する役割を実際に持っています。また、Microsoft Windows では、この環境の実行中に最小化されたすべてのウィンドウを非表示にするために、いくつかのメトリックを設定します。ロックダウン・モードのときは、Lotus Expeditor がユーザーのデスクトップになります。画面の一番下に、Microsoft Windows または Gnome のタスクバーはありません。つまり、最小化したウィンドウのアイコンを置く場所がないことになります。もし、Lotus Expeditor によって処理されていないと、アイコンによってワークベンチ・ウィンドウが覆われてしまいます。これらの開かれているウィンドウのナビゲーションを処理する機能については、以降で詳述します。

このネイティブ・コードが実行するもう 1 つの重要なタスクとして、特定のキー・ストロークをキャッチして無視する低レベルのキーボード・フックを登録することが挙げられます。制限モードでは、Lotus Expeditor は、Microsoft Windows で「タスクマネージャ」を開いたり、単に画面をロックするなどの操作を行うショートカットキーをユーザーが使用できないようにします。Lotus Expeditor のキーボード・フックにより、Ctrl + Shift + Esc、Alt + Esc、および Windows ロゴ・キー + L などのキーの組み合わせがキャッチされ、無効化されます。

DefaultWorkbenchWindowAdvisor の実行が終了した後、ワークベンチが表示され、ワークベンチを制限するためのすべての属性がここで定義されます。

バンドル com.ibm.rcp.lockdown は、ILockdownService のインプリメンテーションである LockdownServiceImpl を提供します。前述のように、このサービスがインストールされ、利用可能な場合、DefaultWorkbenchWindowAdvisor はこのサービスを使用します。Lotus Expeditor では、独自のWorkbenchWindowAdvisorの実装を作成できます。WorkbenchAdvisorの完全なカスタマイズについてはこの記事の範囲を超えていますが、開発者がロックダウン・サービスの実装をカスタム・アドバイザーでどのように使用できるのかをリスト 1 のサンプル・コードに示します。

リスト 1. ロックダウン・サービスの使用
public class RestrictedWorkbenchWindowAdvisor 
	extends WorkbenchWindowAdvisor {
	
private ILockdownService lockdownService;
	
public RestrictedWorkbenchWindowAdvisor(
                  WorkbenchWindowConfigurer con
                  r){
	
super(configurer);
		
            lockdownService = getRestrictedWorkbenchService();
}
	
public void preWindowOpen(){
            final IWorkbenchWindowConfigurer configurer = 
	      getWindowConfigurer();
		
if
(lockdownService != 
null)
	lockdownService.preWindowOpen(configurer);
		
		
            //remaining preWindowOpen activities....
}
	
public void postWindowOpen(){
            final IWorkbenchWindowConfigurer configurer = 
		getWindowConfigurer();
		
            if(lockdownService != null)
	lockdownService.postWindowOpen(configurer);
		
            //remaining postWindowOpen activities....
}
	
/**
  * Returns an instance of the ILockdownService
  * The ILockdownService is available when the Lockdown Feature   
  * is installed.
  */
public static ILockdownService getRestrictedWorkbenchService(){
		
ILockdownService rWorkbenchService = null;
            ServiceReference rWorkbenchServiceRef = 
            Activator.getBundleContext().
	getServiceReference(ILockdownService.class.getName());
		
            if
(rWorkbenchServiceRef != 
null)
	rWorkbenchService = 
		(ILockdownService)Activator.getBundleContext().
				getService(rWorkbenchServiceRef);
		
	return rWorkbenchService;
            }

}

リスト 1 のコード・サンプルは、ワークベンチ・ウィンドウ・アドバイザーの骨組みを示しています。その目的は、ワークベンチ・アドバイザー全体の開発を示すことではなく、独自のアドバイザー内でロックダウン・サービスをどのように使用できるのか示すことです。ロックダウン・サービスが取得されると、ウィンドウを開く前または開いた後のサービスのメソッドをアドバイザーから呼び出すことができます。

ロックダウン・サービスは、ユーザーがデスクトップ・パースペクティブから見るもの、つまりロックダウンされたユーザー・インターフェースを提供します。しかし、これは制限付きワークベンチというパズルのほんの 1 ピースに過ぎません。

インストール・スクリプト

ロックダウン・フィーチャーは Eclipse の install handler capabilities (以下 USサイトのリンク参照) を使用して、ネイティブのインストール・スクリプトをフィーチャーのインストールの一部として実行します。インストールがどのオペレーティング・システムで実行されているかに応じて、異なるインストール・スクリプトを持つ異なるプラグインがインストールされます。Microsoft Windows では com.ibm.rcp.lockdown.win32 がインストールされ、Linux では com.ibm.rcp.lockdown.gtk がインストールされます。win32 バンドルには install.bat ファイルが含まれ、gtk バンドルには lockdown.sh ファイルが含まれています。
install handler capabilities(US)

Microsoft Windows システムでは、インストール・ハンドラーがスクリプトを実行し、すべてのオペレーションが実行されます。これは、Linux にはあてはまりません。Java の既知の問題により、インストール・ハンドラーは、インストール・スクリプトの一部であるすべてのオペレーションを実行できません。このファイルを実行する詳細な手順は、Lotus Expeditor に同梱されている リリース情報(US)に記載されています。

制限付きワークベンチのオペレーティング・システムの依存関係により、Microsoft Windows 上でデスクトップを制限する手順は、Linux 上での手順と異なっています。この記事では、主に Microsoft Windows でのインストールに焦点を当てます。

Windows の install.bat ファイルによって実行されるすべてのオペレーションを表 1 に示します。

表 1. Microsoft Windows の install.bat ファイル
オペレーション結果
msvcr71.dll をバンドルから C:\Windows\System32 にコピーする。ネイティブのロックダウン・コードによって使用されるライブラリーが提供されます。Windows のどのバージョンにも、この DLL は含まれていません。
システム変数 WEDSHELL を作成する。rcplauncher.exe のインストール・ロケーションが指定され、rcplauncher によって使用されます。
レジストリー・キー shell の値を更新する。 Explorer.exe を置き換えて、Rcplauncher.exe が実際のシステム・シェルになります。
レジストリー・キー LogonType の値を更新する。Welcome 画面が無効になります。
レジストリー・キー AllowMultipleTSSessions の値を更新する。ユーザーの簡易切り替えが無効になります。
レジストリー・キー ADMIN_SHELL を作成する。Explorer.exe という値を持つ新規レジストリー・エントリーです。通常のウィンドウ・シェルです。
レジストリー・キー WED_SHELL を作成する。rcplauncher.exe のロケーションを持つ新規レジストリー・エントリーです。
ClearAutoLogon を実行する。自動ログインが無効になります。
locked.pol をバンドルから適切なロケーションにコピーし、システム・ポリシーを更新する。Windows のセキュリティー・ウィンドウで「キャンセル」以外のすべてのボタンが無効になり、このウィンドウからのログオフ、シャットダウン、パスワードの変更などが禁止されます。

com.ibm.rcp.lockdown.gtk バンドルに含まれる Linux インストール・ファイル lockdown.sh は、Linux をセキュアにするために、異なるタスクのセットを実行します。実行される内容は、X サーバー構成ファイルを更新し DontZap および DontVTSwitch を追加する、gdm 構成ファイルを更新し不要なセッションを削除する、Ctrl+Alt+Del というキー・シーケンスの使用を禁止する、GNOME default.session ファイルを置き換える、およびワークスペースの切り替えを無効にするといったタスクです。

表 1 から読み取れる最も重要な点は、制限付きワークベンチがインストールされると、実際のオペレーティング・システム・シェルが置き換えられることです。Lotus Expeditor は標準 Windows シェル (Explorer.exe) 上に自分自身を配置するのではなく、Lotus Expeditor 自身がオペレーティング・システム・シェルになります。もし、何らかの理由で Lotus Expeditor がクラッシュすると (その可能性はほとんどありませんが)、OS シェルではなく空白画面がユーザーに表示されます。Lotus Expeditor はオペレーティング・システム・シェルを置き換えるため、プラットフォームのクラッシュが万一発生した場合でも、ユーザーが空白画面のままで取り残され、ハード・シャットダウンを強制的に実行するような事態にならないように注意しています。このような事態を避けるために、Lotus Expeditor には、Lotus Expeditor ウィンドウの状態をモニターするウォッチドッグ・プロセスが含まれています。このウォッチドッグ・コードは、次のセクションで説明するネイティブ・ランチャーの一部です。

ネイティブ・ランチャー

ネイティブ・ランチャーという用語は、Lotus Expeditor クライアントを起動する実行ファイル rcplauncher.exe を示します。制限付きワークベンチは、ネイティブ・ランチャーに依存して、Lotus Expeditor ウィンドウの状態をモニターします。ネイティブ・ランチャーは Lotus Expeditor プロセス用のウォッチドッグを提供し、プロセスの状態を連続的にモニターし、まだアクティブであることを確認します。Lotus Expeditor プロセスが終了したことをウォッチドッグ・プロセスが検出すると、ウォッチドッグは定義済みの変数をチェックし、プロセスが正常終了であるかどうかを判断します。クラッシュの発生と判断した場合は、デスクトップを自動的に再起動し、ユーザーが空白画面のままで取り残されるのを防ぎます。

特権

前述のように、Microsoft Windows オペレーティング・システムで実行するとき、rcplauncher.exe ファイルは実際にユーザーのシェルになります。ランチャーは Windows レジストリーで Explorer.exe という値を置き換え、システムの起動時にインスタンス生成されます。これにより、ランチャーは、システムにログオンしてきたユーザーの特権をチェックする機能を持ちます。このユーザーが Administrators グループに属している場合、シェルの値を Explorer.exe に戻し、Windows は Lotus Expeditor ではなく、従来のデスクトップを起動します。ユーザーが Administrators グループに属していない場合、rcplauncher.exe がシェルとして残り、Lotus Expeditor が制限モードで起動されます。

ロックダウン・フィーチャーのインストール

Lotus Expeditor は、シングルユーザー環境またはマルチユーザー環境のいずれかにインストールできます。これらの構成の一部としてインストールされるフィーチャーは、<base_dir>\desktop\install\deploy にある XML インストール・マニフェストで定義されています。なお、base_dir は Lotus Expeditor のインストール・ファイルが含まれているディレクトリーを表します。制限付きデスクトップは、マルチユーザー環境にのみインストールできます。Lotus Expeditor のインストーラーを実行するときに、com.ibm.rcp.lockdown.feature がインストールされるように、ここで示したディレクトリーにある multiuser.xml ファイルを更新し、com.ibm.rcp.lockdown.feature 用のエントリーを含める必要があります。

XML ファイルを更新して com.ibm.rcp.lockdown.feature を含めると、インストーラーによって追加のロックダウン固有のパネルが表示されます。制限付きワークベンチは容易にアンインストールできないので、ユーザーは実行しようとしている内容を理解することが最重要です。制限付きワークベンチのインストールは、安易な決定で行うものではありません。

図 1. 「マルチユーザー」のインストール・パネル
「マルチユーザー」のインストール・パネル
「マルチユーザー」のインストール・パネル

制限付きワークベンチ・フィーチャーをインストールするときは、インストール時に「マルチユーザー」を選択します (図 1 参照)。制限付きワークベンチは、シングルユーザー環境にはインストールできません。

図 2. 制限付きワークベンチの警告
制限付きワークベンチの警告
制限付きワークベンチの警告

multiuser.xml ファイルを更新してロックダウン・フィーチャーを含めると、インストール・プロセスの一部として、図 2 に示すパネルが表示されます。このパネルは、これからロックダウンがインストールされ、多数のシステム機能が実行できなくなることをユーザーに示しています。

Lotus は制限付きワークベンチのアンインストールをサポートしていない点に注意してください。Lotus Expeditor の制限付きインスタンスを削除する正しい方法は、システム全体を再インストールすることです。

図 3. Lotus Expeditor 制限付きワークベンチ
Lotus Expeditor restricted workbench
Lotus Expeditor restricted workbench

制限モードの Lotus Expeditor を図 3 に示します。このウィンドウは Z 方向の一番下に固定されているので、この背後に他のウィンドウは描画されません。サイズ変更用の境界、ウィンドウのトリム、およびタイトル・バーはありません。このウィンドウは、閉じることも最小化することもできません。

ネイティブ機能

Lotus Expeditor が制限付きワークベンチ・フィーチャーとともにインストールされると、システム管理者でないユーザーまたはルートでないユーザーは、標準オペレーティング・システム機能にアクセスできなくなります。ユーザーは、システムからログアウトすることさえできません。

Lotus Expeditor は、ユーザーがオペレーティング・システムの一般的な機能を実行できるようにするために、宣言的にワークベンチに追加できるネイティブの機能追加モジュールを提供します。システム管理者は、plugin.xml ファイルで定義することにより、任意の機能追加モジュールをワークベンチの任意の数の場所に追加できます。

プラグイン com.ibm.os.ui は、オペレーティング・システムの機能を実行するために Lotus Expeditor に含めるすべての機能追加モジュール、アクション、および設定ページを提供します (表 2 参照)。

表 2. com.ibm.os.ui プラグインとその機能
ContributionItem/Action/PreferencePage機能
ChangeKeyboardAction選択されたときに、ユーザーが切り替えられる利用可能なシステム・キーボード・レイアウトのリストを表示するアクションです。
ChangeKeyboardPreferencePageユーザーが切り替えられる利用可能なシステム・キーボード・レイアウトのリストを表示する設定ページです。
ChangeLocaleAction選択されたときに、ユーザーが切り替えられる利用可能なロケールのリストを表示するアクションです。ロケールの変更には、ユーザーのログオフが必要です。
ChangeLocalePreferencePageユーザーが切り替えられる利用可能なロケールのリストを表示する設定ページです。ロケールの変更には、ユーザーのログオフが必要です。
ChangePasswordContributionItem選択されたときに、ユーザーがシステム・パスワードを変更できるダイアログ・ボックスを表示する機能追加モジュールです。
ChangePasswordPreferencePage ユーザーがシステム・パスワードを変更できる設定ページです。
ClockContributionItem現在のシステム時刻を表示するウィジェットです。
ScreenLockAction選択されたときにユーザーの画面をロックするアクションです。
SystemLogoffAction選択されたときにユーザーをシステムからログオフさせるアクションです。
SystemShutdownAction選択されたときにシステムをシャットダウンするアクションです。
TaskListContributionItem 選択されたときに、開かれているすべてのネイティブ・ウィンドウのリストを表示し、これらのウィンドウを操作可能にする機能追加モジュールです。

Lotus Expeditor は、機能追加モジュールを宣言的にワークベンチのステータス・バーに追加できる拡張ポイント com.ibm.rcp.ui.controlSets を定義します。パスワードの変更機能、タスク・リスト、およびクロック・ウィジェットは、それぞれに機能追加モジュールが用意されているため、 plugin.xml ファイルを使用してステータス・バーに提供できます。

アクションおよび設定ページは Eclipse のActions (以下USサイト参照) および preference pages (以下USサイト参照) のモデルにしたがうので、標準の方法で提供できます。これらの項目の提供方法の詳細については、Eclipse のドキュメントを参照してください。
Actions(US)
preference pages(US)

リスト 2 のサンプルは、controlSets 拡張ポイントを使用してパスワード変更のインスタンスとタスク・リスト機能追加モジュールをワークベンチのステータス行に提供する方法を示します。

リスト 2. controlSets 拡張ポイントの使用
<extension point="com.ibm.rcp.ui.controlSets">
      <controlSet visible="true" id="example.lockdown.ControlSet">
           <statusLine path="BEGIN_GROUP" id="lockdown.statusline">
                <groupMarker name="additions"/>
           </statusLine>
         
     <control 
statusLinePath="example.lockdown.statusline/additions"
 class="com.ibm.rcp.os.contributions.ChangePasswordContributionItem"
            id="changepassword.control"/>
           <control 
statusLinePath="BEGIN_GROUP"
class="com.ibm.rcp.os.contributions.TaskListContributionIte
 m"
            id="tasklist.control2"/>
      </controlSet>
</extension>

図 4 では、新しい 2 つのアイコンがワークベンチのステータス行に表示されています。この図は、タスク・リスト機能追加モジュールが選択されている状態を示します。ユーザーはタスク・リストを使用することにより、開かれている任意のネイティブ・ウィンドウを最小化、最大化、クローズ、または復元することができます。右端にアイコンが表示されています。このアイコンを選択すると、ユーザーがシステム・パスワードを変更できるダイアログ・ボックスが表示されます。これらの機能提供は、XML エントリーによって行います (リスト 2 参照)。

図 4. ワークベンチへの機能提供
ワークベンチへの機能提供
ワークベンチへの機能提供

ネイティブ・アプリケーション

制限付きワークベンチ・フィーチャーは、ユーザーがネイティブなオペレーティング・システム機能を実行できないようにするだけでなく、必要なネイティブ・アプリケーションの起動も禁止します。Windows/Linux の「スタート」/「アプリケーション」メニューにはアクセスできません。また、デスクトップ・ショートカットを起動する方法もありません。

開発者は、com.ibm.rcp.ui.launcherSet 拡張ポイントを使用することで、ネイティブ・アプリケーションへのアクセスを宣言的に提供できます。launcherSet 拡張ポイントは、Lotus Expeditor ランチャーに機能を提供したい任意のユーザーが使用できます。これは、ロックダウン・モードであるかないかにかかわりません。この記事では、この拡張ポイントのネイティブ・アプリケーションの部分である nativeProgramLaunchItem だけを取り上げます。この要素を使用すると、ネイティブ・アプリケーションおよびそのすべての構成情報を宣言できます。この拡張ポイントで定義されたネイティブ・アプリケーションは、Lotus Expeditor ランチャーに表示されます。

launcherSet 拡張ポイントを使用して 2 つのネイティブ・アプリケーションを提供する例をリスト 3 に示します。この宣言により、Microsoft Windows システム上で Microsoft ペイント が、Linux システム上で Gimp が追加されます。

リスト 3. launcherSet 拡張ポイントの使用
<extension point="com.ibm.rcp.ui.launcherSet"
     id="com.xyz.test.extension.id">
     <LauncherSet
        id="com.xyz.launcher.native.launcherItems"
        label="Native applications">
        <nativeProgramLaunchItem
            environmentMode="APPEND"
            id="com.xyz.launcher.native.mspaint"
            label="MS Paint"
            platform="win32"
            programCommand="C:\WINDOWS\SYSTEM32\mspaint.exe"
            workingDirectory="c:\temp">
            <environmentVar
                mode="OVERWRITE"
                name="testEnvironmentVar1"
                value="val1"/>
            <environmentVar
                mode="PREPEND"
                name="testEnvironmentVar2"
                value="val2"/>
            <environmentVar
                mode="APPEND"
                name="testEnvironmentVar3"
                value="val3"/>
        </nativeProgramLaunchItem>
        <nativeProgramLaunchItem
            programCommand="/usr/yourname/gimp.exe"
            environmentMode="APPEND"
            id="com.xyz.launcher.native.gimp"
            label="GIMP (Only on Linux)"
            platform="linux"
            workingDirectory="/usr/temp"/>
	</LauncherSet>
</extension>

XML ではアイコンが提供されていないため、Lotus Expeditor は定義済みの実行可能ファイルに関連するイメージをオペレーティング・システム内で検索します。Lotus Expeditor の OS サービス com.ibm.rcp.services.ui.os.OSUIService は、実行可能ファイルのアイコン・イメージを取得する役割を持ちます。アイコンが常に利用できるとは限らず、利用できない場合、Lotus Expeditor はデフォルト・アイコンを使用します。

上記の構成により、Microsoft Windows で Microsoft ペイント 用のアクションが「MS Paint」というラベルで Lotus Expeditor ランチャーに追加されます (図 5 参照)。このアクションを選択すると、Microsoft ペイント が起動されます。Linux では、Gimp アイコンを持つ「Gimp (Only on Linux)」ラベルが表示されます (利用可能な場合)。ネイティブ・アプリケーションには、多数の構成パラメーターを使用できます。launcherSet 拡張ポイントのすべての要素の詳細については、Lotus Expeditor Information Center を参照してください。

図 5. ネイティブ・アプリケーションの追加
ネイティブ・アプリケーションの追加
ネイティブ・アプリケーションの追加

ウィンドウ管理

Lotus Expeditor を制限モードで実行するとき、ユーザーが既存のネイティブ・アプリケーションにアクセスできることの必要性と要望を説明してきました。そして、この必要性を満たす Lotus Expeditor のいくつかのフィーチャーについて詳述しました。Lotus Expeditor ランチャーから起動できるネイティブ・アプリケーションを宣言的に定義する方法は、そのような機能の 1 つです。また、ネイティブ・アプリケーションの管理には、タスク・リスト機能追加モジュールも必要です。ネイティブ・アプリケーションの起動およびタスク・リストによるその状態の管理は、ウィンドウ管理コンポーネントがあるからこそ行うことができます。

ウィンドウ管理とは、ネイティブ・ウィンドウを制御することです。Lotus Expeditor には、ウィンドウ・ハンドルとプロセス識別子の取得、開かれているすべてのウィンドウの識別の維持、ネイティブ・ウィンドウに関するプロセスの終了、プロセスまたはウィンドウに関連するアイコンの取得などのことを行う Windows および Linux 用の C++ コンポーネントが含まれています。

com.ibm.rcp.os.ui バンドルは、com.ibm.rcp.services.ui.os.NativeWindow サービス・インターフェースの実装を提供します。このサービス実装は、ネイティブ・ウィンドウを管理するネイティブ・コードへの Java レイヤーです。この実装は、ランチャーからネイティブ・アプリケーションを起動するときに使用され、またタスク・リスト機能追加モジュールによっても使用されます。

NativeWindow サービス・インターフェースは、ネイティブ・ウィンドウを操作したり、ネイティブ・ウィンドウに関する情報にアクセスするためのメソッドを提供します。このインターフェースで使用できるメソッドおよびメソッドから得られる情報の詳細については、リスト 4 を参照してください。

リスト 4. NativeWindow サービス・インターフェース
/**
 * Returns the platform-specific handle for this native window. It is 
 * not guaranteed that the handle is valid, that is, the window may be
 * closed. To determine if this window is valid use the
 * exists() method.
 */
int getHandle();
	
/**
  * Returns the identifier of the process that this window belongs to
  * or -1 if the process could not be determined.
  */
int getProcessID();
	
/**
  * Returns the text appearing in the title bar of this native window
  * or null, if the window does not exist.
  */
String getTitle();
	
/**
  * Returns the display name of the executable this window belongs to,
  * or null if the window does not exist. This value is
  * typically used as a label for a set of windows that all belong to 
  * the same process.
  */
String getExecutableDisplayName();
/**
  * Returns the window image for this native window or null if
  * the window does not exist.  This is the image that you typically 
  * see in the top left corner of 
  * the window.
  */
Image getIconImage();
	
/**
  * Returns the window image, scaled to the specified height and width, 
  * this native window or null, if the window does not exist.
  * This is the image that you typically see in the top left corner of 
  * the window.
  */
Image getIconImage(int
 height, 
int width);
	
/**
  * Returns the image for the executable that launched this window or
  * null if this window does not exist, the executable could
  * not be located, or the executable has no embedded image.
  * This image is typically used to represent a set of windows that all
  * belong to the same process.
  */
Image getExecutableIconImage();
	
/**
  * Returns the image, scaled to the specified height and
  * width, for the executable that launched this window or
  * null if this window does not exist, the executable could
  * not be located, or the executable has no embedded image.
  * This image is typically used to represent a set of windows that all
  * belong to the same process.
  */
Image getExecutableIconImage(int
 height, 
int width);
	
/**
  * Returns the absolute path to the executable that launched this
  * window, or null if this window does not exist or the
  * path could not be determined.
  */
String getExecutablePath();
	
/**
  * Returns true if this native window is open. This returns true
  * if the window is open but not visible.
  */
boolean exists();
	
/**
  * Minimizes this native window.
  */
void minimize();
	
/**
  * Maximizes this native window
  */
void maximize();
	
/**
  * Brings this native window to the foreground and gives it focus. If 
  * the window was minimized it is restored to its previous position. 
  */
void restore();
	
/**
  * Closes this native window.
  */
void close();
	
}

通常の Microsoft Windows または Linux オペレーティング環境では、最小化されたウィンドウはタスクバー上のアイコンまたはボタンで表されます。しかし、制限モードではタスクバーは表示されません。このため、最小化されたウィンドウを表すアイコンを置く場所がありません。代わりに、Lotus Expeditor はデスクトップ領域を混乱させないために、最小化されたウィンドウをユーザーに非表示にします。このソリューションの潜在的な問題は、ウィンドウが画面外にあると、ユーザーはアプリケーションのインスタンスがすでに開かれていることに気付かず、もう 1 つのインスタンスを開こうと試みる可能性があることです。Lotus Expeditor には、開かれているウィンドウ間の切り替えを補助するタスク・リスト項目があり、ユーザーは Alt+Tab でウィンドウを切り替えられますが、これだけでは不十分です。

複数のアプリケーション・インスタンスが開かれるのを防ぐために、Lotus Expeditor は com.ibm.rcp.ui.launcherSet 拡張ポイントにトラック・パラメーターを提供します。nativeProgramLaunchItem 定義にトラック・パラメーターを含め、これを true に設定すると、アプリケーションの最初のインスタンスがシステムによってトラッキングされます。この開かれたウィンドウをトラッキングすることにより、ユーザーがこのアプリケーションの別のインスタンスを起動しようと試みると、Lotus Expeditor がそれを認識し、別のインスタンスを起動する代わりに、既存のインスタンスをフォアグラウンドに表示します。

リスト 5 に、Microsoft ペイント アプリケーションをランチャーに追加した前の例と同じ XML のスニペットを示しますが、今回の例にはトラック・パラメーターが含まれています。

リスト 5. トラック・パラメーターの追加
<nativeProgramLaunchItem
            environmentMode="APPEND"
            id="com.xyz.launcher.native.mspaint"
            label="MS Paint"
            platform="win32"
            programCommand="C:\WINDOWS\SYSTEM32\mspaint.exe"
            workingDirectory="c:\temp"
            track="true">
            <environmentVar
                mode="OVERWRITE"
                name="testEnvironmentVar1"
                value="val1"/>
            <environmentVar
                mode="PREPEND"
                name="testEnvironmentVar2"
                value="val2"/>
            <environmentVar
                mode="APPEND"
                name="testEnvironmentVar3"
                value="val3"/>
</nativeProgramLaunchItem>

ランチャーで Microsoft ペイント が最初に選択されたとき、アプリケーションの新しいインスタンスが起動されます。それ以降このアプリケーションを選択しても、既存のインスタンスがフォアグラウンドに表示されます。com.ibm.rcp.services.os.LaunchContext クラスとともに com.ibm.rcp.os.ui.internal.NativeWindowImpl クラスによって提供されたウィンドウ管理機能が、これを可能にしています。

LaunchContext クラスは、宣言されたネイティブ・アプリケーションに関するすべての構成情報を保持しています。ユーザーがネイティブ・アプリケーションの起動を試みるたびに、コマンド、環境、作業ディレクトリー、およびアプリケーションに関するその他のすべての構成情報を持つ LaunchContext オブジェクトが作成されます。ネイティブ・アプリケーションを起動する役割を持つコードは、一致する LaunchContext が存在するかどうかをチェックします。存在する場合は、その LaunchContext に対応するウィンドウをフォアグラウンドに表示します。一致する LaunchContext がない場合は、アプリケーションの新しいインスタンスが起動されます。

まとめ

Lotus Expeditor 制限付きワークベンチ・フィーチャーは、マルチユーザー環境において価値のあるツールになるでしょう。この記事では、このフィーチャーを十分に理解して使用するために必要なすべての情報を記載しました。ロックダウンの目的や考えられる使い方から、セットアップ、インストール、および構成に至るまで、あらゆる内容について説明しました。

Lotus Expeditor は、制限付きワークベンチ・フィーチャーのアンインストールをサポートしていないことに留意してください。これは、制限付きワークベンチにより、システムに多数の変更が加えられるためです。アンインストール・スクリプトは提供されていますが、Lotus Expeditor は、このスクリプトの実行によってシステムがロックダウン前の状態に戻ることを保証しません。制限付きワークベンチを試すことが目的の場合は、テスト・システムを使用することをお勧めします。


ダウンロード可能なリソース


関連トピック


コメント

コメントを登録するにはサインインあるいは登録してください。

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=60
Zone=Lotus
ArticleID=341174
ArticleTitle=IBM Lotus Expeditor 制限付きワークベンチ: ロックダウン・サービスおよび関連するネイティブ機能
publish-date=09182007