(57)【特許請求の範囲】
【請求項１】
サーバデバイスに接続されたクライアントデバイスの画面上に表示されるローカルグラフィカルユーザインターフェイス（ＧＵＩ）を生成する方法であって、
前記サーバデバイスのリモートＧＵＩのベース画像、及び前記リモートＧＵＩ内のＧＵＩ要素を記述したユーザインターフェイスメタデータを前記サーバデバイスから受信すること、
前記リモート画像の前記ベース画像を前記クライアントデバイスの画面上に表示すること、
前記リモートＧＵＩ内の前記ＧＵＩ要素に対応し、前記受信したＵＩメタデータに従って前記画面上に表示すべきネイティブＧＵＩ要素を前記クライアントデバイスにて生成すること、
前記サーバデバイスから受信した前記ベース画像の上に前記ネイティブＧＵＩ要素をオーバレイ表示することにより前記クライアントデバイスの画面上に表示すべき前記ローカルＧＵＩを生成すること
を備える方法。
【請求項２】
前記ＵＩメタデータは前記リモートＧＵＩ内の前記ＧＵＩ要素のコンテンツに関連した意味情報を備え、前記ＵＩメタデータはツリー型構造に編成されている、請求項１に記載の方法。
【請求項３】
前記生成されたネイティブＧＵＩ要素は、前記リモートＧＵＩ内の前記対応するＧＵＩ要素とは、サイズ、形状、色、形式、対話方式、アニメーション、及び対話動作のうちの少なくとも１つにおいて異なっている、請求項１に記載の方法。
【請求項４】
前記ネイティブＧＵＩ要素を生成することはさらに、
前記クライアントデバイスに対しローカルなユーザインターフェイスフレームワークを使用して、前記受信したＵＩメタデータに基づいてシステム組み込みの制御要素を生成することを備える、請求項１に記載の方法。
【請求項５】
前記クライアントデバイスの画面はタッチスクリーンであり、
前記ローカルＧＵＩを介して前記タッチスクリーンのタッチ入力を前記クライアントデバイスにて受信すること、
前記受信した入力によって前記ネイティブＧＵＩ要素が操作されたと判定することに応答して、前記リモートＧＵＩ内の前記対応するＧＵＩ要素が前記クライアントデバイスにて操作されたことを示す情報を前記サーバデバイスに伝送すること、
をさらに備える請求項１に記載の方法。
【請求項６】
前記サーバデバイスに伝送された前記情報は、前記リモートＧＵＩの一部のアプリケーションの状態の変更に関する情報を備える、請求項５に記載の方法。
【請求項７】
前記サーバデバイスに伝送された前記情報は、前記サーバデバイスのアクセス可能性を補助するアプリケーション・プログラミング・インターフェイスをトリガするように構成されたイベント情報を備え、前記アクセス可能性を補助するアプリケーション・プログラミング・インターフェイスは、前記サーバデバイスの前記リモートＧＵＩをプログラムによって操作するように構成されている、請求項５に記載の方法。
【請求項８】
前記サーバデバイスに伝送された前記情報は、前記リモートＧＵＩのメニューＵＩ要素のメニューナビゲーションを示す情報を備える、請求項５に記載の方法。
【請求項９】
前記サーバデバイスはゲストオペレーティングシステムを実行しており、
前記サーバデバイスの前記ＧＵＩをプログラムによって操作するように構成された前記ゲストオペレーティングシステムのアプリケーション・プログラミング・インターフェイスを使用して、前記サーバデバイスの前記ＧＵＩ内の前記ＧＵＩ要素を特定する前記ユーザインターフェイスメタデータを生成すること、
前記ＧＵＩの前記ベース画像、及び前記生成されたＵＩメタデータを、前記サーバデバイスに接続された前記クライアントデバイスに伝送すること、
前記サーバデバイスの前記ＧＵＩ内の前記ＧＵＩ要素にリンクしたユーザ入力を示す情報を前記クライアントデバイスから受信すること、
前記受信した情報に従って前記サーバデバイスの前記ＧＵＩをプログラムによって操作するために、前記アプリケーション・プログラミング・インターフェイスを呼び出すこと、
をさらに備える請求項１に記載の方法。
【請求項１０】
前記アプリケーション・プログラミング・インターフェイスを呼び出すことは、前記ＵＩメタデータによって特定された前記ＧＵＩ要素における特性値の変化を示すイベントを生成することを備える、請求項９に記載の方法。
【請求項１１】
前記サーバデバイスの前記ＧＵＩ内の第２のＧＵＩ要素の状態変化を検知したときに、前記サーバデバイスの前記ＧＵＩをプログラムによって操作するように構成された前記ゲストオペレーティングシステムの前記アプリケーション・プログラミング・インターフェイスを使用して、前記第２のＧＵＩ要素の状態変化を特定する更新ＵＩメタデータを生成することをさらに備える請求項９に記載の方法。
【請求項１２】
前記ゲストオペレーティングシステム上で実行中のアプリケーションのアプリケーション状態の変化を検知したときに、前記サーバデバイスの前記ＧＵＩをプログラムによって操作するように構成された前記ゲストオペレーティングシステムの前記アプリケーション・プログラミング・インターフェイスを使用して、前記アプリケーション状態の変化を特定する更新ＵＩメタデータを生成することをさらに備える請求項９に記載の方法。
【請求項１３】
前記サーバデバイスの前記ＧＵＩ上の前記ＧＵＩ要素は、アプリケーションウィンドウのメニューバーを備え、
前記サーバデバイスの前記ＧＵＩ内の前記ＧＵＩ要素にリンクしたユーザ入力を示す前記受信した情報は、前記サーバデバイスの前記ＧＵＩの前記メニューバーのメニューナビゲーションを示す情報を備える、請求項９に記載の方法。
【請求項１４】
前記クライアントデバイスの入力デバイスを介して前記クライアントデバイスにて音声入力を受信すること、
前記音声入力を処理して、前記サーバデバイスの前記リモートＧＵＩを操作するために入力されたコマンドを判定すること、
前記リモートＧＵＩを操作するために、前記入力されたコマンドを示す情報を前記サーバデバイスに伝送すること、をさらに備える請求項１に記載の方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、リモートデバイスのためのユーザインターフェイス仮想化に関する。
【背景技術】
【０００２】
サーバベースコンピューティングは、サーバコンピューティングシステムから遠隔に配置されてネットワーク接続されたクライアントデバイスが、サーバ上のコンピューティングリソースにアクセスすることを可能にする。例えば、クライアントデバイスは、リモート・デスクトップ・プロトコル（ＲＤＰ）、仮想ネットワークコンピューティング（ＶＮＣ）、パーソナルコンピュータ・オーバー・インターネットプロトコル（ＰＣｏＩＰ）といったリモート・デスクトップ・プロトコルを使用してデスクトップに遠隔アクセスするデスクトップ・リモーティング・クライアント・ソフトウェアおよびハードウェアを実行することができる。デスクトップ・リモーティング・クライアント・ソフトウェアが、サーバコンピューティングシステムで実行中のオペレーティングシステムおよびアプリケーションが生成したグラフィカルユーザインターフェイスの画像を、例えば仮想マシンにおいて表示させる。用語「デスクトップ」は、ローカル（ユーザから見た場合）デスクトップまたはワークステーションコンピュータとしてエンドユーザによりアクセスされる仮想マシンまたは物理システムを意味し得る。用語「デスクトップ」はまた、ユーザが、アプリケーション、設定、及びデータの立ち上げ、対話、管理を行うことができるヒューマンインターフェイス環境を意味してもよい。ユーザは、リモート・デスクトップ・プロトコルおよびデスクトップリモーティングクライアントを使用して、リモートデスクトップにアクセスすることができる。典型的に、クライアントデバイスは、ローカル側の入力デバイスおよび出力デバイス（例えば、ディスプレイ、キーボード、マウス）のセットを備え、このローカル側のＩ／Ｏデバイスのセットを使用して、ユーザ入力（例えばキーボードまたはマウスでの入力）を処理するべくリモートシステムへ伝送し、さらにディスプレイデータおよび他のデータ（例えばサウンド）をユーザ用に提供するべく受信する。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】米国特許出願公開第２０１１／０３１４０９３号明細書
【非特許文献】
【０００４】
【非特許文献１】「Ｒｅｍｏｔｅ  Ｄｅｓｋｔｏｐ  Ｐｒｏｔｏｃｏｌ：Ｇｒａｐｈｉｃｓ  Ｄｅｖｉｃｅ  Ｉｎｔｅｒｆａｃｅ  Ａｃｃｅｌｅｒａｔｉｏｎ  Ｅｘｔｅｎｓｉｏｎｓ」マイクロソフト社
【発明の概要】
【発明が解決しようとする課題】
【０００５】
しかし、タッチスクリーンを設けたクライアントデバイスのユーザは、従来のデスクトップベースのアプリケーション（例えばマイクロソフト社Ｗｉｎｄｏｗｓ（登録）アプリケーション）やデスクトップと、リモートディスプレイプロトコルを通じてインターフェイスする場合にいくつかの課題に直面する。１つの課題は、一時停止またはジッタなどの現象を作り出す、タッチスクリーンデバイスとリモートデスクトップとの間のネットワーク接続の待機時間に関連している。別の課題は、従来の「ポイント＆クリック」駆動型インターフェイス（例えば、Ｗｉｎｄｏｗｓ（登録）インターフェイス）を、それまでの「ポイント＆クリック」対話用としてではなく、タッチスクリーンジェスチャおよび「フィンガスワイプ」形式の対話用として設計されたタッチスクリーンデバイスから遠隔制御する試みに関連している。
【０００６】
これらの課題を検討する上で、タッチスクリーンデバイスで制御されたリモートデスクトップを、例えばリモートデスクトップのフォントサイズを自動調整することで修正することが当該技術分野で周知である。しかし、こうした大規模な表面的変更はリモートサーバから受信して表示されているコンテンツのみを修正するものであり、メニューナビゲーションおよびユーザフィードバックの待機時間の短縮には失敗しないものの、ユーザは依然として「ポイント＆クリック」形式のインターフェイスによってデスクトップアプリケーションを誘導する必要がある。
【０００７】
さらに当該技術では、マイクロソフト社より入手可能な「Ｒｅｍｏｔｅ  Ｄｅｓｋｔｏｐ  Ｐｒｏｔｏｃｏｌ：Ｇｒａｐｈｉｃｓ  Ｄｅｖｉｃｅ  Ｉｎｔｅｒｆａｃｅ  Ａｃｃｅｌｅｒａｔｉｏｎ  Ｅｘｔｅｎｓｉｏｎｓ」（非特許文献１）に記載されているように、リモートサーバが自身のビデオドライバを使用してディスプレイ出力をレンダリングし、さらに、実際の画像を暗号化する代わりに画像を生成する絵画オペレーションを暗号化することも周知である。例えば、塗りつぶされた長方形のビットマップ画像をサーバからクライアントへ送信する代わりに、座標（Ｘ、Ｙ）上で所与の幅、高さ、塗りつぶし色で長方形をレンダリングする命令をクライアントに送信することができる。次にクライアントは、目的のグラフィック結果を得るために描画命令を実行する。しかし、このアプローチでは、サーバ上のものと同一の対応するグラフィカルインターフェイスをクライアント上で生成するだけであり、これでは、タッチスクリーンまたは非ポインタベースの形式のインターフェイスを実装したクライアントデバイス上での使用が難しい。
【０００８】
あるいは、米国特許出願公開第２０１１／０３１４０９３号（特許文献１）に記載されているように、クライアントデバイス上でのユーザジェスチャを、２ボタンマウスに共通の制御（例えば、クリック、ウィンドウスクロール、右クリック）のような、リモートコンピュータのネイティブ入力形式のデジタル表示に変換し、クライアントデバイスがコンピュータを制御できるようにすることも当該技術分野において周知である。しかし、このアプローチでは、新規のユーザインターフェイスを習得し、どのタッチスクリーンジェスチャがマウス入力に対応するのかを覚えることをユーザに強いるので、厄介で使用し難い可能性がある。さらにこのアプローチでは、依然としてリモートデスクトップから基礎画面データを取り込んで表示させる必要があり、ユーザとユーザインターフェイス間の対話の待機時間を改善することができない。
【０００９】
したがって、１つのユーザインターフェイス形式を持ったリモートデスクトップへのアクセスを、別のユーザインターフェイス形式を持ったクライアントデバイスに提供するための改善されたシステムおよび方法が必要である。
【課題を解決するための手段】
【００１０】
本発明は、添付の特許請求の範囲に記載の方法を提供する。さらに、この方法を実行するコンピュータシステムを提供する。本発明のその他の特徴は、従属形式の請求項および以降の説明から明らかになるであろう。
【００１１】
概して、ここで説明されるユーザインターフェイス仮想化は、第１コンピューティングデバイスの、或る形式のコンピュータユーザインターフェイスのエルゴノミクスを、第２コンピューティングデバイスに適した別の形式のユーザインターフェイスのエルゴノミクスに変換しながら、第１コンピューティングデバイスから第２コンピューティングデバイスへのアクセスをユーザに供与する技術を提供する。リモートデスクトップ上で実行中のエージェントは、例えば「タッチ＆スワイプ」形式の入力を受け入れるクライアントマシン上で実行中の対応するクライアントと協働する。エージェントとクライアントはユーザインターフェイスメタデータおよびユーザインターフェイス入力イベントを交換し、さらに、交換したこの情報を変換して、ネイティブグラフィカルユーザインターフェイス要素（クライアントマシン側）とシミュレーションされたユーザアクション（サーバデバイス上のリモートデスクトップ側）を提供する。リモートデスクトップ上で実行中のエージェントは、インターフェイス対話ＡＰＩまたはライブラリを使用して、対応するクライアントに応答し、そのプロキシとして機能するリモートデスクトップのユーザインターフェイスをプログラムによって操作することができる。
【００１２】
一例では、リモートＧＵＩを実装したサーバデバイスに接続したクライアントデバイスのタッチスクリーン上で、ローカルグラフィカルユーザインターフェイス（ＧＵＩ）を生成する方法を提供する。この方法は、リモートＧＵＩのベース画像、及びリモートＧＵＩ内のＧＵＩ要素を記述したユーザインターフェイス（ＵＩ）メタデータをサーバデバイスから受信することを含む。方法はさらに、受信したＵＩメタデータに従ってタッチスクリーン上に表示すべきネイティブＧＵＩ要素をクライアントデバイスにて生成することを含む。このネイティブＧＵＩ要素は、リモートＧＵＩ内のＧＵＩ要素に対応する。方法はさらに、クライアントデバイスのタッチスクリーン上に表示すべきローカルＧＵＩを生成することをさらに含み、ここで、ローカルＧＵＩは、サーバデバイスから受信したベース画像と、ネイティブＧＵＩ要素とを含む。
【００１３】
本出願の実施形態は、ゲストオペレーティングシステムを実行中のサーバデバイスのグラフィカルユーザインターフェイス（ＧＵＩ）へのアクセスを供与する方法を提供する。この方法は、サーバデバイスのＧＵＩをプログラムによって操作するように構成されたゲストオペレーティングシステムのアプリケーション・プログラミング・インターフェイスを使用して、サーバデバイスのＧＵＩ内のＧＵＩ要素を特定するユーザインターフェイス（ＵＩ）メタデータを生成することを含む。方法はさらに、ＧＵＩのベース画像、及び生成されたＵＩメタデータを、サーバデバイスに接続したタッチ入力クライアントデバイスに伝送することと、サーバデバイスのＧＵＩ内のＧＵＩ要素にリンクしたユーザ入力を示す情報をタッチ入力クライアントデバイスから受信することとを含む。方法はさらに、受信した情報に従い、サーバデバイスのＧＵＩをプログラムによって操作するべく、アプリケーション・プログラミング・インターフェイスを呼び出すことを含む。
【００１４】
本出願の実施形態は、リモートＧＵＩを実装したサーバデバイスに接続したクライアントデバイス上に、ローカルグラフィカルユーザインターフェイス（ＧＵＩ）を生成する方法をさらに提供する。この方法は、クライアントデバイスの入力デバイスを介してクライアントデバイスにおいて音声入力を受信することと、この音声入力を処理して、サーバデバイスのリモートＧＵＩを操作するためのコマンド入力を判定することとを含む。方法はさらに、コマンド入力がリモートＧＵＩを操作するように構成されたことを示す情報をサーバデバイスへ伝送することを含む。
【００１５】
一例において、リモートＧＵＩを実装したサーバデバイスに接続されているクライアントデバイスのタッチスクリーン上に、ローカルグラフィカルユーザインターフェイス（ＧＵＩ）を生成する方法を提供し、この方法は、リモートＧＵＩのベース画像、ならびにリモートＧＵＩ内のＧＵＩ要素を記述したユーザインターフェイス（ＵＩ）メタデータを、サーバデバイスから受信することと、リモートＧＵＩ内のＧＵＩ要素に対応し、受信したＵＩメタデータに従ってタッチスクリーン上に表示すべきネイティブＧＵＩ要素をクライアントデバイスにて生成することと、クライアントデバイスのタッチスクリーン上に表示すべきローカルＧＵＩを生成することとを備え、ここで、ローカルＧＵＩは、サーバデバイスから受信したベース画像、ならびにネイティブＧＵＩ要素を含む。
【００１６】
一例において、ＵＩメタデータは、リモートＧＵＩ内のＧＵＩ要素のコンテンツに関連した意味情報を備え、ＵＩメタデータはツリー型構造に編成されている。
一例において、生成されたネイティブＧＵＩ要素は、リモートＧＵＩ内の対応するＧＵＩ要素とは、サイズ、形状、色、形式、対話方式、アニメーション、対話動作のうちの少なくとも１つにおいて異なっている。
【００１７】
一例において、ネイティブＧＵＩ要素を生成するステップは、クライアントデバイスに対しローカルなユーザインターフェイスフレームワークを使用して、受信したＵＩメタデータに基づいてシステム組み込み（ｓｙｓｔｅｍ−ｐｒｏｖｉｄｅｄ）の制御要素を生成することをさらに備えている。
【００１８】
一例において、ローカルＧＵＩ要素は、サーバデバイスから受信したリモートＧＵＩのベース画像の最上部に配置されたネイティブＧＵＩ要素を備えている。
一例において、方法はさらに、ローカルＧＵＩを介してクライアントデバイスにてタッチ入力を受信することと、受信した入力によってネイティブＧＵＩ要素が操作されたと判定することに応答して、リモートＧＵＩ内の対応するＧＵＩ要素がクライアントデバイスにて操作されたことを示す情報をサーバデバイスに伝送することとを備えている。
【００１９】
一例において、サーバデバイスに伝送された情報は、リモートＧＵＩの一部であるアプリケーションの状態の変更に関する情報を備えている。
一例において、サーバデバイスに伝送された情報は、サーバデバイスのアクセス可能性を補助するアプリケーション・プログラミング・インターフェイスをトリガするように構成されたイベント情報を備え、当該アクセス可能性を補助するアプリケーション・プログラミング・インターフェイスは、サーバデバイスのリモートＧＵＩをプログラムによって操作するように構成されている。
【００２０】
一例において、サーバデバイスに伝送された情報は、リモートＧＵＩのメニューＵＩ要素のメニューナビゲーションを示す情報を備えている。
一例において、ゲストオペレーティングシステムを実行中であるサーバデバイスのグラフィカルユーザインターフェイス（ＧＵＩ）へのアクセスを提供する方法を供与し、この方法は、サーバデバイスのＧＵＩをプログラムによって操作するように構成されたゲストオペレーティングシステムのアプリケーション・プログラミング・インターフェイスを使用して、サーバデバイスのＧＵＩ内のＧＵＩ要素を特定するユーザインターフェイス（ＵＩ）メタデータを生成することと、ＧＵＩのベース画像、ならびに生成されたＵＩメタデータを、サーバデバイスに接続されたタッチ入力クライアントデバイスへ伝送することと、サーバデバイスのＧＵＩ内のＧＵＩ要素にリンクしたユーザ入力を示す情報をタッチ入力クライアントデバイスから受信することと、受信した情報に従ってサーバデバイスのＧＵＩをプログラムによって操作するために、アプリケーション・プログラミング・インターフェイスを呼び出すこととを備えている。
【００２１】
一例において、アプリケーション・プログラミング・インターフェイスを呼び出すステップは、ＵＩメタデータによって特定されたＧＵＩ要素内における特性値の変化を示すイベントを生成することを備えている。
【００２２】
一例において、方法はさらに、サーバデバイスのＧＵＩ内の第２のＧＵＩ要素の状態変化を検知したときに、サーバデバイスのＧＵＩをプログラムによって操作するように構成されたゲストオペレーティングシステムのアプリケーション・プログラミング・インターフェイスを使用して、第２のＧＵＩ要素の状態変化を特定する更新ＵＩメタデータを生成することを備えている。
【００２３】
一例において、方法はさらに、ゲストオペレーティングシステム上で実行中のアプリケーションのアプリケーション状態の変化を検知したときに、サーバデバイスのＧＵＩをプログラムによって操作するように構成されたゲストオペレーティングシステムのアプリケーション・プログラミング・インターフェイスを使用して、アプリケーション状態の変化を特定する更新ＵＩメタデータを生成することを備えている。
【００２４】
一例において、ＵＩメタデータは、ＧＵＩ要素のコンテンツに関連した意味情報を備え、ツリー型構造に編成されている。
一例において、アプリケーションプログラミングインターフェイスは、ゲストオペレーティングシステムのアクセス可能性を補助するアプリケーションプログラミングインターフェイスを備え、これは、ＧＵＩの機能をアプリケーションが生成したイベントに対して公開するように構成されている。
【００２５】
一例において、サーバデバイスのＧＵＩ上のＧＵＩ要素は、アプリケーションウィンドウのメニューバーを備え、サーバデバイスのＧＵＩ内のＧＵＩ要素にリンクしているユーザ入力を示す受信した情報は、サーバデバイスのＧＵＩのメニューバーのメニューナビゲーションを示す情報を備えている。
【００２６】
一例において、リモートＧＵＩを実装しているサーバデバイスに接続されたクライアントデバイス上でローカルグラフィカルユーザインターフェイス（ＧＵＩ）を生成する方法を提供し、方法は、クライアントデバイスの入力デバイスを介してクライアントデバイスにて音声入力を受信することと、音声入力を処理して、サーバデバイスのリモートＧＵＩを操作するために入力されたコマンドを判定することと、リモートＧＵＩを操作するために、入力されたコマンドを示す情報をサーバデバイスに伝送することとを備えている。
【００２７】
一例において、音声入力を処理するステップは、複数の所定のコマンドを、サーバデバイスで実行される対応する入力イベントと関連付ける複数の規則の一致に基づき、コマンド入力を生成するステップをさらに備えている。
【００２８】
一例において、方法はさらに、リモートＧＵＩのベース画像、およびリモートＧＵＩ内のＧＵＩ要素を記述したＵＩメタデータをサーバデバイスから受信することと、クライアントデバイスのタッチスクリーン上に表示すべきローカルＧＵＩを生成することとを備える。ローカルＧＵＩは、サーバデバイスから受信したベース画像、および受信したＵＩメタデータに従って生成されたネイティブＧＵＩ要素を含み、ネイティブＧＵＩ要素は、リモートＧＵＩ内のＧＵＩ要素に対応する。音声入力を処理することは、リモートＧＵＩのネイティブＧＵＩ要素を操作するコマンド入力を決定するために音声入力を処理することを備え、この処理は、受信したＵＩメタデータからの情報に基づいて実行される。方法はさらに、リモートＧＵＩ内で対応するＧＵＩ要素がクライアントデバイスにて操作されたことを示す情報をサーバデバイスへ伝送することを備えている。
【００２９】
一例において、音声入力を処理するステップは、リモートＧＵＩのＧＵＩ要素を特定するＵＩメタデータからの情報と一致するコマンド入力に基づいて、複数の候補テキストの中からコマンド入力を決定することをさらに備えている。
【図面の簡単な説明】
【００３０】
【図１】本発明の１つ以上の実施形態を実現できる、仮想デスクトップインフラストラクチャ（ＶＤＩ）システムのコンポーネントを示す。
【図２】本発明の一実施形態による、図１のＶＤＩシステムのより詳細なコンポーネントを示す。
【図３】本発明の一実施形態による、複数のＵＩ要素を設けたグラフィカルユーザインターフェイスと、これに対応するメタデータとを示す。
【図４】本発明の一実施形態による、リモートデスクトップにて立ち上げられ、ＶＤＩクライアントにおいて表示されるアプリケーションのためのグラフィカルユーザインターフェイスを生成および更新するためのフロー図を示す。
【図５】本発明の一実施形態による、リモートデスクトップを制御するための代替入力デバイスを実装したクライアントデバイスを設けた、図１のＶＤＩシステムの代替実施形態を示す。
【発明を実施するための形態】
【００３１】
本発明の実施形態は、１つのユーザインターフェイススキーム（例えばタッチスクリーン）を設けたクライアントシステム上でユーザ対話を行うことで、別のユーザインターフェイススキーム（例えば、「ポイント＆クリック」デスクトップ）を設けたサーバシステムを遠隔操作する技術およびシステムを提供する。一実施形態では、仮想デスクトップインフラストラクチャ（ＶＤＩ）は、サーバ側デスクトップのグラフィカルユーザインターフェイス（ＧＵＩ）要素をプログラムによって操作して起動させるように構成されたアプリケーション・プログラミング・インターフェイス（ＡＰＩ）を使用して、タッチスクリーン型のクライアントシステム（例えばタブレットコンピュータ、スマートフォン）とサーバ側デスクトップ間のユーザインターフェイススキームの違いをブリッジングする。
【００３２】
例えば、アプリケーションフレームワークとアプリケーション・プログラミング・インターフェイス（ＡＰＩ）（Ｍｉｃｒｏｓｏｆｔ  Ａｃｔｉｖｅ  Ａｃｃｅｓｓｉｂｉｌｉｔｙ  ＡＰＩやＭｉｃｒｏｓｏｆｔ  ＵＩ  Ａｕｔｏｍａｔｉｏｎ  ＡＰＩなど）は、サーバ側デスクトップで、メニューナビゲーションのようなＵＩ要素のコンテンツを引き出し、ネットワーク接続上で（例えば、デスクトップ・リモーティング・プロトコルを介して）これをリモートクライアントシステム（タブレットコンピュータなど）へ送ることができる。メニューコンテンツはネイティブＧＵＩ要素としてレンダリングされ、リモートクライアントに直接関わる。リモートクライアントのユーザはタブレット上で、ローカル側でのこういったメニューのタッチフレンドリーな表示を用いてメニューオプションを選択し、アプリケーションおよびドキュメントを起動し、その他の共通の「ポイント＆クリック」アクティビティを実行することができる。
【００３３】
別の例では、サーバ側デスクトップにてファイルおよびファイルシステムを管理するように構成されたＡＰＩ（Ｆｉｌｅ  Ｅｘｐｌｏｒｅｒ  ＡＰＩなど）を使用すれば、クライアントデバイス上でドキュメントの直接起動やその他のファイル機能を実行するめに、ドキュメントフォルダのエクスポートが促進される。さらに別の例では、サーバ側デスクトップでプロセスおよびスレッドを管理するように構成されたＡＰＩ（Ａｐｐｌｉｃａｔｉｏｎ  Ｐｒｏｃｅｓｓ  ＡＰＩなど）によって、クライアントデバイス上のアイコンを使いアプリケーションを遠隔起動および終了させることができる。メニュー操作、ドキュメント操作、アプリケーション起動のような主要なユーザインターフェイスアクティビティを、サーバで実行中のリモートデスクトップからクライアントへ移動させることで、本発明の実施形態は、タッチスクリーンデバイス上で使用されている従来のポイント＆クリック・アプリケーションのユーザエクスペリエンスを劇的に改善し、従来のリモートディスプレイプロトコルによって生じるユーザエクスペリエンスを増大させる。
【００３４】
以降の説明では、本発明の例示的実施形態を十分に理解できるよう、多数の特定の詳細点について述べる。しかし、当業者には、これらの特定の詳細点のいくつかを用いなくても本発明を実践できることが明らかになるであろう。その他の場合においては、本発明の新規態様を不必要に不明瞭化してしまうことを避けるために、十分に周知のプロセスオペレーションおよび実施詳細については詳細な説明を省いている。
【００３５】
図１は、本発明の１つ以上の実施形態を実施できるＶＤＩシステム１００のコンポーネントを示す。ＶＤＩシステム１００では、ＶＤＩクライアントソフトウェアプログラム（略して「ＶＤＩクライアント」とも呼ばれる）、例えばＶＤＩクライアント１１０が、ローカルコンピューティングデバイスのオペレーティングシステム上、例えばオペレーティングシステム（ＯＳ）１１１の最上部にあるクライアントマシン１０８上で実行する。ＶＤＩクライアントは、ユーザの居場所から離れた場所にある、仮想マシン１５７の１つで、あるいはデータセンターのブレードサーバ（図示せず）で実行中のデスクトップにアクセスするためのインターフェイスをユーザに提供する。用語「デスクトップ」とは、コンピュータオペレーティングシステムとソフトウェアアプリケーションが提供する対話型動作環境の実例（典型的にはディスプレイ、音声出力部、キーボード、マウス入力部の形態）を意味することができる。ＶＤＩクライアントでは、ユーザは、既成のオペレーティングシステム、ならびにＶＤＩクライアントソフトウェアプログラム（ＶＭｗａｒｅ（登録）Ｖｉｅｗ（商標）など）を実行している汎用コンピュータを使用し、あるいは専用のシンクライアント（Ｄｅｌｌ、ＨＰ、ＮＥＣ、Ｓｕｎ  Ｍｉｃｒｏｓｙｓｔｅｍｓ、Ｗｙｓｅ、その他の製品）を使用して、あらゆる場所からリモートデータセンターで実行中のデスクトップにネットワーク１２０経由でアクセスすることができる。
【００３６】
ＶＤＩシステム１００は、ユーザログイン情報を含むユーザアカウント１３６を管理するドメインコントローラ１３５（例えばＭｉｃｒｏｓｏｆｔ（登録）、Ａｃｔｉｖｅ  Ｄｉｒｅｃｔｏｒｙ（登録））と、ＶＤＩクライアントと仮想マシン１５７または他のプラットホームで実行中のデスクトップとの間の接続を管理する接続ブローカ１３７とを含むことができる。ドメインコントローラ１３５と接続ブローカ１３７は別個のサーバ上で、または、同一あるいは別々のサーバ上で実行中の別個の仮想マシン内で実行することができる。ここで例証する本発明の実施形態では、デスクトップは、各々が仮想ソフトウェア１５８とハードウェア１５９を実装した複数の物理コンピュータ１５０、１５２、１５４上にインスタンス生成によって作成された仮想マシン１５７内で実行される。物理コンピュータ１５０、１５２、１５４は、仮想マシン管理サーバ１４０によって制御され、また共有永続ストレージシステム１６０につながれていてよい。
【００３７】
ＶＤＩシステム１００の全コンポーネントはネットワーク１２０を介して通信する。簡略化の目的で、単一のネットワークを示しているが、実際に実施する場合には、ＶＤＩシステム１００のコンポーネントどうしは、同一のネットワークまたは異なる複数のネットワーク上で接続してもよいことが認識されるべきである。さらに、仮想デスクトップインフラストラクチャの特定の構成については上で述べ、図１に図示したが、本発明の１つ以上の実施形態は、他の構成の仮想デスクトップインフラストラクチャで実践することもできることが認識されるべきである。
【００３８】
図２は、ユーザが、ＶＭ１５７上で実行中のデスクトップ２５０にネットワーク１２０経由でアクセスできるようにするためのＶＤＩクライアント１１０を実装したＶＤＩシステム１００のコンポーネントをより詳細に示す。ＶＤＩクライアント１１０はクライアントマシン１０８上で実行し、また、ＶＤＩデータ２１２の交換や、リモートデスクトップ２５０へのユーザアクセスの供与を行うために、ＶＭ１５７内で実行中のＶＤＩホストエージェント２００と通信する。本明細書で述べる実施形態では、クライアントマシン１０８は、統合型のディスプレイ出力部とタッチスクリーン入力部を設けたあらゆるコンピューティング装置であってよい。しかし、本発明はこれらの特定の装置に限定されるものと理解されるべきではない。例えば、点字読取装置のような出力デバイスと、ボイスアクティベーションのような入力デバイス（以降でさらに説明する）とを、上記の代替として利用してもよい。典型的に、クライアントマシン１０８は、ＶＭ１５７上で実行中であるデスクトップの「ポイント＆クリック」ユーザインターフェイスとは異なる「タッチ＆ジェスチャ」形式のユーザインターフェイスを設けている。
【００３９】
図２の付記に示すように、デスクトップ２５０は、アプリケーション２１０のＵＩ要素２５４の操作またはこれとの対話をポインタ（例えばマウスカーソル２５２）からの入力に頼った、従来の「ポイント＆クリック」形式のユーザインターフェイスを備えたアプリケーション２１０を設けていてよい。クライアントマシン１０８とデスクトップ２５０との間で形式の異なるユーザインターフェイスを使用すると、ユーザエクスペリエンスが低下し、ルーチンのユーザタスクが苛立たしいエクササイズになってしまう可能性がある。この問題は特に図２より明白である。ここでは、リモートデスクトップ２５０のグラフィカルユーザインターフェイスは、より小型で精密なポインタ（例えばマウスカーソル２５２）で操作され対話することを見込んであるために、タッチ入力では指すことが難しいほどの（サークル２６８に示すような）小型サイズにされたウィジェットおよび要素を設けていてよい。
【００４０】
一実施形態によれば、ＶＭ１５７上で実行するユーザデスクトップの「ポイント＆クリック」形式のユーザインターフェイスと、クライアントマシン１０８の「タッチ＆ジェスチャ」ユーザインターフェイスの間の変換を行うために、ＶＤＩクライアント１１０は、ＶＭ１５７上で実行中の対応するＵＩＶエージェント２０４と通信するように構成されたユーザインターフェイス仮想化（ＵＩＶ）クライアント２０２を設けている。一実施形態では、ＵＩＶクライアント２０２およびＵＩＶエージェント２０４は、ＵＩ入力イベント２３０形式およびＵＩメタデータ２２０形式のメッセージを交換し、このメッセージは、適当なエンドポイントで、リモートデスクトップへの入力要素およびネイティブＧＵＩ要素にそれぞれ変換される。
【００４１】
一実施形態では、ＶＭ１５７上で実行するＵＩＶエージェント２０４は、ＶＭ１５７のデスクトップ上に見られるユーザインターフェイス（ＵＩ）のウィジェットおよび要素に関連したメタデータを取得するために、インターフェイス対話ＡＰＩ２０８を呼び出すように構成されている。一実施形態では、インターフェイス対話ＡＰＩ２０８は、ＶＭ１５７のデスクトップ上に見られるユーザインターフェイス（ＵＩ）のウィジェットおよび要素に関連したメタデータを取得するために、ゲストＯＳ２０６によって公開されるＡＰＩであってよい。例えば、インターフェイス対話ＡＰＩ２０８は、補助的なテクノロジー（例えばスクリーンリーダ）で従来使用されている、視力、聴力、動作に障害のある人物が、ゲストＯＳ上で実行するアプリケーションまたはゲストＯＳ自体にアクセスし易くするためのＡＰＩ（例えば、Ｍｉｃｒｏｓｏｆｔ  Ａｃｃｅｓｓｉｂｉｌｉｔｙ  ＡＰＩ）、あるいは、ＡＰＩ自動ソフトウェアテスティング（Ｍｉｃｒｏｓｏｆｔ  ＵＩ  Ａｕｔｏｍａｔｉｏｎ  ＡＰＩ）であってよい。さらにインターフェイス対話ＡＰＩ２０８は、ゲストＯＳ２０６のＵＩ要素ならびにゲストＯＳ２０６上で実行するアプリケーション２１０を識別し、操作し、これと対話するために、（例えば、ＵＩＶエージェント２０４について）プログラムによるアクセスを可能にすることにより、ＵＩ要素の機能性を公開する構成になっている。
【００４２】
代替の実施形態では、インターフェイス対話ＡＰＩ２０８は、時間と共にアプリケーションモデルを構築してゆくように構成されたソフトウェアフレームワークであってよく、この構築には、あらゆるアプリケーション機能を  アプリケーションのインターフェイスの他のあらゆる地点から起動する効率的な方法を決定するために、ＧＰＳ形式の「再計算」を実行することが含まれる。このような「再計算」機能は、何かが上手くいかず、代理動作がデスクトップ側ＵＩＶエージェント２０４へ送られる時点でＶＤＩクライアント１１０が予測した状態とはアプリケーションの状態が違ってしまった場合にも、ユーザ入力の注入を確実に行う上で役立つ。一実施形態では、インターフェイス対話ＡＰＩ２０８は、ＵＩ要素を妨害し、アプリケーションおよびアプリケーションオブジェクトの状態を判断し、シミュレートされたユーザ動作をＵＩ要素上で実行するように構成されている。
【００４３】
ＶＤＩホストエージェント２００は、従来のリモートデスクトップ技術に従って、ディスプレイおよび入力データを備えたＶＤＩクライアント１１０に対してＶＤＩデータ２１２を伝送するように構成されている。ＶＤＩデータ２１２は、クライアントマシン１０８にリモートデスクトップ２５０のＧＵＩを表示するために使用されるベースＧＵＩ画像２６４を含んでいてよい。いくつかの実施形態では、ベースＧＵＩ画像２６４は、デスクトップ２５０でのディスプレイの一部または全体を示すグラフィカルビットマップあるいはフレームバッファであってよく、これはリモートデスクトップのスクリーンショットと類似している。別の実施形態では、ベースＧＵＩ画像２６４は、クライアントマシン１０８においてデスクトップ２５０のＧＵＩを表す画像をレンダリングするための図面線、多角形、その他の形状、フォント、および基本図形のグラフィカル情報であってよい。
【００４４】
ＶＤＩクライアント１１０とＶＤＩホストエージェント２００との間でＶＤＩデータ２１２が伝送されることに加えて、ＶＭ１５７上で実行するＵＩＶエージェント２０４は、クライアントデバイス１０８上のＵＩＶクライアント２０２へＵＩメタデータ２２０を伝送するように構成されている。ＵＩメタデータ２２０は、インターフェイス対話ＡＰＩ２０８によって提供された、ＶＭ１５７上のユーザデスクトップの１つ以上のＵＩ要素を記述する情報を含んでいる。ＵＩメタデータ２２０で特定できるＵＩ要素の例には、ウィンドウ、ボタン、メニュー、ダイアログまたはメッセージボックス、リスト、メニューバー、スクロールバー、タイトルバー、ステータスバー、サイズグリップ、ツールバー、ツリービューコントロール、リストビューコントロール、ドロップダウンリスト、入力キャレットがある。ＶＤＩクライアントでのレンダリングに基本図形または描画オペレーションを使用するこれまでのアプローチと異なり、ＵＩメタデータ２２０は、ユーザデスクトップの１つ以上のＵＩ要素のコンテンツおよびアプリケーション状態に関する意味情報を含む。例えば、ＵＩメタデータ２２０は、ただ単に長方形メニューを描画するための基本図形を提供するのではなく、例えばメニュー内の選択可能なオプションといった、メニューのコンテンツを表す意味情報を提供する。ＶＤＩクライアント１１０は、ＵＩメタデータ２２０に基づいて、これに対応する、ＶＭ１５７上で実行するユーザデスクトップ上のＵＩ要素とは異なった表示、動作、対話を行うＧＵＩ要素を単独でレンダリングできる。このようにして、ＶＤＩクライアント１１０はＵＩメタデータ２２０により、クライアントマシン１０８（例えばタッチスクリーン）のインターフェイス形式およびフォームファクタに最も適したネイティブＧＵＩ要素の生成、レンダリング、表示を行えるようになる。一実施形態では、図３で詳細に示すように、ＵＩメタデータ２２０内の情報を、ユーザデスクトップのＵＩ要素に対応したルート要素および子要素を持つ階層的またはツリー型のデータ構造に編成することができる。
【００４５】
図３は、対応するＵＩメタデータ２２０を設けたアプリケーション２１０のための、本発明の一実施形態によるグラフィカルユーザインターフェイス３００を示す。グラフィカルユーザインターフェイス３００はＵＩ要素とサブ要素から成っていてよい。図に示すように、アプリケーション２１０のグラフィカルユーザインターフェイス３００は、複数のメニューオプション（例えば「ファイル」、「編集」、「ビュー」、「ヘルプ」など）を有するメニューバー３０６を持ったウィンドウ３０４を含む。各メニューオプションは、さらなるオプション（例えば「新規」、「開く」、「保存」、「終了」など）およびポップアウトメニューまたはダイアログボックスを含むサブメニュー３０８を起動させることができる。
【００４６】
一実施形態では、インターフェイス対話ＡＰＩ２０８により、アプリケーション２１０が、グラフィカルユーザインターフェイス３００の構造を表すＵＩメタデータ２２０のツリー構造を公開することが可能になる。ツリー内の要素は、デスクトップ２５０上のＧＵＩのプログラムによる操作を促進する特性および方法を公開する。一実施形態では、ＵＩメタデータ２２０は、特定された各ＵＩ要素について以下を含んでよい：事前に決定されたＵＩ要素のためのラベル（例えば、アプリケーション２１０の開発者およびゲストＯＳ２０６によりコード割り当てされる）、ＵＩ要素のタイプを記述したロール情報（例えば、ＲＯＬＥ＿ＳＹＳＴＥＭ＿ＰＵＳＨＢＵＴＴＯＮ）、所与の瞬間におけるＵＩ要素の状態を説明する特性（例えば、不可視、利用不可、フォーカス中、フォーカス可能、押された、など）、および、ＵＩ要素が表す情報を表示する、ＵＩ要素に含まれるその他の値（例えば、比率、整数、非整数、テキスト、ビジュアル）。例えば、ＵＩメタデータ２００は、識別子（例えばｉｄ＝“９８２”）、リモートデスクトップ内でウィンドウ３０４が「フォーカス」状態にあることを示す状態特性を含む、ウィンドウ３０４のための情報と、ウィンドウ３０４内に含まれるＵＩ要素のための情報（例えば、タイトルバーおよびメニューバー３０６）とを含んでいてよい。別の例では、メニュー３０８のメタデータは、メニュー３０８内の複数のメニューアイテムのための情報、例えば「新規」、「開く」、「保存」などのためのアイテムを含む。いくつかの実施形態では、ＵＩメタデータ２２０は、デスクトップ２５０上のＵＩ要素に関連したサムネイルまたはアイコンのようなグラフィックデータを含むことができる。
【００４７】
再び図２を参照すると、ＵＩＶクライアント２０２は、ＵＩＶエージェント２０４から受信したＵＩメタデータ２２０に基づいたリモートデスクトップ上の、対応するＵＩ要素またはウィジェットと同じ機能および情報を持った「ネイティブ」ＵＩ要素またはウィジェットを構築および表示するように構成されている。一実施形態では、ＵＩＶクライアント２０２は、インターフェイス対話ＡＰＩ２０８からのＵＩメタデータ２２０に基づいた「ポイント＆クリック」形式のＵＩ要素２５４に対応する、ネイティブで「タッチ＆ジェスチャ」形式のＧＵＩ要素２６２を生成できる。いくつかの実施形態では、ＵＩＶクライアント２０２が生成したネイティブＧＵＩ要素２６２は、対応するデスクトップのＵＩ要素と、サイズ、形状、色、形式、対話方式、アニメーション、対話動作などにおいて異なっていてよい。例えば、ＵＩＶクライアント２０２は、リモートデスクトップ２５０上の従来のドロップダウンリストから引き出したＵＩメタデータ２２０を使用することで、スワイプジェスチャに反応して回転する大型車輪のように現れるネイティブＧＵＩ要素を生成できる。別の例では、ＵＩＶクライアント２０２は、クライアントマシン１０８のフォームファクタとタッチスクリーンエルゴノミクス用にを最適化した、再フォーマットバージョンのナビゲーションメニューを呈示することができる。図に示すように、ネイティブＧＵＩ要素２６２を、ＶＤＩデータ２１２に示されたＧＵＩ画像２６４の上部にオーバレイ表示して、クライアントGUI２６０を形成できる。一実施形態では、ＵＩＶクライアント２０２は、クライアントマシン１０８に対してローカルであるネイティブグラフィカルフレームワークまたはユーザインターフェイスフレームワークを使用し、受信したＵＩメタデータ２２０に基づいて、１つ以上のネイティブＧＵＩ要素をレンダリングするように構成されている。
【００４８】
さらにＵＩＶクライアント２０２は、構築したネイティブＧＵＩ要素２６２上のユーザ入力を取り込み、ＵＩ入力イベント２３０を、ＶＭ１５７内で実行中のＵＩＶエージェント２０４へ伝送するように構成されている。一実施形態では、ＵＩＶクライアント２０２は、ネイティブＧＵＩ要素２６２との対話を表す、タッチ入力２６８に基づいて、ＵＩ入力イベント２３０を生成する構成になっている。一実施形態では、ＵＩ入力イベント２３０は、これに対応するＶＭ１５７上のリモートデスクトップ２５０におけるＧＵＩ要素がクライアントマシン１０８にて操作されたことを示す情報を含む。いくつかの実施形態では、ＵＩ入力イベント２３０は、対応するリモートデスクトップ２５０でのＵＩ要素またはオプションの選択、起動、状態変更、またはこれとの対話を示すことができる。別の実施形態では、ＵＩ入力イベント２３０は、リモートデスクトップ２５０でのＵＩ要素に対応するオペレーションまたはオプションの実行あるいは呼び出しを示すことができる。ＵＩＶエージェント２０４は、ＶＭ１５７上のリモートデスクトップのユーザインターフェイスの入力をシミュレートし、プログラムでの操作を促進するために、ＵＩＶクライアント２０２から受信したＵＩ入力イベント２３０に従い、インターフェイス対話ＡＰＩ２０８を使用して、対応するアプリケーション２１０またはゲストＯＳ２０６のＵＩ要素に問合せ、これを呼び出すように構成される。
【００４９】
図４は、リモートデスクトップにて立ち上げてＶＤＩクライアントで表示するアプリケーションのＧＵＩを生成し、更新する工程のフロー図を示す。ステップ４１０〜４１５は、リモートデスクトップをホストする仮想マシンで実行中のＶＤＩホストエージェント２００によって実施される。ステップ４２０〜４２７はＶＩＤクライアント１１０によって実施される。図４は、本開示の実施形態によるメニューナビゲーションを提供するための例示的なステップを説明しているが、ここで述べる技術を、ダイアログ、クリップボード機能、アプリケーションおよびドキュメントの立ち上げ、デスクトップ、アプリケーション特化のエクスペリエンスを含むその他のＵＩエクスペリエンスにまで拡張できる点が理解されるべきである。
【００５０】
ステップ４２０で、ＶＤＩクライアント１１０は、ユーザが操作するクライアントマシン１０８によって実行されたＵＩＶトリガを検知する。一実施形態では、ＵＩＶトリガは、ユーザあるいはユーザが起動したＵＩボタンによって実行された所定のジェスチャ（例えば、一意のスワイプジェスチャ）であり、ＶＤＩクライアント１１０が、ネイティブＧＵＩ要素を使用して、リモートデスクトップ上で実行中のアクティブなアプリケーション（例えばアプリケーション２１０）の１つ以上のＵＩ要素をレンダリングする必要がある旨を示している。ステップ４２１で、ＶＤＩクライアント１１０がＵＩＶトリガの検知に応答して、ＶＤＩホストエージェント２００からのＵＩメタデータを要求し、ステップ４１０で、ＶＤＩホストエージェント２００がこの要求を受信する。
【００５１】
ステップ４１１で、ＶＤＩホストエージェント２００はＵＩメタデータ要求の受信に応答して、アプリケーション２１０にＵＩメタデータ（例えばＵＩメタデータ２２０）を取得するために、ゲストＯＳ２０６のインターフェイス対話ＡＰＩ２０８にＡＰＩコールを行う。例えば、ＶＤＩホストエージェント２００は、フォーカス中のアプリケーションのメニュー一覧、サブメニュー、メニューアイテムを持った階層メニュー構造を取得できる。一実施形態では、ＵＩＶエージェント２０４は、リモートデスクトップ上の各ＵＩ要素についてメタデータを戻すのではなく、ユーザデスクトップのＵＩ要素のサブセットを識別し、ＵＩ要素のサブセットのみにＵＩメタデータ２２０を生成することができる。例えば、ＵＩＶエージェント２０４は、現在フォーカスされているアプリケーションについてのみＵＩメタデータを生成することができる。別の実施形態では、ＵＩＶエージェント２０４は、受信したＵＩメタデータ要求に基づき、リモートデスクトップ上の１つ以上のＵＩ要素にＵＩメタデータを生成できる。例えば、ＵＩＶエージェント２０４は、メニューメタデータのみの要求を示したＶＤＩクライアント１１０からの要求に基づいて、階層メニューバーにＵＩメタデータを生成できる。いくつかの実施形態において、ＶＤＩホストエージェント２００は、アクティブなアプリケーションまたは基礎のゲストＯＳ１０６における変化を検知すると、これに応答してゲストＯＳ１０６からのＵＩメタデータをプロアクティブに要求できる（例えば、Ｗｉｎｄｏｗｓ  Ｅｖｅｎｔ ｃａｌｌｂａｃｋ機能経由で受信したイベントを介して行う）。
【００５２】
ステップ４１２で、ＶＤＩホストエージェント２００は、（例えば、ＶＤＩクライアント１１０とＶＤＩホストエージェント２００の間に確立されたＶＤＩプロトコルに従って）ＧＵＩのベース画像を生成し、続いてステップ４１３で、このＧＵＩのベース画像を、階層メニュー構造のコンテンツと共にＶＤＩクライアント１１０へ伝送する。上で述べたように、ベース画像（例えばベースＧＵＩ画像２６４）は、リモートデスクトップの画像をクライアントマシンで表示するためのグラフィック情報を提供する。一例では、ベース画像は、クライアントマシンに表示するデスクトップ２５０全体の未処理の画素データ（スクリーンショットと類似）であってよい。別の例では、ベース画像は、先に伝送された未処理の画素データの少なくとも一部を変更するための、更新された画素データのセットであってよい。いくつかの実施形態において、ベース画像は、リモートデスクトップのディスプレイをクライアントマシンのクライアントＧＵＩ内に描画するための、描画オペレーションおよび基本図形であってよい。
【００５３】
一実施形態では、ＵＩＶクライアント２０２およびＵＩＶエージェント２０４は、メッセージングバスまたはメッセージパッシングサービスを使用して、ネットワーク１２０上でＵＩ入力イベント２３０およびＵＩメタデータ２２０の送受信を行うことができる。別の実施形態では、ＶＤＩホストエージェント２００は、リモートディスプレイチャネル（例えばＰＣｏＩＰ、ＨＴＭＬ５）経由でＶＤＩクライアント１１０へ送られたＶＤＩデータ２１２にＵＩメタデータ２２０を組み込むことができる。同様に、ＶＤＩクライアント１１０は、ＶＤＩホストエージェント２００へ伝送されたＶＤＩデータ２１２にＵＩ入力イベント２３０を組み込むことができる。
【００５４】
ステップ４２２で、ＶＤＩクライアント１１０が、ＧＵＩのベース画像を階層メニュー構造のコンテンツと共に受信する。ステップ４２３で、ＶＤＩクライアント１１０が、受信したベース画像および階層メニュー構造のコンテンツに基づいてＧＵＩをレンダリングし、次にステップ４２４でＧＵＩを表示する。表示されたＧＵＩには、ＶＤＩホストエージェント２００から受信したベース画像と、ＶＤＩクライアント１１０がメニュー構造コンテンツに基づいて生成したネイティブＧＵＩ要素（つまり、ＶＤＩクライアント１１０を実行しているクライアントマシン１０８に対してネイティブである）とが含まれる。いくつかの実施形態では、ネイティブＧＵＩ要素は表示されたＧＵＩ内に、ＶＤＩホストエージェント２００から受信したベース画像の上部にオーバレイ表示するＵＩ要素として含まれる。いくつかの実施形態では、ネイティブＧＵＩ要素は表示されたＧＵＩ内に、ＶＤＩホストエージェント２００から受信したベース画像内に組み込まれた半透明層として含まれる。一実施形態では、ＶＤＩクライアント１１０は、「タッチフレンドリー」構成のネイティブＧＵＩ要素を生成する。例えば、ＶＤＩクライアント１１０は、ポインタまたはマウスカーソルによって起動する構成のＧＵＩ要素と比べて、タッチオブジェクト（例えば人間の指、スタイラス）による起動をより簡単に促進するサイズおよび形状を持ったネイティブＧＵＩ要素を生成する。別の例では、ＶＤＩクライアント１１０は、タッチベースの入力およびジェスチャ（タップ、スワイプ、マルチポイントジェスチャなど）に反応するネイティブＧＵＩ要素を生成する。このようにして、ＶＤＩクライアント１１０によって、タッチフレンドリー方式にてレンダリング表示されながら、リモートデスクトップからのＵＩ要素に対応するネイティブＧＵＩ要素との対話がユーザにとって可能になるため、ユーザは向上したユーザインターフェイスを体験できる。さらに、本発明の実施形態は、クライアントマシン１０８に対してローカルなネイティブグラフィックフレームワークまたはユーザインターフェイスフレームワークを使用できることで、作業をクライアントマシン１０８のグラフィック機能に任せ、依存することが可能になる。
【００５５】
ステップ４２５で、ユーザがＧＵＩを介してネイティブＧＵＩ要素に行った入力（例えば、タッチスクリーン入力）が、ＶＤＩクライアント１１０によって検知される。入力を検知したＶＤＩクライアント１１０は、ステップ４２６でこの入力を処理する。階層メニュー構造の例において、この入力は、下層のメニューアイテムを表示させるタイプのもの、あるいは最終選択であってよい。前者の場合、流れはステップ４２３へ戻り、ＧＵＩが表示用に再び生成される。入力がメニューの最後の選択肢である場合には、ステップ４２６で、特定のメニュー項目が選択されたことを示す情報（例えばＵＩ入力イベント２３０）がＶＤＩホストエージェントへ伝送される。
【００５６】
ステップ４１４で、ＶＤＩホストエージェントが、特定のメニュー項目が選択されたことを示すこの情報を受信する。ステップ４１５で、ＶＤＩホストエージェントがゲストＯＳにＡＰＩコール（例えば、インターフェイス対話ＡＰＩ２０８）を行い、特定のメニュー項目が選択されたことを通信する。その後、流れはステップ４１１へ戻り、ＧＵＩのベース画像が再生成される。
【００５７】
いくつかの実施形態では、ＶＤＩホストエージェントは、ゲストＯＳ２０６のオブジェクトモデルの中からオブジェクトを１つ特定する識別子を使用し、プログラムによってゲストＯＳのユーザインターフェイスを操作する。キーボードおよびマウスイベントのシミュレーションを行うために単純にサーバのキーボードおよびマウスドライバを呼び出す従来のアプローチと異なり、ＵＩＶエージェント２０４は、インターフェイス対話ＡＰＩ２０８を使用し、ＶＤＩクライアントから受信したＵＩ入力イベントに従って、デスクトップ２５０のＵＩ要素を直接操作する。いくつかの実施形態において、ＵＩＶクライアント２０２が、既に構成されインターフェイス対話ＡＰＩ２０８によって使用される状態となったＵＩ入力イベントを伝送するケースでは、ＵＩＶエージェント２０４は、受信したＵＩ入力イベントを直接インターフェイス対話ＡＰＩ２０８に送る。別の実施形態では、１つ以上のＵＩ要素のアプリケーション状態または特性値が変更されたことを示すために、ＵＩＶエージェント２０４が、受信したＵＩ入力イベントをインターフェイス対話ＡＰＩ２０８用のイベントまたはパラメータに変換する。一例として、ＵＩＶエージェント２０４は、インターフェイス対話ＡＰＩ２０８を使用して、要素起動、要素選択、空間ナビゲーション、論理ナビゲーション、警告、フォーカス変更、およびその他の特性値の変更を、所与のＵＩ要素に対して示すことができる。
【００５８】
一実施形態によれば、ＶＤＩクライアント１１０は、ドロップダウンリスト、ナビゲーティングメニュー、サブメニュー内のアイテムのスクローリングのように、複数のユーザ対話を要するＵＩ要素の待機時間と即応性を改善する。１つの使用例において、デスクトップ上のメニューナビゲーションでは、「編集」メニューボタン上をポイント＆クリックしてドロップダウンメニューを表示させ、さらに、１つのメニューアイテム上をポイント＆クリックしてさらなるメニューを表示させることができる（例えば「ペーストスペシャル」など）。この使用例を、従来のアプローチの下でリモートデスクトップに対して実行するには、ＶＤＩクライアントは、ウィンドウおよびメニューバーのＧＵＩ画像をリモートネットワーク上で受信し、このウィンドウメニューバーをレンダリング表示させ（これには複数フレームのＧＵＩアニメーションを含むことがある）、クリック入力を伝送し、リモートネットワーク上でウィンドウ、メニューバー、及び現在の編集メニュー（ｎｏｗ  Ｅｄｉｔ  ｍｅｎｕ）のＧＵＩ画像を受信し、これらウィンドウ、メニューバー、及び現在の編集メニューのＧＵＩ画像をレンダリング表示させ、（恐らくはメニューアイテムの１つについて）クリック入力を伝送する、などを行う必要があるかもしれない。これとは対照的に、本発明の実施形態によってＶＤＩクライアント１１０は、ネットワーク要求を繰り返して待機時間を増大させることで「ラグの多い」ユーザエクスペリエンスを作り出すことなく、ＵＩメタデータを使用してネイティブＧＵＩ要素を構築および修正できるようになる。実際に、本発明の実施形態は、ユーザがメニューオプションを選択する以前であってもアプリケーション内のメニューナビゲーションメタデータにアクセスする手段を提供する。ドラッグ＆ドロップ、ボックスリサイズ、キーアニメーションのようなグラフィカルフィードバックを使用するインターフェイス関連のオペレーションは、例えばリモートセッションオーバレイとしてクライアントデバイス上でローカルに実行され、次いでリモートセッション内で実行される。
【００５９】
本発明の実施形態は、クライアントデバイス上のタッチスクリーン用に構成された、タッチベースで、ジェスチャ駆動型インターフェイスのネイティブＧＵＩ要素を生成するリモートデスクトップシステムについて説明しているが、ここで述べているクライアントデバイスの様々な実施形態は、ここで述べている技術に従ってリモートデスクトップを制御するように構成された、例えばマイクロホン、加速度計、ジャイロスコープセンサ、近距離無線通信センサなどの代替的な非タッチベースの入力デバイスを含むことができる。図５には、図１の、リモートデスクトップを制御する代替的な入力デバイスを実装したクライアントデバイスを設けたＶＤＩシステム１００の１つの例示的な代替実施形態を示す。
【００６０】
図５は、入力デバイス５０６を有し、ＶＭ１５７上で実行中のデスクトップ２５０にユーザをネットワーク１２０経由でアクセスさせるクライアントデバイス５０２を実装したＶＤＩシステム５００のコンポーネントを示す。ここで説明する実施形態では、クライアントデバイス５０２は、ユーザインターフェイスの形式を提供するディスプレイ出力部および入力デバイス５０６を装備した、あらゆるコンピューティングデバイスであってよく、ユーザインターフェイスの形式は、デスクトップ２５０内のポインタ入力（例えばマウスカーソル２５２）が供する「ポイント＆クリック」ユーザインターフェイスとは違っていてよい。入力デバイス５０６の例には、マイクロホン、加速度計、ジャイロスコープセンサ、近距離無線通信センサ、光センサ、近接センサなどを含む。
【００６１】
一実施形態によれば、クライアントデバイス５０２上で実行するＶＤＩクライアント５１０は、リモートデスクトップ上の従来の「ポイント＆クリック」駆動型インターフェイスを、入力デバイス５０６での操作が可能なインターフェイスに変形させるように構成されている。例えば、ＶＤＩクライアント５１０は、ＶＤＩデータ２１２からのベースＧＵＩ画像２６４と音声操作可能な（タッチベースのジェスチャではない）１つ以上のネイティブＧＵＩ要素５１４とを組み込むクライアントＧＵＩ５１２を生成するように構成されている。一実施形態では、ＶＤＩクライアント５１０は、ユーザより受信した音声入力からグラフィカルフィードバックを提供するネイティブＧＵＩ要素５１４（図５中のマイクロホンアイコンにて示す）を生成するように構成される。
【００６２】
一実施形態では、ＶＤＩクライアント５１０は、ユーザが発声した音声コマンドを表すオーディオ入力信号５１６を、クライアントデバイス５０２の入力デバイス５０６（例えばマイクロホン）から受信するように構成されている。ＵＩＶクライアント５０４は、スピーチ・トゥ・テキスト・エンジンを用いてオーディオ入力信号５１６を復号し、この復号したオーディオ信号に基づいて、ＵＩ入力イベント２３０をＵＩＶエージェント２０４へ伝送する。例えば、ＵＩＶクライアント５０４は、デスクトップ２５０上のアプリケーション（例えばアプリケーション２１０）を立ち上げるためにユーザが発生した「エクセルを開く」という音声コマンドを処理する。また、ＵＩＶクライアント５０４は、コマンドテキスト（例えば「エクセルを開く」）を生成し、この生成したコマンドテキストに基づいてＵＩ入力イベント２３０を決定するために、オーディオ入力信号５１６を処理する。いくつかの実施形態では、スピーチ・トゥ・テキスト・エンジンは、所与の入力されたオーディオ信号とのベストマッチを表すテキスト値を生成できる。いくつかの実施形態では、スピーチ・トゥ・テキスト・エンジンは、内蔵タイプまたは外付けタイプでサードパーティ製の、オーディオ信号を処理する音声認識コンポーネントを利用できる。
【００６３】
一実施形態では、ＵＩＶクライアント５０４は、所定のコマンドと一致するコマンドテキストを1つ以上のＵＩ入力イベント２３０と関連付けするルールベースのエンジンを使用して、オーディオ入力信号５１６から生成したコマンドテキストを処理するように構成されている。所定のコマンドの例には、「（アプリケーション）を開く」、「ドキュメントを表示」、「（ファイル）を検索」を含む。ＶＭ１５７におけるＵＩＶエージェントは、ＵＩＶクライアント５０４から受信したＵＩ入力イベント２３０に基づいてＶＭ１５７で１つ以上のコマンドを直接実行するように構成されている。上述したように、ＵＩＶエージェントは、ゲストＯＳの１つ以上のＡＰＩを使用して、１つ以上のコマンドを実行できる。
【００６４】
一実施形態では、ＵＩＶクライアント５０４は、ＵＩメタデータ２２０が提供したコンテキストアウェアネスを使用して、入力デバイス５０６からの入力を処理する。例えば、ＵＩＶクライアント５０４は、デスクトップ２５０上で実行中のアプリケーション（例えばアプリケーション２１０）のメニューを誘導する、ユーザからの「ファイル、新規」という音声コマンドを処理することができる。ＵＩＶクライアント５０４は、コマンドテキスト（例えば「ファイル、新規」）を生成して、この生成したコマンドテキストに基づいてＵＩ入力イベント２３０を決定するために、オーディオ入力信号５１６を処理する。一実施形態では、ＵＩＶクライアント５０４は、デスクトップ２５０の現行のコンテキストのルールおよびアプリケーション状態を含むルールベースのエンジンを使用して、ＵＩ入力イベント２３０を生成するために、コマンドテキストを処理することができる。いくつかの実施形態では、ＵＩＶクライアント５０４は、クライアントＧＵＩ５１２上の中間ＧＵＩ要素５１８（ネイティブＧＵＩ要素２６２と類似）に基づいて、ＵＩ入力イベント２３０を決定することができる。例えば、ＵＩＶクライアント５０４は、コマンドテキスト「ファイル新規」が、クライアントＧＵＩ５１２で現在レンダリング中の中間ＧＵＩ要素５１８（「ファイル」メニュー、および「新規」メニューアイテムとして示す）に対応していると決定する。
【００６５】
一実施形態では、ＵＩＶクライアント５０４は、入力デバイス５０６からのオーディオ入力信号５１６の処理を、ＵＩＶエージェント２０４から受信したＵＩメタデータ２２０に基づいて修正するように構成されている。ＵＩＶクライアント５０４は、そのスピーチ・トゥ・テキスト・エンジンにＵＩメタデータ２２０からの情報を供給することで、スピーチ・トゥ・テキスト・エンジンから戻された値をデスクトップ２５０上の特定のコンポーネントへとバイアスさせることができる。例えば、ＵＩＶクライアント５０４は、どのアプリケーションがアクティブであるか、また、どのＵＩ要素がスピーチ・トゥ・テキスト変換からの候補テキストとの一致の比率を増加あるいは減少させることにフォーカスしているかを示す、ＵＩメタデータ２２０から取得した情報を使用できる。提示された例において、ＵＩＶクライアント５０４は、「開く」という言葉が入った音声コマンドは、所定のグローバルコマンド「開く」よりも、ＧＵＩ要素５１８におけるメニューアイテム「開く」を参照する場合の方が多いということを、ＵＩメタデータ２２０を使用して示すことができる。
【００６６】
別の代替実施形態では、ＵＩＶクライアント５０４は、センサ入力（例えば加速度計からのもの）によって操作可能な、１つ以上のネイティブＧＵＩ要素５１４を生成するように構成されている。例えば、ＵＩＶクライアント５０４は、加速度計からの入力に応答する、スクロール可能なＵＩ要素を生成できる。ＵＩＶクライアント５０４は、加速度計から動作入力またはその他の位置入力を受信し、これに対応するＵＩ入力イベント２３０をＵＩＶエージェント２０４へ伝送するように構成されている。一例では、伝送されたＵＩ入力イベント２３０は、デスクトップ２５０上の対応するＧＵＩを特定の方向へスクロールさせ、音声を発生させる（例えば、「スクロールアップ、高速」）ことができる。いくつかの実施形態では、ＵＩＶクライアント５０４を、所定の入力マッピングに従い、入力デバイス５０６からのセンサ入力を１つ以上のＵＩ入力イベント２３０と関連付けするように構成できる。例えば、ＵＩＶクライアント５０４は、ユーザがその横長の向きを縦長にするようにクライアントデバイス５０２を操作したことを示す回転入力を入力デバイス５０６から受信できる。ＵＩＶクライアント５０４は、所定の入力マッピングに基づいて、この回転入力を、ＵＩＶエージェント２０４が行う「ウィンドウを最大化」というインターフェイスコマンドに対応したＵＩ入力イベントに変換することができる。
【００６７】
ここで述べた様々な実施形態は、コンピュータシステムに記憶されたデータが関与する、コンピュータで実施される様々な動作を採用することができる。例えば、これらの動作は物理的な量の物理的な操作を要することが通常であり、必ずということではないが、こうした量は電気信号もしくは磁気信号の形式を取り、この場合、これらの信号またはこれを表すものは、記憶、伝達、組み合わせ、比較、あるいは操作されることが可能である。さらに、こうした操作は、生成する、識別する、決定する、比較するといった用語で言及されることが多い。ここで説明される本発明の１つ以上の実施形態の一部を形成するあらゆる動作は、有用なマシン動作であってよい。さらに、本発明の１つ以上の実施形態は、これらの動作を実行するデバイスまたは装置にも関連する。こうした装置は、特定の必要な目的に合わせて特別に構築されたものであるか、あるいはコンピュータに記憶したコンピュータプログラムによって選択的に起動または構成される汎用コンピュータであってよい。特に、様々な汎用マシンを本明細書の教示に従って書かれたコンピュータプログラムと共に使用できる。あるいは、必要な動作を実行させるより特化された装置を構築することがより便利であるかもしれない。
【００６８】
ここで説明した様々な実施形態は、この他にも、ハンドヘルド型デバイス、マイクロプロセッサシステム、マイクロプロセッサベースのまたはプログラム可能な個人用電化製品、ミニコンピュータ、メインフレームコンピュータといったコンピュータシステム構成と共に実施することが可能である。
【００６９】
本発明の１つ以上の実施形態は、１つ以上のコンピュータ可読媒体に組み込まれた、１つ以上のコンピュータプログラムまたは1つ以上のコンピュータプログラムモジュールとして実施することができる。用語「コンピュータ可読媒体」は、後にコンピュータシステムに入力されるデータを記憶できるあらゆるデータ記憶デバイスを意味し、コンピュータ可読媒体は、コンピュータプログラムをコンピュータで読み取れる方式にて実現するための、あらゆる既存のまたは後に開発される技術に基づくものであってよい。コンピュータ可読媒体の例には、ハードドライブ、ネットワーク・アタッチト・ストレージ（ＮＡＳ）、読み出し専用メモリ、ランダムアクセスメモリ（例えばフラッシュメモリデバイス）、ＣＤ（コンパクトディスク）、ＣＤ−ＲＯＭ、ＣＤ−Ｒ、ＣＤ−ＲＷ、ＤＶＤ（デジタルバーサタイルディスク）、磁気テープ、その他の光学式および非光学式データ記憶装置を含む。さらに、コンピュータ可読媒体をネットワークでつないだコンピュータシステムに分散させて、コンピュータ可読コードを分散方式で記憶および実行できるようにすることも可能である。
【００７０】
本発明の１つ以上の実施形態について明瞭に理解できるようにある程度詳細に説明したが、特許請求の範囲内で特定の変更および変形が可能である。したがって、説明した実施形態は限定ではなく例示として考慮されるべきであり、特許請求の範囲はここで述べられた詳細に限定されず、特許請求の範囲およびその同等物内での変形が可能である。特許請求の範囲においては、特に明記されていない限り、要素および／またはステップは特定の動作順序を意味しない。
【００７１】
ここで１つの例として述べたコンポーネント、動作、構造に、複数の例を提供することができる。最後に、様々なコンポーネント、動作、データストアの間の境界はいくぶん任意であり、また特定の動作は具体的な例示的構成の文脈にて例示される。これ以外の機能割り当ても想起されるが、これは本発明の特許請求の範囲に入り得る。一般に、例示的な構成の中の別個のコンポーネントとして呈示された構造と機能は、構造またはコンポーネントの組み合わせとして実施できる。同様に、１つのコンポーネントとして呈示された構造と機能は、別個のコンポーネントとして実施できる。これらおよびこれ以外の応用、修正、追加、改善も、付属の特許請求の範囲に入り得る。
【図１】
0006050719.tif 000002
【図２】
0006050719.tif 000003
【図３】
0006050719.tif 000004
【図４】
0006050719.tif 000005
【図５】
0006050719.tif 000006