(57)【要約】  端末装置におけるキーの押下および離上を示すキーイベントの発生を検出するイベント検出部と、キーの押下を示すキーイベントが発生したときに、当該キーの離上を示すキーイベントを生成する離上イベント生成部と、前記イベント検出部が検出したキーの押下を示す前記キーイベントおよび前記離上イベント生成部が生成した前記キーイベントを仮想マシンに出力する出力部とを備えるキー制御システム。
2016190054.tif 000002
【特許請求の範囲】
【請求項１】
端末装置におけるキーの押下および離上を示すキーイベントの発生を検出するイベント検出部と、
キーの押下を示すキーイベントが発生したときに、当該キーの離上を示すキーイベントを生成する離上イベント生成部と、
前記イベント検出部が検出したキーの押下を示す前記キーイベントおよび前記離上イベント生成部が生成した前記キーイベントを仮想マシンに出力する出力部と
を備えるキー制御システム。
【請求項２】
所定の連続入力判定時間の間に離上されないキーが存在する場合に、当該連続入力判定時間が経過するたびに、当該キーの押下を示すキーイベントを生成する押下イベント生成部をさらに備え、
前記出力部が、前記イベント検出部が検出したキーの押下を示す前記キーイベント、前記押下イベント生成部が生成した前記キーイベント、および前記離上イベント生成部が生成した前記キーイベントを前記仮想マシンに出力する
請求項１に記載のキー制御システム。
【請求項３】
メタキーが押下されているときに前記イベント検出部が他のキーの押下を検出した場合に、前記出力部が、前記メタキーの押下を示すキーイベント、前記イベント検出部が検出したキーの押下を示す前記キーイベント、前記離上イベント生成部が生成した前記キーイベント、および前記メタキーの離上を示すキーイベントを、前記仮想マシンに出力する
請求項１または請求項２に記載のキー制御システム。
【請求項４】
端末装置におけるキーの押下および離上を示すキーイベントの発生を検出するステップと、
キーの押下を示すキーイベントが発生したときに、当該キーの離上を示すキーイベントを生成するステップと、
前記検出したキーの押下を示す前記キーイベントおよび前記生成した前記キーイベントを仮想マシンに出力するステップと
を有するキー制御方法。
【請求項５】
仮想マシンを動作させる仮想化部と、
端末装置から、キーの押下および離上を示すキーイベントを受信する受信部と、
キーの押下を示すキーイベントを受信したときに、当該キーの離上を示すキーイベントを生成する離上イベント生成部と、
前記受信部が受信したキーの押下を示す前記キーイベントおよび前記離上イベント生成部が生成した前記キーイベントを前記仮想マシンに出力する出力部と
を備える仮想化サーバ。
【請求項６】
仮想マシンを動作させるステップと、
端末装置から、キーの押下および離上を示すキーイベントを受信するステップと、
キーの押下を示すキーイベントを受信したときに、当該キーの離上を示すキーイベントを生成するステップと、
前記受信したキーの押下を示す前記キーイベントおよび前記生成した前記キーイベントを前記仮想マシンに出力するステップと
を備えるキー制御方法。
【請求項７】
コンピュータを、
仮想マシンを動作させる仮想化部、
端末装置から、キーの押下および離上を示すキーイベントを受信する受信部、
キーの押下を示すキーイベントを受信したときに、当該キーの離上を示すキーイベントを生成する離上イベント生成部、
前記受信部が受信したキーの押下を示す前記キーイベントおよび前記離上イベント生成部が生成した前記キーイベントを前記仮想マシンに出力する出力部
として機能させるためのプログラム。
【請求項８】
キーの押下および離上を示すキーイベントの発生を検出するイベント検出部と、
所定の連続入力判定時間の間に離上されないキーが存在する場合に、当該連続入力判定時間が経過するたびに、当該キーの押下を示すキーイベントを生成する押下イベント生成部と、
前記イベント検出部が検出したキーの押下を示す前記キーイベントおよび前記押下イベント生成部が生成した前記キーイベントを仮想マシンに送信する送信部と
を備える端末装置。
【請求項９】
キーの押下および離上を示すキーイベントの発生を検出するステップと、
所定の連続入力判定時間の間に離上されないキーが存在する場合に、当該連続入力判定時間が経過するたびに、当該キーの押下を示すキーイベントを生成するステップと、
前記検出したキーの押下を示す前記キーイベントおよび前記生成した前記キーイベントを、仮想マシンを備える仮想化サーバに送信するステップと
を有するキー送信方法。
【請求項１０】
コンピュータを、
キーの押下および離上を示すキーイベントの発生を検出するイベント検出部、
所定の連続入力判定時間の間に離上されないキーが存在する場合に、当該連続入力判定時間が経過するたびに、当該キーの押下を示すキーイベントを生成する押下イベント生成部、
前記イベント検出部が検出したキーの押下を示す前記キーイベントおよび前記押下イベント生成部が生成した前記キーイベントを仮想マシンに送信する送信部
として機能させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、キー制御システム、仮想化サーバ、端末装置、キー制御方法、キー送信方法、プログラムに関する。
【背景技術】
【０００２】
端末装置から、サーバ上で動作する仮想マシンに向けて、キーの押下および離上を示す情報を送信することで、端末装置のキーボードを仮想マシン上で利用可能とする技術が知られている（例えば、特許文献１を参照）。
例えば、端末装置においてキーが押下されたときに当該キーが押下されたことを示す情報が仮想マシンに送信される。また端末装置においてキーが離上されたときに当該キーが離上されたことを示す情報が、仮想マシンに送信される。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】国際公開第２０１０／１０９６８１号
【発明の概要】
【発明が解決しようとする課題】
【０００４】
ところで仮想マシンには、同一のキーの押下が所定時間継続する場合に、当該キーが連続して押下されたものとみなすものがある。この場合、キーの離上を示す情報の伝送が遅延し、仮想マシンにおいて、同一のキーが利用者の意図に反して連続入力されてしまう可能性がある。
本発明の目的は、上述した課題を解決するキー制御システム、仮想化サーバ、端末装置、キー制御方法、キー送信方法、プログラムを提供することにある。
【課題を解決するための手段】
【０００５】
本発明の第１の態様によれば、キー制御システムは、端末装置におけるキーの押下および離上を示すキーイベントの発生を検出するイベント検出部と、キーの押下を示すキーイベントが発生したときに、当該キーの離上を示すキーイベントを生成する離上イベント生成部と、前記イベント検出部が検出したキーの押下を示す前記キーイベントおよび前記離上イベント生成部が生成した前記キーイベントを仮想マシンに出力する出力部とを備える。【０００６】
本発明の第２の態様によれば、キー制御方法は、端末装置におけるキーの押下および離上を示すキーイベントの発生を検出するステップと、キーの押下を示すキーイベントが発生したときに、当該キーの離上を示すキーイベントを生成するステップと、前記検出したキーの押下を示す前記キーイベントおよび前記生成した前記キーイベントを仮想マシンに出力するステップとを有する。【０００７】
本発明の第３の態様によれば、仮想化サーバは、仮想マシンを動作させる仮想化部と、端末装置から、キーの押下および離上を示すキーイベントを受信する受信部と、キーの押下を示すキーイベントを受信したときに、当該キーの離上を示すキーイベントを生成する離上イベント生成部と、前記受信部が受信したキーの押下を示す前記キーイベントおよび前記離上イベント生成部が生成した前記キーイベントを前記仮想マシンに出力する出力部とを備える。【０００８】
本発明の第４の態様によれば、キー制御方法は、仮想マシンを動作させるステップと、端末装置から、キーの押下および離上を示すキーイベントを受信するステップと、キーの押下を示すキーイベントを受信したときに、当該キーの離上を示すキーイベントを生成するステップと、前記受信したキーの押下を示す前記キーイベントおよび前記生成した前記キーイベントを前記仮想マシンに出力するステップとを備える。【０００９】
本発明の第５の態様によれば、プログラムは、コンピュータを、仮想マシンを動作させる仮想化部、端末装置から、キーの押下および離上を示すキーイベントを受信する受信部、キーの押下を示すキーイベントを受信したときに、当該キーの離上を示すキーイベントを生成する離上イベント生成部、前記受信部が受信したキーの押下を示す前記キーイベントおよび前記離上イベント生成部が生成した前記キーイベントを前記仮想マシンに出力する出力部として機能させる。【００１０】
本発明の第６の態様によれば、端末装置は、キーの押下および離上を示すキーイベントの発生を検出するイベント検出部と、所定の連続入力判定時間の間に離上されないキーが存在する場合に、当該連続入力判定時間が経過するたびに、当該キーの押下を示すキーイベントを生成する押下イベント生成部と、前記イベント検出部が検出したキーの押下を示す前記キーイベントおよび前記押下イベント生成部が生成した前記キーイベントを仮想マシンに送信する送信部とを備える。【００１１】
本発明の第７の態様によれば、キー送信方法は、キーの押下および離上を示すキーイベントの発生を検出するステップと、所定の連続入力判定時間の間に離上されないキーが存在する場合に、当該連続入力判定時間が経過するたびに、当該キーの押下を示すキーイベントを生成するステップと、前記検出したキーの押下を示す前記キーイベントおよび前記生成した前記キーイベントを、仮想マシンを備える仮想化サーバに送信するステップとを有する。【００１２】
本発明の第８の態様によれば、プログラムは、コンピュータを、キーの押下および離上を示すキーイベントの発生を検出するイベント検出部、所定の連続入力判定時間の間に離上されないキーが存在する場合に、当該連続入力判定時間が経過するたびに、当該キーの押下を示すキーイベントを生成する押下イベント生成部、前記イベント検出部が検出したキーの押下を示す前記キーイベントおよび前記押下イベント生成部が生成した前記キーイベントを仮想マシンに送信する送信部として機能させる。
【発明の効果】
【００１３】
本発明の上記態様のうち少なくとも１つによれば、キーの押下を示すキーイベントが発生したときに、当該キーの離上を示すキーイベントを仮想マシンに出力する。これにより、キーの離上を示す情報の伝送の遅延によって、仮想マシンにおいて、同一のキーが利用者の意図に反して連続入力されることを防ぐことができる。
【図面の簡単な説明】
【００１４】
【図１】第１の実施形態に係る仮想化システムの構成を示す概略ブロック図である。
【図２】第１の実施形態に係る端末装置の動作を示すフローチャートである。
【図３】第１の実施形態に係るハイパーバイザの動作を示すフローチャートである。
【図４】第２の実施形態に係る仮想化システムの構成を示す概略ブロック図である。
【図５】第２の実施形態に係るハイパーバイザの動作を示すフローチャートである。
【図６】第３の実施形態に係るハイパーバイザの動作を示すフローチャートである。
【図７】仮想化システムの基本構成を示す概略ブロック図である。
【図８】少なくとも１つの実施形態に係るコンピュータの構成を示す概略ブロック図である。
【発明を実施するための形態】
【００１５】
《第１の実施形態》
以下、図面を参照しながら実施形態について詳しく説明する。
図１は、第１の実施形態に係る仮想化システムの構成を示す概略ブロック図である。
仮想化システム１は、有線または無線でキーボード１０に接続された端末装置２０と、仮想マシンを動作させる仮想化サーバ３０とを備える。
端末装置２０と仮想化サーバ３０とは、ネットワークを介して接続される。
【００１６】
端末装置２０は、仮想化サーバ３０で動作する仮想マシンにキーボード１０の入力を送信する装置である。端末装置２０は、ＰＣ、サーバ、スマートフォンなどのコンピュータによって実現される。端末装置２０は、仮想マシン接続プログラムを実行することで、イベント検出部２１、押下イベント生成部２２、キーコード変換部２３、送信部２４を備える。
イベント検出部２１は、キーボード１０のキーの押下および離上を示すキーイベントの発生を検出する。
押下イベント生成部２２は、イベント検出部２１がキーの押下を示すキーイベントを検出してから所定の連続入力判定時間（例えば、１秒）以内に当該キーの離上を示すキーイベントが検出されない場合に、当該連続入力判定時間ごとに、当該キーの押下を示すキーイベントを生成する。
例えば、押下イベント生成部２２は、同じキーの押下が３秒間継続した場合、当該キーの押下を示す押下イベントを１秒ごとに１回ずつ生成する。
キーコード変換部２３は、イベント検出部２１が検出するキーイベント、および、押下イベント生成部２２が生成するキーイベントが示すキーのキーコードを、端末装置２０のＯＳ（Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ）に係るキーコードから、Ｌｉｎｕｘ（登録商標）キーコードなどの所定のコード体系のキーコードに変換する。
送信部２４は、キーコード変換部２３がキーコードを変換したキーイベントをパケットに格納し、仮想化サーバ３０に送信する。
【００１７】
仮想化サーバ３０は、端末装置２０から受信するキーイベントを、自装置において動作する仮想マシンに伝達する。
仮想化サーバ３０は、仮想マシン管理プログラムを実行することで、受信したパケットの転送先を管理する転送基盤３１と、仮想マシンを管理するハイパーバイザ３２と、仮想マシンを実行する仮想化部３３とを備える。なお、転送基盤３１は、端末装置２０から、キーの押下および離上を示すキーイベントを受信する受信部の一例である。
ハイパーバイザ３２は、イベント取得部３２１、キーコード変換部３２２、離上イベント生成部３２３、出力部３２４を備える。
イベント取得部３２１は、転送基盤３１から転送されたキーイベントを取得する。
キーコード変換部３２２は、イベント取得部３２１が取得したキーイベントに係るキーコードを、仮想化部３３で動作する仮想マシンのＯＳに係るキーコードに変換する。
離上イベント生成部３２３は、キーコード変換部３２２が変換したキーイベントがキーの押下を示す場合に、当該キーの離上を示すキーイベントを生成する。
出力部３２４は、キーコード変換部３２２が変換したキーイベントおよび離上イベント生成部３２３が生成したキーイベントを、仮想化部３３で動作する仮想マシンに出力する。
【００１８】
上記構成により、仮想化システム１は、キーの離上を示す情報の伝送の遅延となる、パケット遅延による意図しない連続入力の発生を防ぐことができる。
【００１９】
次に、本実施形態に係る仮想化システム１の動作について説明する。
図２は、第１の実施形態に係る端末装置の動作を示すフローチャートである。
端末装置２０が、仮想マシン接続プログラムにより仮想化サーバ３０と接続されると、イベント検出部２１は、キーボード１０の押下または離上によるキーイベントが発生したか否かを判定する（ステップＳ１）。
イベント検出部２１は、キーイベントの発生を検出すると（ステップＳ１：ＹＥＳ）、キーコード変換部２３は、当該キーイベントに含まれるキーコードを所定の体系のキーコードに変換する（ステップＳ２）。
次に送信部２４は、キーコード変換部２３によって変換されたキーイベントをパケットに格納して、転送基盤３１に送信する（ステップＳ３）。
【００２０】
他方、イベント検出部２１が、キーイベントの発生を検出しない場合（ステップＳ１：ＮＯ）、押下イベント生成部２２は、押下を示すキーイベントの発生後、離上を示すキーイベントが発生していないキーのうち、押下時間が連続入力判定時間以上となるキーが存在するか否かを判定する（ステップＳ４）。なお押下時間とは、最後に当該キーの押下を示すキーイベントを送信した時刻からの経過時間である。
離上されていないキーのうち、押下時間が連続入力判定時間以上となるキーが存在する場合（ステップＳ４：ＹＥＳ）、押下イベント生成部２２は、当該キーの押下を示すキーイベントを生成する（ステップＳ５）。
そして、イベント検出部２１は、当該キーイベントに含まれるキーコードを所定の体系のキーコードに変換する（ステップＳ２）。次に送信部２４は、キーコード変換部２３によって変換されたキーイベントを、パケットに格納して転送基盤３１に送信する（ステップＳ３）。
【００２１】
ステップＳ３でキーイベントを格納したパケットを送信した場合、または離上されていないキーのうち、押下時間が連続入力判定時間以上となるキーが存在しない場合（ステップＳ４：ＮＯ）、端末装置２０は、仮想化サーバ３０との接続が切断されたか否かを判定する（ステップＳ６）。
仮想化サーバ３０との接続が切断されていない場合（ステップＳ６：ＮＯ）、端末装置２０はステップＳ１に処理を戻し、再度キーイベントの発生の有無を判定する。他方、仮想化サーバ３０との接続が切断された場合（ステップＳ６：ＹＥＳ）、端末装置２０は処理を終了する。
上記処理により、端末装置２０は、キーイベントを仮想化サーバ３０に送信することができる。
【００２２】
図３は、第１の実施形態に係るハイパーバイザ３２の動作を示すフローチャートである。
端末装置２０が仮想化サーバ３０にキーイベントを格納したパケットを送信すると、仮想化サーバ３０の転送基盤３１は当該パケットを受信する。次に、転送基盤３１は、当該パケットをハイパーバイザ３２へ転送する。
【００２３】
ハイパーバイザ３２のイベント取得部３２１は、転送基盤３１からパケットを取得する（ステップＳ１０１）。次に、キーコード変換部３２２は、イベント取得部３２１が取得したキーイベントが示すキーコードを、仮想化部３３で動作する仮想マシンのＯＳに係るキーコードに変換する（ステップＳ１０２）。
次に、出力部３２４は、当該キーイベントがキーの押下を示すか否かを判定する（ステップＳ１０３）。当該キーイベントがキーの押下を示す場合（ステップＳ１０３：ＹＥＳ）、出力部３２４は、キーコード変換部３２２が変換したキーイベントを仮想化部３３に出力する（ステップＳ１０４）。
次に、離上イベント生成部３２３は、キーコード変換部３２２が変換したキーイベントが示すキーの離上を示すキーイベントを生成する。次に、出力部３２４は、離上イベント生成部３２３が生成したキーイベントを仮想化部３３に出力し（ステップＳ１０５）、処理を終了する。
【００２４】
他方、キーコード変換部３２２によって変換されたキーイベントがキーの離上を示す場合（ステップＳ１０３：ＮＯ）、出力部３２４は当該キーイベントを仮想化部３３に出力せずに処理を終了する。これは、キーの離上を示すキーイベントがステップＳ１０５で既に仮想化部３３に出力されているためである。
【００２５】
このように、本実施形態に係る仮想化システム１は、キーの押下を示すキーイベントが検出された場合に、当該キーイベントと共に、キーの離上を示すキーイベントを仮想マシンに出力する。
これにより、キーイベントを格納するパケットの伝送遅延の有無に関わらず、仮想マシンには、キーの押下を示すキーイベントの直後に当該キーの離上を示すキーイベントが入力されるため、仮想化システム１は、意図しない連続入力の発生を防ぐことができる。
【００２６】
また、本実施形態に係る仮想化システム１においては、キーの離上を示すキーイベントを仮想マシンを動作させる仮想化サーバ３０が生成する。これにより、キーの離上を確実に仮想マシンに伝達することができる。
なお、他の実施形態においてはこれに限られず、端末装置２０が離上イベント生成部３２３を備えても良い。
【００２７】
また、本実施形態において、押下イベント生成部２２は、連続入力判定時間の間に離上されないキーが存在する場合に、当該連続入力判定時間が経過するたびに、当該キーの押下を示すキーイベントを生成する。これにより、同一のキーの押下を示すキーイベントと当該キーの離上を示すキーイベントが、連続入力判定時間ごとに、仮想マシンを実行する仮想化部３３に入力される。
したがって、本実施形態に係る仮想化システム１は、キーの押下を示すキーイベントの直後に当該キーの離上を示すキーイベントが仮想マシンに入力されるにも関わらず、キーの長押しによる連続入力を実現することができる。例えば、本実施形態に係る仮想化システム１によれば、方向キーやデリートキーの連続入力が可能となる。
なお、本実施形態では、端末装置２０が押下イベント生成部２２を備えるが、これに限られない。例えば、他の実施形態においては、仮想化サーバ３０が押下イベント生成部２２を備えても良い。また、連続入力の必要性が無い場合、他の実施形態に係る仮想化システム１では、押下イベント生成部２２を備えなくても良い。
【００２８】
また、本実施形態に係る端末装置２０は、自装置のＯＳに係るキーコードを所定の体系に係るキーコードに変換したキーイベントを送信する。また仮想化サーバ３０は、受信したキーイベントに係るキーコードを、仮想マシンのＯＳに係るキーコードに変換する。
これにより、端末装置２０と仮想マシンとでキーマップが異なる場合にも、端末装置２０と仮想マシンとで入力される文字に違いが生じることを防ぐことができる。
【００２９】
《第２の実施形態》
次に、第２の実施形態について説明する。図４は、第２の実施形態に係る仮想化システムの構成を示す概略ブロック図である。
キーボード１０に設けられるキーには、他のキー（以下、通常キーという）との同時押しが前提となるメタキーが存在することがある。メタキーの例としては、シフトキーや、コントロールキーなどが挙げられる。
第２の実施形態に係る仮想化システム１は、メタキーと通常キーの同時押しが生じる場合にも、同一のキーが利用者の意図に反して連続入力されることを防ぐことができる。
【００３０】
第２の実施形態に係る仮想化システム１は、第１の実施形態と仮想化サーバ３０の構成が異なる。具体的には、第２の実施形態に係る仮想化サーバ３０は、第１の実施形態の構成に加え、更に押下キー管理部３２５およびメタキーイベント生成部３２６を備える。
押下キー管理部３２５は、端末装置２０においてどのキーの押下が継続しているかを管理する。
具体的には、押下キー管理部３２５は、押下を示すキーイベントが検出されたときに、当該キーイベントに係るキーコードを内部メモリに記録し、離上を示すキーイベントが検出されたときに、当該キーイベントに係るキーコードを内部メモリから削除する。これにより、押下キー管理部３２５は、内部メモリを参照することで、押下が継続しているキーを特定することができる。
メタキーイベント生成部３２６は、メタキーの押下および離上を示すキーイベントを生成する。
【００３１】
次に、第２の実施形態に係る仮想化システム１の動作について説明する。なお端末装置２０の動作は、第１の実施形態と同じである。
図５は、第２の実施形態に係るハイパーバイザ３２の動作を示すフローチャートである。
端末装置２０が仮想化サーバ３０にキーイベントを格納したパケットを送信すると、仮想化サーバ３０の転送基盤３１は当該パケットを受信する。次に、転送基盤３１は、当該パケットをハイパーバイザ３２へ転送する。
【００３２】
ハイパーバイザ３２のイベント取得部３２１は転送基盤３１からパケットを取得する（ステップＳ２０１）。次に、キーコード変換部３２２は、イベント取得部３２１が取得したキーイベントが示すキーコードを、仮想化部３３で動作する仮想マシンのＯＳに係るキーコードに変換する（ステップＳ２０２）。
次に、押下キー管理部３２５は、当該キーイベントがキーの押下を示すか否かを判定する（ステップＳ２０３）。当該キーイベントがキーの押下を示す場合（ステップＳ２０３：ＹＥＳ）、押下キー管理部３２５は、当該キーイベントに係るキーコードを内部メモリに記憶する（ステップＳ２０４）。これにより、押下キー管理部３２５は、内部メモリを参照することで、当該キーコードに係るキーが端末装置２０において押下されていることを特定することができる。
【００３３】
次に、押下キー管理部３２５は、内部メモリを参照し、メタキーが押下されているか否かを判定する（ステップＳ２０５）。つまり、押下キー管理部３２５は、内部メモリにメタキーを示すキーコードが記録されているか否かを判定する。
メタキーが押下されていない場合（ステップＳ２０５：ＮＯ）、出力部３２４は、ステップＳ２０２でキーコード変換部３２２が変換したキーイベントを仮想化部３３に出力する（ステップＳ２０６）。
次に、離上イベント生成部３２３は、キーコード変換部３２２が変換したキーイベントが示すキーの離上を示すキーイベントを生成する。次に、出力部３２４は、離上イベント生成部３２３が生成したキーイベントを仮想化部３３に出力し（ステップＳ２０７）、処理を終了する。
【００３４】
他方、メタキーが押下されている場合（ステップＳ２０５：ＹＥＳ）、メタキーイベント生成部３２６は、押下されていると判定されたメタキーの押下を示すキーイベントを生成する。
次に、出力部３２４は、メタキーイベント生成部３２６が生成したキーイベントを仮想化部３３に出力する（ステップＳ２０８）。
次に、出力部３２４は、ステップＳ２０２でキーコード変換部３２２が変換したキーイベントを仮想化部３３に出力する（ステップＳ２０９）。
次に、離上イベント生成部３２３は、キーコード変換部３２２が変換したキーイベントが示すキーの離上を示すキーイベントを生成する。
次に、出力部３２４は、離上イベント生成部３２３が生成したキーイベントを仮想化部３３に出力する（ステップＳ２１０）。
次に、離上イベント生成部３２３は、メタキーイベント生成部３２６が生成したキーイベントが示すキーの離上を示すキーイベントを生成する。そして、出力部３２４は、離上イベント生成部３２３が生成したキーイベント（メタキーの離上）を仮想化部３３に出力し（ステップＳ２１１）、処理を終了する。
【００３５】
他方、ステップＳ２０２でキーコード変換部３２２によって変換されたキーイベントがキーの離上を示す場合（ステップＳ２０３：ＮＯ）、押下キー管理部３２５は、内部メモリに記録された当該キーイベントが示すキーコード（即ち、当該キーイベントに対応するキーのキーコード）を削除し（ステップＳ２１２）、処理を終了する。これにより、押下キー管理部３２５は、内部メモリを参照することで、当該キーコードに係るキーが端末装置２０において押下されていないことを特定することができる。
【００３６】
このように、本実施形態に係る仮想化システム１は、メタキーが押下されているときに他のキーの押下が検出された場合に、メタキーの押下を示すキーイベント、検出されたキーの押下を示すキーイベント、およびこれらのキーの離上を示すキーイベントを、仮想マシンに出力する。
これにより、本実施形態に係る仮想化システム１は、キーの押下を示すキーイベントの直後に当該キーの離上を示すキーイベントが仮想マシンに入力されるにも関わらず、メタキーと通常キーの同時押しを実現することができる。
【００３７】
《第３の実施形態》
次に、第３の実施形態について説明する。第３の実施形態は、第２の実施形態と同様に、メタキーと通常キーの同時押しが生じる場合にも、同一のキーが利用者の意図に反して連続入力されることを防ぐ。
第３の実施形態に係る仮想化システム１は、図１に示す第１の実施形態と同様の構成を有する。
【００３８】
第３の実施形態に係る仮想化システム１の動作について説明する。なお端末装置２０の動作は、第１の実施形態と同じである。
図６は、第３の実施形態に係るハイパーバイザの動作を示すフローチャートである。
端末装置２０が仮想化サーバ３０にキーイベントを格納したパケットを送信すると、仮想化サーバ３０の転送基盤３１は当該パケットを受信する。次に、転送基盤３１は、当該パケットをハイパーバイザ３２へ転送する。
【００３９】
ハイパーバイザ３２のイベント取得部３２１は転送基盤３１からパケットを取得する（ステップＳ３０１）。次に、キーコード変換部３２２は、イベント取得部３２１が取得したキーイベントが示すキーコードを、仮想化部３３で動作する仮想マシンのＯＳに係るキーコードに変換する（ステップＳ３０２）。
次に、出力部３２４は、当該キーイベントがキーの押下を示すか否かを判定する（ステップＳ３０３）。当該キーイベントがキーの押下を示す場合（ステップＳ３０３：ＹＥＳ）、出力部３２４は、キーコード変換部３２２が変換したキーイベントを仮想化部３３に出力する（ステップＳ３０４）。
【００４０】
次に、離上イベント生成部３２３は、当該キーイベントに係るキーコードがメタキーを示すか否かを判定する（ステップＳ３０５）。キーイベントに係るキーコードが通常キーを示す場合（ステップＳ３０５：ＮＯ）、離上イベント生成部３２３は、キーコード変換部３２２が変換したキーイベントが示すキーの離上を示すキーイベントを生成する。次に、出力部３２４は、離上イベント生成部３２３が生成したキーイベントを仮想化部３３に出力し（ステップＳ３０６）、処理を終了する。
他方、キーイベントに係るキーコードがメタキーを示す場合（ステップＳ３０５：ＹＥＳ）、離上イベント生成部３２３は、当該メタキーの離上を示すキーイベントを生成しない。
これにより、仮想化部３３が実行する仮想マシンにおいて当該メタキーは、押下が継続した状態となる。
【００４１】
ステップＳ３０２でキーコード変換部３２２によって変換されたキーイベントがキーの離上を示す場合（ステップＳ３０３：ＮＯ）、出力部３２４は、当該キーイベントに係るキーコードがメタキーを示すか否かを判定する（ステップＳ３０７）。キーイベントに係るキーコードが通常キーを示す場合（ステップＳ３０７：ＮＯ）、出力部３２４は当該キーイベントを仮想化部３３に出力せずに処理を終了する。
他方、キーイベントに係るキーコードがメタキーを示す場合（ステップＳ３０７：ＹＥＳ）、出力部３２４は、キーコード変換部３２２が変換したキーイベント（メタキーの離上）を仮想化部３３に出力し（ステップＳ３０８）、処理を終了する。これにより、仮想化部３３が実行する仮想マシンにおいて当該メタキーの押下の継続が終了する。
【００４２】
このように、本実施形態に係る離上イベント生成部３２３は、メタキーの離上を示すキーイベントを生成せず、出力部３２４が、イベント検出部２１が検出したメタキーの離上を示すキーイベントを仮想マシンに出力する。これにより、仮想マシンにおけるメタキーの押下および離上のタイミングは、端末装置２０におけるメタキーの押下および離上のタイミングに沿ったものとなる。これにより、メタキーの押下から離上までの間に入力された通常キーの押下は、仮想マシンにおいてメタキーと同時に押下されたものとして扱われる。
なお、パケットの伝送遅延によりメタキーの離上のタイミングが遅れる可能性があるが、メタキーの離上と通常キーの押下の順序が正しければ、伝送遅延が生じたとしても仮想マシンにおいて意図しない連続入力が生じない。
【００４３】
以上、図面を参照して複数の実施形態について詳しく説明してきたが、具体的な構成は上述のものに限られることはなく、様々な設計変更等をすることが可能である。
例えば、上述した第１の実施形態に係る出力部３２４は、キーイベントが離上を示す場合に当該キーイベントを仮想化部３３に出力しないが（図３の「ステップＳ１０３：ＮＯ」参照）、これに限られない。
例えば、他の実施形態に係る出力部３２４は、キーイベントが押下を示すか離上を示すかに関わらず、キーコード変換部３２２が変換したキーイベントを仮想化部３３に出力しても良い。この場合は、押下されていないキー、すなわち既に離上されたキーの離上を示すキーイベントを仮想マシンが無視する。
【００４４】
《基本構成》
図７は、仮想化システムの基本構成を示す概略ブロック図である。
上述した実施形態では、仮想化システム１の一実施形態として図１および図４に示す構成について説明したが、仮想化システム１の基本構成は、図７に示すとおりである。
すなわち、仮想化システム１は、イベント検出部２１、離上イベント生成部３２３、および出力部３２４を基本構成とする。
【００４５】
イベント検出部２１は、端末装置におけるキーの押下および離上を示すキーイベントの発生を検出する。
離上イベント生成部３２３は、キーの押下を示すキーイベントが発生したときに、当該キーの離上を示すキーイベントを生成する。
出力部３２４は、イベント検出部２１が検出したキーの押下を示すキーイベントおよび離上イベント生成部３２３が生成したキーの離上を示すキーイベントを、仮想マシンに出力する。
これにより、仮想化システム１は、キーの離上を示す情報の伝送の遅延によって、仮想マシンにおいて、同一のキーが利用者の意図に反して連続入力されることを防ぐことができる。
【００４６】
図８は、少なくとも１つの実施形態に係るコンピュータの構成を示す概略ブロック図である。
コンピュータ９０は、ＣＰＵ９１、主記憶装置９２、補助記憶装置９３、インタフェース９４を備える。
上述の端末装置２０および仮想化サーバ３０は、それぞれコンピュータ９０に実装される。そして、上述した各処理部の動作は、プログラム（上述の仮想マシン接続プログラムおよび仮想マシン管理プログラム）の形式で補助記憶装置９３に記憶されている。
ＣＰＵ９１は、上記プログラムを補助記憶装置９３から読み出して主記憶装置９２に展開し、当該プログラムに従って上記処理を実行する。また、ＣＰＵ９１は、当該プログラムに従って、上述した各メモリに対応する記憶領域を主記憶装置９２に確保する。
【００４７】
なお、少なくとも１つの実施形態において、補助記憶装置９３は、一時的でない有形の媒体の一例である。一時的でない有形の媒体の他の例としては、インタフェース９４を介して接続される磁気ディスク、光磁気ディスク、ＣＤ−ＲＯＭ、ＤＶＤ−ＲＯＭ、半導体メモリ等が挙げられる。
また、このプログラムが通信回線によってコンピュータ９０に配信される場合、配信を受けたコンピュータ９０が当該プログラムを主記憶装置９２に展開し、上記処理を実行しても良い。
【００４８】
また、当該プログラムは、前述した機能の一部を実現するためのものであっても良い。
さらに、当該プログラムは、前述した機能を補助記憶装置９３に既に記憶されている他のプログラムとの組み合わせで実現するもの、いわゆる差分ファイル（差分プログラム）であっても良い。
【００４９】
上記の実施形態の一部又は全部は、以下の付記のようにも記載されうるが、以下には限られない。
【００５０】
（付記１）
端末装置におけるキーの押下および離上を示すキーイベントの発生を検出するイベント検出部と、
キーの押下を示すキーイベントが発生したときに、当該キーの離上を示すキーイベントを生成する離上イベント生成部と
前記イベント検出部が検出したキーの押下を示す前記キーイベントおよび前記離上イベント生成部が生成した前記キーイベントを仮想マシンに出力する出力部と
を備えるキー制御システム。
【００５１】
（付記２）
所定の連続入力判定時間の間に離上されないキーが存在する場合に、当該連続入力判定時間が経過するたびに、当該キーの押下を示すキーイベントを生成する押下イベント生成部をさらに備え、
前記出力部が、前記イベント検出部が検出したキーの押下を示す前記キーイベント、前記押下イベント生成部が生成した前記キーイベント、および前記離上イベント生成部が生成した前記キーイベントを前記仮想マシンに出力する
付記１に記載のキー制御システム。
【００５２】
（付記３）
メタキーが押下されているときに前記イベント検出部が他のキーの押下を検出した場合に、前記出力部が、前記メタキーの押下を示すキーイベント、前記イベント検出部が検出したキーの押下を示す前記キーイベント、前記離上イベント生成部が生成した前記キーイベント、および前記メタキーの離上を示すキーイベントを、前記仮想マシンに出力する
付記１または付記２に記載のキー制御システム。
【００５３】
（付記４）
前記離上イベント生成部が生成するキーイベントが、メタキー以外のキーの離上を示すキーイベントであり、
前記出力部が、前記イベント検出部が検出したキーの押下を示す前記キーイベント、前記イベント検出部が検出したメタキーの離上を示す前記キーイベント、および前記離上イベント生成部が生成した前記キーイベントを前記仮想マシンに出力する
付記１または付記２に記載のキー制御システム。
【００５４】
（付記５）
キーイベントに係るキーコードを、仮想マシンで用いられるキーコードに変換するキーコード変換部を備え、
前記出力部が、前記キーコード変換部によってキーコードが変換されたキーイベントを、前記仮想マシンに出力する
付記１から付記４の何れかに記載のキー制御システム。
【００５５】
（付記６）
前記イベント検出部が、前記端末装置に備えられ、
前記出力部が、前記仮想マシンを動作させる仮想化サーバに備えられる
付記１から付記５の何れかに記載のキー制御システム。
【００５６】
（付記７）
端末装置におけるキーの押下および離上を示すキーイベントの発生を検出するステップと、
キーの押下を示すキーイベントが発生したときに、当該キーの離上を示すキーイベントを生成するステップと、
前記検出したキーの押下を示す前記キーイベントおよび前記生成した前記キーイベントを仮想マシンに出力するステップと
を有するキー制御方法。
【００５７】
（付記８）
仮想マシンを動作させる仮想化部と、
端末装置から、キーの押下および離上を示すキーイベントを受信する受信部と、
キーの押下を示すキーイベントを受信したときに、当該キーの離上を示すキーイベントを生成する離上イベント生成部と、
前記受信部が受信したキーの押下を示す前記キーイベントおよび前記離上イベント生成部が生成した前記キーイベントを前記仮想マシンに出力する出力部と
を備える仮想化サーバ。
【００５８】
（付記９）
仮想マシンを動作させるステップと、
端末装置から、キーの押下および離上を示すキーイベントを受信するステップと、
キーの押下を示すキーイベントを受信したときに、当該キーの離上を示すキーイベントを生成するステップと、
前記受信したキーの押下を示す前記キーイベントおよび前記生成した前記キーイベントを前記仮想マシンに出力するステップと
を備えるキー制御方法。
【００５９】
（付記１０）
コンピュータを、
仮想マシンを動作させる仮想化部、
端末装置から、キーの押下および離上を示すキーイベントを受信する受信部、
キーの押下を示すキーイベントを受信したときに、当該キーの離上を示すキーイベントを生成する離上イベント生成部、
前記受信部が受信したキーの押下を示す前記キーイベントおよび前記離上イベント生成部が生成した前記キーイベントを前記仮想マシンに出力する出力部
として機能させるためのプログラム。
【００６０】
（付記１１）
キーの押下および離上を示すキーイベントの発生を検出するイベント検出部と、
所定の連続入力判定時間の間に離上されないキーが存在する場合に、当該連続入力判定時間が経過するたびに、当該キーの押下を示すキーイベントを生成する押下イベント生成部と、
前記イベント検出部が検出したキーの押下を示す前記キーイベントおよび前記押下イベント生成部が生成した前記キーイベントを仮想マシンに送信する送信部と
を備える端末装置。
【００６１】
（付記１２）
キーの押下および離上を示すキーイベントの発生を検出するステップと、
所定の連続入力判定時間の間に離上されないキーが存在する場合に、当該連続入力判定時間が経過するたびに、当該キーの押下を示すキーイベントを生成するステップと、
前記検出したキーの押下を示す前記キーイベン
トおよび前記生成した前記キーイベントを、仮想マシンを備える仮想化サーバに送信するステップと
を有するキー送信方法。
【００６２】
（付記１３）
コンピュータを、
キーの押下および離上を示すキーイベントの発生を検出するイベント検出部、
所定の連続入力判定時間の間に離上されないキーが存在する場合に、当該連続入力判定時間が経過するたびに、当該キーの押下を示すキーイベントを生成する押下イベント生成部、
前記イベント検出部が検出したキーの押下を示す前記キーイベントおよび前記押下イベント生成部が生成した前記キーイベントを仮想マシンに送信する送信部
として機能させるためのプログラム。  
【００６３】
この出願は、２０１５年５月２５日に出願された日本出願特願２０１５−１０５３０４号を基礎とする優先権を主張し、その開示の全てをここに取り込む。
【産業上の利用可能性】
【００６４】
本発明によれば、キーの離上を示す情報の伝送の遅延によって、仮想マシンにおいて、同一のキーが利用者の意図に反して連続入力されることを防ぐことができる。
【符号の説明】
【００６５】
１  仮想化システム
２０  端末装置
２１  イベント検出部
２２  押下イベント生成部
２３  キーコード変換部
２４  送信部
３０  仮想化サーバ
３１  転送基盤
３２  ハイパーバイザ
３３  仮想化部
３２１  イベント取得部
３２２  キーコード変換部
３２３  離上イベント生成部
３２４  出力部
【図１】
2016190054.tif 000003
【図２】
2016190054.tif 000004
【図３】
2016190054.tif 000005
【図４】
2016190054.tif 000006
【図５】
2016190054.tif 000007
【図６】
2016190054.tif 000008
【図７】
2016190054.tif 000009
【図８】
2016190054.tif 000010
【国際調査報告】
2016190054.tif 000011
2016190054.tif 000012
2016190054.tif 000013
2016190054.tif 000014