以下、図面を参照しながら本発明の実施の形態を説明する。
(第1の実施の形態)
図1は、本発明の第1の実施の形態に係るKVM(K:キーボード、V:ビデオ、M:マウス)スイッチ、情報処理装置、及びサーバを備えるKVMシステムの構成図である。
同図に示すように、KVMシステム1000は、KVMスイッチ(K:キーボード、V:ビデオ、M:マウス)1、サーバ2a,2b、モニタ3、キーボード4、及びマウス5を備えている。これらは、ローカルシステムを構成している。即ち、モニタ3は、サーバ2a又はサーバ2bの出力するビデオ信号を表示することができ、キーボード4及びマウス5は、サーバ2a又はサーバ2bにデータを出力することができる。
さらに、マルチモニタ対応切替システム1000は、モニタ12a、キーボード13a及びマウス14aが接続されているPC11aと、モニタ12b〜12e、キーボード13b及びマウス14bが接続されているPC11bとを備えている。PC11a及びPC11bはネットワーク10を介してKVMスイッチ1に接続される遠隔端末であり、いわゆるリモートシステムを構成している。即ち、ユーザは、PC11a又はPC11b上で動作している遠隔操作アプリケーションから、ネットワーク10及びKVMスイッチ1を介してサーバ2a又はサーバ2bを操作することができる。
尚、KVMスイッチ1に接続されるサーバ又は遠隔端末(PC)は単数でも複数でもよい。
図2(A)は、サーバ2aのハードウエア構成を示すブロック図であり、図2(B)は、PC11aのハードウエア構成を示すブロック図である。尚、サーバ2bのハードウエア構成はサーバ2aのハードウエア構成と同一であり、PC11bのハードウエア構成はPC11aのハードウエア構成と同一である。
サーバ2aは、装置全体を制御するCPU21、制御プログラムを備えるROM22、ワーキングエリアとして機能するRAM23、各種の情報やプログラムを備えるハードディスクドライブ(HDD)24、ビデオ信号を出力するためのビデオインターフェース26、ネットワークインターフェース27及びUSB(universal serial bus)インターフェース28を備えている。CPU21はシステムバス29を介してROM22、RAM23、ハードディスクドライブ(HDD)24、ビデオインターフェース26、ネットワークインターフェース27及びUSBインターフェース28に接続されている。USBインターフェース28は、KVMスイッチ1と接続するために使用され、さらに後述する図7(A)〜(C)のテーブルデータをKVMスイッチ1又はPC11a,11bに送信する際に使用されると共に図7(A)〜(C)のテーブルデータをKVMスイッチ1又はPC11a,11bから受信する際に使用される。
PC11aは、装置全体を制御するCPU31、制御プログラムを備えるROM32、ワーキングエリアとして機能するRAM33、各種の情報やプログラムを備えるハードディスクドライブ(HDD)34、ビデオ信号を出力するためのビデオインターフェース36、KVMスイッチ1又は他のコンピュータと接続するためのネットワークインターフェース37、及び不図示のUSB機器と接続するためのUSB(universal serial bus)インターフェース38を備えている。CPU31はシステムバス39を介してROM32、RAM33、ハードディスクドライブ(HDD)34、ビデオインターフェース36、ネットワークインターフェース37及びUSBインターフェース38に接続されている。
モニタ12aはビデオインターフェース36に接続され、キーボード13a及びマウス14aはUSBインターフェース38に接続されている。ネットワークインターフェース37はKVMスイッチ1と接続するために使用され、さらに後述する図7(A)〜(C)のテーブルデータをKVMスイッチ1又はサーバ2a,2bに送信する際に使用されると共に図7(A)〜(C)のテーブルデータをKVMスイッチ1又はサーバ2a,2bから受信する際に使用される。
図3は、KVMスイッチ1のハードウエア構成を示すブロック図である。
KVMスイッチ1は、スイッチ全体の動作を制御するコントローラ101、ビデオ信号の出力先やマウス又はキーボードのデータの入力先を切り替えるスイッチング回路102、サーバ2a,2bとそれぞれ接続するためのインターフェース(I/F)103a,103b、ネットワーク10を介してPC11a,11bと接続するためのネットワークインターフェース(I/F)104a,104b、モニタ3と接続するためのビデオインターフェース(I/F)106、並びにキーボード4及びマウス5と接続するためのキーボード・マウスインターフェース(I/F)107を備えている。コントローラ101は各種の制御プログラムやデータなどを格納するメモリ105を備えている。
インターフェース(I/F)103a,103bは、後述する図7(A)〜(C)のテーブルデータをサーバ2a,2bにそれぞれ送信する際に使用されると共に図7(A)〜(C)のテーブルデータをサーバ2a,2bからそれぞれ受信する際に使用される。ネットワークインターフェース(I/F)104a,104bは、後述する図7(A)〜(C)のテーブルデータをPC11a,11bにそれぞれ送信する際に使用されると共に図7(A)〜(C)のテーブルデータをPC11a,11bからそれぞれ受信する際に使用される。
以下の説明では、サーバの代表例としてサーバ2aを使用し、遠隔端末の代表例としてPC11aを使用するが、サーバや遠隔端末をこれらに限定するものではない。
本実施の形態では、サーバ2aのマウスカーソルの加速処理に左右されない位置ズレ補正機能を実現するため、PC11a又はKVMスイッチ1がマウス14aが出力するマウスデータそのものを補正するためのテーブルデータ(図7(A)〜(C)参照)を自動作成する機能を有する。尚、位置ズレ補正機能とは、PC11aが表示するPC11aのマウスカーソルの位置とPC11aが表示するサーバ2aのマウスカーソルの位置が一致しない場合に、これらのマウスカーソルの位置を一致させる補正を実行する機能である。
まず、マウスデータを補正するためのテーブルデータを自動作成する第1の機能を説明する。
図4(A)は、サーバ2aの画面の一例を示す図であり、図4(B)は、(A)の部分拡大図であり、図4(C)は、PC11aの画面の一例を示す図である。また、図5(A)及び図5(B)は、位置ズレ補正機能を示すフローチャートである。
図4(A)において、符号121はサーバ2aの画面を示し、符号122はサーバ2aのマウスカーソルを示す。図4(C)において、符号123はPC11aの画面を示し、符号126は、PC11aのマウスカーソルを示す。符号124は、PC11aのマウスカーソル126の非表示を設定したウィンドウを示し、符号125は、マウスカーソルの表示を設定した他のウィンドウを示す。ウィンドウ124には、サーバ2aの画面が表示され、サーバ2aのマウスカーソル122が表示されている。ウィンドウ124やウィンドウ125におけるマウスカーソルの表示/非表示は、PC11aのオぺレーティングシステムで設定することができる。
初期状態では、図4(A)に示すように、サーバ2aのマウスカーソル122は、画面121のどの位置にあってもよいが、例えば、位置aにあるものとする。また、図4(C)に示すように、PC11aのマウスカーソル126は画面123のどの位置にあってもよいが、例えば、位置Aにあるものとする。PC11aのマウスカーソル126は、例えば、ウィンドウ125の直上にあったとしても、本処理においてはウィンドウ124の直上に移動させることになるため、PC11aのマウスカーソル126は画面123のどの位置にあってもよい。
図5(A)において、PC11aのCPU31は、現在のPC11aのマウスカーソル126の座標をHDD34に保存する(ステップS1)。これにより、図4(C)のマウスカーソル126の位置Aの座標がHDD34に保存される。
次いで、PC11aのCPU31は、PC11aのマウスカーソル126をウィンドウ124の左上角に移動させるマウスデータをPC11a自身に出力すると共に当該マウスデータに応じたPC11aのマウスカーソル126の移動量を示すデータをKVMスイッチ1を介して、サーバ2aに出力する(ステップS2)。これにより、図4(A)のサーバ2aのマウスカーソル122は位置aから位置bに移動し、図4(C)のマウスカーソル126は位置Aから位置Bに移動する。
尚、マウス14aが出力可能なマウスデータは1〜255である。PC11aのマウスカーソル126が移動する大きさは、図4(C)に示すように、VABで示し、サーバ2aに到達して実際にサーバ2aのマウスカーソル122が移動する大きさをVabで示す。この2つの移動の大きさの関係はVAB<<Vabであり、VabはVABよりも非常に大きな値とし、サーバ2aの加速処理に左右されず、サーバ2aのマウスカーソル122及びPC11aのマウスカーソル126がそれぞれ画面121の左上角の位置B及びウィンドウ124の左上角の位置bに移動する大きさとする。
次いで、PC11aのCPU31は、サーバ2aの加速係数の検出処理を実行する(ステップS3)。この処理は、PC11aがKVMスイッチ1を介してサーバ2aに出力するPC11aのマウスカーソル126の移動量を示すデータがサーバ2aでどの様に加速されるのかを調べるために行う。この処理によって、サーバ2aの加速係数を全て把握し、PC11aがKVMスイッチ1を介してサーバ2aが実行する加速処理に最適化したデータを出力できるようにする。サーバ2aの加速係数の検出処理の詳細は後述する。
最後に、PC11aのCPU31は、PC11aのマウスカーソル126をウィンドウ124の左上角の座標からHDD34に保存されたPC11aのマウスカーソル126の座標(即ち位置Aの座標)の位置に戻すマウスデータをPC11a自身に出力すると共に当該マウスデータに応じたPC11aのマウスカーソル126の移動量を示すデータをKVMスイッチ1を介して、サーバ2aに出力する(ステップS4)。ステップS2のマウスデータとステップS4のマウスデータとの関係は大きさが同一であるが、正負が逆になる。これにより、PC11aのマウスカーソル126は位置Bから位置Aに戻り、サーバ2aのマウスカーソル122は位置bから位置aに戻る。
図5(A)では、PC11aのCPU31位置ズレ補正機能を実行したが、図5(B)では、KVMスイッチ1のコントローラ101が位置ズレ補正機能を実行する。
図5(B)において、KVMスイッチ1のコントローラ101は、PC11aから、現在のPC11aのマウスカーソル126の座標を取得し、メモリ105に保存する(ステップS1−1)。これにより、図4(C)のマウスカーソル126の位置Aの座標がメモリ105に保存される。
次いで、KVMスイッチ1のコントローラ101は、PC11aのマウスカーソル126をウィンドウ124の左上角に移動させるマウスデータをPC11aに出力すると共に当該マウスデータに応じたPC11aのマウスカーソル126の移動量を示すデータをサーバ2aに出力する(ステップS2−1)。これにより、図4(A)のサーバ2aのマウスカーソル122は位置aから位置bに移動し、図4(C)のマウスカーソル126は位置Aから位置Bに移動する。尚、KVMスイッチ1が出力可能なマウスデータは1〜255である。
次いで、KVMスイッチ1のコントローラ101は、サーバ2aの加速係数の検出処理を実行する(ステップS3−1)。この処理は、サーバ2aに出力するPC11aのマウスカーソル126の移動量を示すデータがサーバ2aでどの様に加速されるのかを調べるために行う。この処理によって、サーバ2aの加速係数を全て把握し、KVMスイッチ1が、サーバ2aが実行する加速処理に最適化したデータを出力できるようにする。サーバ2aの加速係数の検出処理の詳細は後述する。
最後に、KVMスイッチ1のコントローラ101は、PC11aのマウスカーソル126をウィンドウ124の左上角の座標からメモリ105に保存されたPC11aのマウスカーソル126の元の位置(即ち位置Aの座標)に戻すマウスデータをPC11a自身に出力すると共に当該マウスデータに応じたPC11aのマウスカーソル126の移動量を示すデータをサーバ2aに出力する(ステップS4−1)。ステップS2−1のマウスデータとステップS4−1のマウスデータとの関係は大きさが同一であるが、正負が逆になる。これにより、PC11aのマウスカーソル126は位置Bから位置Aに戻り、サーバ2aのマウスカーソル122は位置bから位置aに戻る。
図6は、図5(A)のステップS3の加速係数の検出処理を示すフローチャートである。
まず、PC11aのCPU31は、サーバ2aのマウスカーソル122が位置bにあり、PC11aのマウスカーソル126が位置Bにあるとき、図4(B)のマウスカーソル122を囲む閉領域rをウィンドウ124に表示している画像の領域上においてキャプチャし、サーバ2aのマウスカーソル122に対応するビットマップを抽出し(ステップS11)、ウィンドウ124内部でサーバ2aのマウスカーソル122の移動を追尾できるようにする。
以降の処理では、PC11aのCPU31は、マウス14aが1〜255の各マウスデータに応じたPC11aのマウスカーソル126の移動量を示すデータをサーバ2aに出力し、それに応じてサーバ2aのマウスカーソル122がどの様に移動するかを検知し、サーバ2aの加速係数を検出する。
PC11aのCPU31は、マウスデータ(i)の初期化を行う、即ちマウスデータとして1をセットする(i=1)(ステップS12)。次いで、PC11aのCPU31は、セットされたマウスデータ(i)に応じたPC11aのマウスカーソル126の移動量を算出すると共に、PC11aのマウスカーソル126の移動量を示すデータをサーバ2aに出力する(ステップS13)。これにより、ウィンドウ124内のサーバ2aのマウスカーソル122は移動する。
次に、PC11aのCPU31は、サーバ2aのマウスカーソル122の画像のウィンドウ124内の移動先をパターンマッチングにより検出する(ステップS14)。
PC11aのCPU31は、サーバ2aのマウスカーソル122の移動前の位置と移動後の位置との差分を計算し、マウスデータ(i)に対するサーバ2aのマウスカーソル122の移動量を算出する(ステップS15)。この移動量の算出は、ステップS13からステップS18のループにより、マウス14aが出力可能なマウスデータ(1〜255)に対応する回数、即ち255回繰り返し実行される。
PC11aのCPU31は、マウスデータ(i)、PC11aのマウスカーソル126の移動量及びサーバ2aのマウスカーソル122の移動量に基づいたテーブルデータを作成する(ステップS16)。この作成されたテーブルデータはHDD34に保存される。テーブルデータについては、後述する。
続けて、PC11aのCPU31は、マウスデータ(i)を1増加し(ステップS17)、マウスデータ(i)が255を超えたか否かを判別する(ステップS18)。
ステップS18で、マウスデータ(i)が255を超えていない場合には(NO)、ステップS13に戻る。一方、ステップS18で、マウスデータ(i)が255を超えた場合には(YES)、PC11aのCPU31は、サーバ2aのマウスカーソル122をウィンドウ124の左上角に移動させ(ステップS19)、本処理を終了する。
尚、図5(B)のステップS3−1の加速係数の検出処理は、図6と同様に実行されるが、実行主体はKVMスイッチ1のコントローラ101である。この場合、KVMスイッチ1のコントローラ101は、継続的にPC11aの画面のデータを受信する。
図7(A)は、ステップS16で作成されるテーブルデータの一例を示す図であり、図7(B)は、図7(A)の各値を四捨五入したテーブルデータの一例を示す図であり、図7(C)は、PC11aのマウスカーソル126の位置とサーバ2aのマウスカーソル122の位置とを一致させるためのテーブルデータの一例を示す図である。
図7(A)において、XはPC11aへの入力に相当するマウスデータを示し、YはPC11aのマウスカーソル126の移動量を示し、Zはサーバ2aのマウスカーソル122の移動量を示す。上記ステップS16により、PC11aのCPU31は、図7(A)のテーブルデータを作成するが、このとき、図7(A)の各値を四捨五入した図7(B)のテーブルデータを同時に作成する。図7(C)のテーブルデータは、ステップS19でPC11aのCPU31により作成され、HDD34に保存される、又はステップS19でKVMスイッチ1のコントローラ101に作成され、メモリ105に保存される。
サーバ2aの加速係数を検出するために、図7(A)及び図7(B)のマウスデータXが利用されているが、サーバ2aには、図7(A)及び図7(B)に示されるPC11aのマウスカーソル126の移動量Yが入力されている。マウスデータXがPC11aのマウスカーソル126の移動量Yと異なるのは、PC11aでもマウスの加速処理が実行されているためである。
サーバ2aのマウスカーソル122の位置がPC11aのマウスカーソル126の位置とズレないようにするためには、PC11aのマウスカーソル126の移動量Yとサーバ2aのマウスカーソル122の移動量Zとが一致する必要がある。しかし、PC11aのマウスカーソル126の移動量Yとサーバ2aのマウスカーソル122の移動量Zとが一致しないことは、図7(B)より明らかである。
そこで、本実施の形態では、PC11aのCPU31又はKVMスイッチ1のコントローラ101は、PC11aのマウスカーソル126の移動量Yとサーバ2aのマウスカーソル122の移動量Zとが一致するように、PC11aのマウスカーソル126の移動量Yの出力を変換する出力変換処理を実行する。具体的には、出力変換処理では、PC11aのCPU31又はKVMスイッチ1のコントローラ101は、PC11aのマウスカーソル126の移動量Yとサーバ2aのマウスカーソル122の移動量Zとが一致するような、1又は2以上のマウスデータをサーバ2aに出力する。このマウスデータはPC11aで加速処理が実行されていない、マウスからPC11aに直接入力されたデータである。
図7(C)のテーブルデータは、PC11aのマウスカーソル126の移動量Y、サーバ2aに出力されるマウスデータ、及びサーバ2aのマウスカーソル122の移動量Zとの関係を示す。
例えば、PC11aのマウスカーソル126の移動量Y=5の場合、その値がPC11aからサーバ2aに出力されると、図7(B)からサーバ2aのマウスカーソル122の移動量Zは「7」となり、マウスカーソル122は「2」の分だけ加速される。この場合、PC11aのマウスカーソル126の移動量Yとサーバ2aのマウスカーソル122の移動量Zとは一致しない。
しかし、図7(C)では、PC11aのマウスカーソル126の移動量Y=5の場合、PC11aからサーバ2aにマウスデータX−1としての「3」及びマウスデータX−2としての「1」が出力される、即ち、マウスデータが2回に分けて出力される。マウスデータが「3」のときは、図7(B)に基づいて、サーバ2aのマウスカーソル122の移動量Z−1は「4」となり、マウスデータが「1」のときは、図7(B)に基づいて、サーバ2aのマウスカーソル122の移動量Z−2は「1」となり、移動量Z−1及び移動量Z−2の合計であるマウスカーソル122の移動量Zは「5」となる。この場合、PC11aのマウスカーソル126の移動量Yとサーバ2aのマウスカーソル122の移動量Zとは一致する。
図8(A)及び(B)は、PC11a及びKVMスイッチ1で実行される処理を示すフローチャートである。
まず、図8(A)の処理について説明する。
PC11aでマウス14aが操作され、PC11aのマウスカーソル126が移動する(ステップS21)と、PC11aのCPU31は、PC11aのマウスカーソル126の移動量Yのデータを作成し(ステップS22)、KVMスイッチ1へ送信する(ステップS23)。KVMスイッチ1のコントローラ101は、PC11aのマウスカーソル126の移動量Yのデータを受信し(ステップS24)、図7(C)のテーブルデータを使って、出力変換処理を実行し(ステップS25)、1又は2以上のマウスデータをサーバ2aに出力する(ステップS26)。サーバ2aは1又は2以上のマウスデータを受信し、サーバ2aのマウスカーソル122を移動させ(ステップS27)、本処理を終了する。尚、サーバ2aのマウスカーソル122の移動は、PC11aのウィンドウ124に表示される。
次いで、図8(B)の処理について説明する。
PC11aでマウス14aが操作され、PC11aのマウスカーソル126が移動する(ステップS31)と、PC11aのCPU31は、図7(C)のテーブルデータを使って、出力変換処理を実行し(ステップS32)、1又は2以上のマウスデータをKVMスイッチ1へ送信する(ステップS33)。KVMスイッチ1のコントローラ101は、1又は2以上のマウスデータを受信し(ステップS34)、そのまま、サーバ2aに出力する(ステップS35)。サーバ2aは1又は2以上のマウスデータを受信し、サーバ2aのマウスカーソル122を移動させ(ステップS36)、本処理を終了する。尚、サーバ2aのマウスカーソル122の移動は、PC11aのウィンドウ124に表示される。
このように、PC11a又はKVMスイッチ1が、PC11aのマウスカーソル126とサーバ2aのマウスカーソル122の位置ズレの起きないマウスデータをサーバ2aに出力することで、サーバ2aのマウスの加速処理に左右されない位置ズレ補正機能を提供できるようになり、従来のようにサーバのマウスの加速処理を無効にしなくて済むようになる。また、PC11aのマウスカーソル126がウィンドウ124の直上にある限り、PC11aのマウスカーソル126とサーバ2aのマウスカーソル122の位置ズレが発生することがなく、マウス14aのオペレータに快適なマウス操作環境を提供できる。
次に、マウスデータを補正するためのテーブルデータを自動作成する第2の機能を説明する。ここでは、図7(A)〜(C)のテーブルデータをサーバ2aが自動作成する。
上記第1の機能では、図7(A)〜(C)のテーブルデータを作成するために、PC11aがウィンドウ124でのサーバ2aのマウスカーソル122の画像のキャプチャ及びパターンマッチング処理を実行している。
PC11aのマウスカーソル126の移動がサーバ2a上でどのように反映されるか、即ちPC11aのマウスカーソル126の移動に従って、サーバ2aのマウスカーソル122がどのように移動するかは、サーバ2a上で監視プログラムを動作させ、サーバ2aのマウスカーソル122の位置を常に検出することにより調べることができる。
図9(A)は、PC11a、KVMスイッチ1及びサーバ2aにおけるデータの処理経路をモデル化した図である。
サーバ2aのHDD24は、デバイスドライバ51、ウィンドウ管理システム52、プログラム53を備えており、これらは、HDD24からRAM23に読み出されて、適宜CPU21により実行されることによりそれぞれの機能を発揮する。
同図において、経路P1は、KVMスイッチ1とPC11aとの間で成立するI/F(例えばEthernet(登録商標)や電話回線)を利用することを示す。経路P2は、デバイスドライバ51とハードウェアであるKVMスイッチ1との間で成立するI/F(例えばPS2通信線やUSB)を利用していることを示す。経路P3は、プログラム53とデバイスドライバ51との間で成立するI/F(例えばApplication Program Interface)を利用していることを示す。経路P4は、サーバ2aとKVMスイッチ1が相互接続可能な通信経路に接続されている場合で、プログラム53とKVMスイッチ1との間で成立するI/F(例えばEthernet(登録商標)及びTCP/IP)を利用していることを示す。経路P5は、サーバ2aとPC11aが相互接続可能な通信経路に接続されている場合で、プログラム53とPC11aとの間で成立するI/F(例えばEthernet(登録商標)及びTCP/IP)を利用していることを示す。
PC11a、KVMスイッチ1及びサーバ2aの動作を以下に説明する。
PC11aから、PC11aのマウスカーソル126の移動量Yを示すデータ(図7(B)参照)がネットワーク10を介してKVMスイッチ1に通知される。KVMスイッチ1はサーバ2aにとってマウスの役割を果たし、PC11aから通知されたデータをサーバ2aに入力し、デバイスドライバ51に渡す。
マウスカーソル126の移動量Yを示すデータがデバイスドライバ51に渡った時点では、サーバ2aの加速処理は行われておらず、マウスカーソル126の移動量Yは図7(B)に示す値である。
デバイスドライバ51は、ウィンドウ管理システム52にマウスカーソル126の移動量Yを示すデータを渡し、ウィンドウ管理システム52は加速処理を実施して、プログラム53に加速処理後のデータを渡す。プログラム53に渡ったデータは、加速処理が施されているから、図7(B)のサーバ2aのマウスカーソル122の移動量Zを示すデータになっている。尚、CPU21は、加速処理が実施されたサーバ2aのマウスカーソル122の移動量Zに従って、サーバ2aのマウスカーソル122を移動させる。
このように、サーバ2aに入力されたPC11aのマウスカーソル126の移動量Yを示すデータはデバイスドライバ51で取得され、サーバ2aのマウスカーソル122の移動量Zを示すデータはプログラム53で取得される。尚、マウスデータは、後述するように、順番に1つずつ増加するので、デバイスドライバ51は、最初に受信したPC11aのマウスカーソル126の移動量Yを示すデータに対応するマウスデータが「1」であり、次に受信したPC11aのマウスカーソル126の移動量Yを示すデータに対応するマウスデータが「2」であり、最後に受信したPC11aのマウスカーソル126の移動量Yを示すデータに対応するマウスデータが「255」であることを判断することができる。つまり、デバイスドライバ51は、PC11aのマウスカーソル126の移動量Yを示すデータを受信することで、これに対応するマウスデータの値を取得することができる。
よって、デバイスドライバ51は、プログラム53からサーバ2aのマウスカーソル122の移動量Zを示すデータを取得することで、予め取得されたPC11aのマウスカーソル126の移動量Yを示すデータ及びマウスデータと、サーバ2aのマウスカーソル122の移動量Zを示すデータとに基づいて、図7(B)のテーブルデータ及び図7(C)のテーブルデータを作成することができる。
図9(B)は、加速係数の検出処理を示すフローチャートである。
デバイスドライバ51は、マウスデータ(i)の初期化を行う、即ちマウスデータとして1をセットする(i=1)(ステップS41)。次いで、デバイスドライバ51は、プログラム53からサーバ2aのマウスカーソル122の移動量Zを示すデータ、KVMスイッチ1からPC11aのマウスカーソル126の移動量Yを示すデータを取得する(ステップS42)。デバイスドライバ51は、マウスデータ、サーバ2aのマウスカーソル122の移動量Z、及びPC11aのマウスカーソル126の移動量Yに基づいてテーブルデータを作成する(ステップS43)。このテーブルデータは図7(A)であるが、デバイスドライバ51は、マウスデータ、サーバ2aのマウスカーソル122の移動量Z、及びPC11aのマウスカーソル126の移動量Yの各値を四捨五入することで図7(B)のテーブルデータを取得する。
次いで、デバイスドライバ51は、マウスデータを1増加し(ステップS44)、マウスデータが255を超えたか否かを判別する(ステップS45)。
ステップS45で、マウスデータが255を超えていない場合には(NO)、ステップS42に戻る。一方、ステップS45で、マウスデータが255を超えた場合には(YES)、本処理を終了する。この処理の終了後に、デバイスドライバ51は、図7(B)のテーブルデータに基づいて図7(C)のテーブルデータを作成する。
上記処理では、デバイスドライバ51で図7(A)〜図7(C)のテーブルデータを作成したが、PC11aのマウスカーソル126の移動量Yを示すデータ及びマウスデータは、KVMスイッチ1及びPC11aでも取得されているデータなので、サーバ2aのマウスカーソル122の移動量Zを示すデータを経路P1又は経路P2を使ってKVMスイッチ1又はPC11aに転送し、KVMスイッチ1又はPC11aで図7(A)〜図7(C)のテーブルデータを作成してもよい。
また、KVMスイッチ1はプログラム53からサーバ2aのマウスカーソル122の移動量Zを示すデータを取得し、図7(A)〜図7(C)のテーブルデータを作成し、それを自己保持したり、デバイスドライバ51又はPC11aに転送してもよい。また、PC11aはプログラム53からサーバ2aのマウスカーソル122の移動量Zを示すデータを取得し、図7(A)〜図7(C)のテーブルデータを作成し、それを自己保持したり、デバイスドライバ51又はKVMスイッチ1に転送してもよい。
このように、図7(A)〜図7(C)のテーブルデータの作成は、PC11a、KVMスイッチ1、又はデバイスドライバ51のいずれでも実行可能である。また、図7(C)のテーブルデータに基づいて実行される出力変換処理(即ち、PC11aのマウスカーソル126の移動量Yとサーバ2aのマウスカーソル122の移動量Zとが一致するような、1又は2以上のマウスデータをサーバ2a(より具体的にはプログラム53)に出力する処理)は、ウィンドウ管理システム52の前段までに実行されていればよい。サーバ2aでは、デバイスドライバ51が図7(C)のテーブルデータに基づいて出力変換処理を実行する。
次に、加速係数の検出処理を半自動で実行する場合を説明する。半自動とは、PC11aのオペレータの操作が必要であることを意味する。
図10は、PC11aの画面の一例を示す図である。
図10において、符号123はPC11aの画面を示し、符号126は、PC11aのマウスカーソルを示す。符号124は、サーバ2aの画面が表示されるウィンドウを示し、符号125は、他のウィンドウを示す。ウィンドウ124には、サーバ2aのマウスカーソル122が表示され、PC11aのマウスカーソルも表示される。しかし、このPC11aのマウスカーソルは、この処理のときの場合のみ表示され、通常は、PC11aのマウスカーソルはウィンドウ124上では非表示に設定されている。
図10において、初期状態では、PC11aのマウスカーソル126の位置A及びサーバ2aのマウスカーソル122の位置aはどのような位置にあってもよい。但し、PC11aのCPU31は、PC11aのマウスカーソル126の位置Aの座標及びサーバ2aのマウスカーソル122の位置aの座標は、予めHDD34に保存しておく。
PC11aのCPU31は、最初にサーバ2aのマウスカーソル122を移動させるデータをサーバ2aに出力し、サーバ2aのマウスカーソル122を位置aから位置bに移動させる。PC11aのオペレータは、PC11aのマウスカーソル126を移動させ、位置bのサーバ2aのマウスカーソル122の矢先をクリックする。このクリックにより、PC11aのCPU31はサーバ2aのマウスカーソル122の位置bとサーバ2aのマウスカーソル122の位置が同位置であると認識できる。尚、このとき、PC11aのCPU31は、PC11aのマウスカーソル126の移動量を示すデータをサーバ2aに出力しない。これは、PC11aのマウスカーソル126の移動量を示すデータをサーバ2aに出力してしまうと、PC11aのマウスカーソル126の移動に連動してサーバ2aのマウスカーソル122が移動してしまい、クリックができないからである。
次に、PC11aのCPU31は、サーバ2aのマウスカーソル122を移動させるデータをサーバ2aに出力し、サーバ2aのマウスカーソル122が位置bから位置cに移動したときに、PC11aのオペレータは、PC11aのマウスカーソル126を移動させ、位置cのサーバ2aのマウスカーソル122の矢先をクリックする。
これにより、PC11aのCPU31から出力された、サーバ2aのマウスカーソル122を位置bから位置cに移動させたデータが、サーバ2aでどのように加速処理されたかが分かり、PC11aのCPU31は、PC11aのマウスカーソル126の位置bから位置cまでの移動量と、サーバ2aのマウスカーソル122の位置bから位置cまでの移動量との関係を決定できる。
このように、サーバ2aのマウスカーソル122を位置a〜位置hまで順次移動させ、その都度、PC11aのオペレータは、PC11aのマウスカーソル126を移動させ、サーバ2aのマウスカーソル122の矢先をクリックすることで、PC11aのCPU31は、PC11aのマウスカーソル126の移動量とサーバ2aのマウスカーソル122の移動量との関係を決定する。
図11は、加速係数の検出処理を半自動で実行する場合を示すフローチャートである。
まず、PC11aのCPU31は、マウスデータ(i)の初期化を行う、即ちマウスデータとして1をセットする(i=1)(ステップS61)。次いで、PC11aのCPU31は、セットされたマウスデータ(i)に応じたPC11aのマウスカーソル126の移動量を算出すると共に、PC11aのマウスカーソル126の移動量を示すデータをサーバ2aに出力する(ステップS62)。これにより、ウィンドウ124内のサーバ2aのマウスカーソル122は移動する。
次に、PC11aのCPU31は、PC11aのオペレータによりPC11aのマウスカーソル126でクリックされた座標を検出する(ステップS63)。
PC11aのCPU31は、前回クリックされた座標と今回クリックされた座標の差分を計算し、マウスデータ(i)に対するサーバ2aのマウスカーソル122の移動量を算出する(ステップS64)。この移動量の算出は、ステップS13からステップS18のループにより、マウス14aが出力可能なマウスデータ(1〜255)に対応する回数、即ち255回繰り返し実行される。尚、初期状態のサーバ2aのマウスカーソル122の座標は、HDD34に記憶されているものを使用する。
PC11aのCPU31は、マウスデータ(i)、PC11aのマウスカーソル126の移動量、及びサーバ2aのマウスカーソル122の移動量に基づいたテーブルデータを作成する(ステップS65)。この作成されたテーブルデータはHDD34に保存される。ここで作成されるテーブルデータは図7(A)及び図7(B)である。
続けて、PC11aのCPU31は、マウスデータ(i)を1増加し(ステップS66)、マウスデータ(i)が255を超えたか否かを判別する(ステップS67)。
ステップS67で、マウスデータ(i)が255を超えていない場合には(NO)、ステップS62に戻る。一方、ステップS67で、マウスデータ(i)が255を超えた場合には(YES)、PC11aのCPU31は、サーバ2aのマウスカーソル122をウィンドウ124の左上角に移動させ(ステップS68)、本処理を終了する。この処理の終了後に、PC11aのCPU31は、図7(B)のテーブルデータに基づいて図7(C)のテーブルデータを作成する。
この加速係数の検出処理を半自動で実行する機能は、PC11aのCPU31が、サーバ2aのマウスカーソル122を囲む閉領域rをウィンドウ124に表示している画像の領域上においてキャプチャできない場合に有効である。これは、PC11aのオペレーティングシステム又はウィンドウシステムが用いるカーソルの形状は、図10が示すように矢印の形状であるのが普通であるが、矢印ではなく指の形状であったり、点であったりと、サーバ2aのオペレータの嗜好によってマウスカーソルの形状が定まらない場合があるためである。このような状況であっても、PC11aのオペレータに、サーバ2aのマウスカーソル122の矢先がクリックされることでサーバ2aのマウスカーソル122の座標を特定することが可能である。このように、加速係数の検出処理を半自動で実行する機能を用いても、図7(C)のテーブルデータを作成することができる。
尚、図7(C)のテーブルデータを使用した出力変換処理は、上述したようにウィンドウ管理システム52の前段までに実行される。
(第2の実施の形態)
上述した課題2で説明したように、リモートPC(PC11に相当する)のマウスカーソル205を非表示にしても、リモートPCのマウスカーソル205が図20におけるウィンドウ201の枠を超えた場合は、サーバの遠隔操作ができなくなる。
そこで、本実施の形態では、上述した図8(A)又は図8(B)のPC11a及びKVMスイッチ1で実行される処理の前段に、PC11aのマウスカーソル126の移動範囲を制限する処理と、この移動範囲を制限する処理の有効又は無効を選択可能にする処理を追加する。
尚、本実施の形態のKVMシステムは、第1の実施の形態のKVMシステム1000と同一の構成である。
図12(A)は、第2の実施の形態にかかるPC11a及びKVMスイッチ1で実行される処理を示すフローチャートである。
PC11aのCPU31は、PC11aのマウスカーソル126の移動範囲の制限を有効にするか否かを判別する(ステップS71)。具体的には、PC11aのCPU31は、PC11aのマウスカーソル126の移動範囲を制限する指示が割り当てられているキーボード13aのファンクションキーの押下があったか又はPC11aのマウスカーソル126の移動範囲を制限するメニューが選択されているかを判別する。この場合、上記ファンクションキーの押下があった場合又は上記メニューが選択されている場合は、PC11aのCPU31は、PC11aのマウスカーソル126の移動範囲の制限を有効にすると判別する。上記ファンクションキーの押下がない場合又は上記メニューが選択されていない場合は、PC11aのCPU31は、PC11aのマウスカーソル126の移動範囲の制限を無効にすると判別する。
ステップS71でPC11aのマウスカーソル126の移動範囲の制限を有効にすると判別された場合(YES)には、PC11aのCPU31は、PC11aのオペレーティングシステムが持っている機能を呼び出し、PC11aのマウスカーソル126の移動範囲をウィンドウ124内に限定する(ステップS72)。尚、PC11aのオペレーティングシステムが持っている機能とは、例えばMicrosoft Windows(登録商標)のClipCursorを呼ばれるAPI(Application Program Interface)である。このAPIは、一般にマウスカーソルの移動範囲をウィンドウ上の四角形の領域内に制限する。
ステップS72の処理後、上述した図8(A)のステップS21〜ステップS27又は図8(B)のステップS31〜ステップS36の処理が実行され(ステップS73)、本処理を終了する。
一方、ステップS71でPC11aのマウスカーソル126の移動範囲の制限を無効にすると判別された場合(NO)には、本処理を終了する。
図12(A)のステップS71及びステップS72の実行主体は、PC11aのCPU31であるが、KVMスイッチ1のコントローラ101もステップS71及びステップS72の処理を実行できる。この場合の処理を図12(B)に示す。
ステップS71aでは、KVMスイッチ1のコントローラ101は、PC11aのマウスカーソル126の移動範囲を制限する指示が割り当てられているKVMスイッチ上の所定のスイッチ(不図示)がオンになっている又はメモリ105内に格納されている、PC11aのマウスカーソル126の移動範囲を制限するメニューが選択されているか否かを判別する。そして、KVMスイッチ1のコントローラ101は、いずれかに該当した場合には(ステップS71aでYES)、PC11aのオペレーティングシステムが持っている機能を呼び出し、PC11aのマウスカーソル126の移動範囲をウィンドウ124内に限定する(ステップS72a)。
このように、本実施の形態では、PC11aのマウスカーソル126の移動範囲をウィンドウ124内に制限した場合に、出力変換処理が実行される。よって、PC11aのマウスカーソル126の移動範囲をウィンドウ124内に制限した場合には、PC11aのマウスカーソル126とサーバ2aのマウスカーソル122の位置ズレが発生することがなく、快適なマウス操作環境を提供できる。
(第3の実施の形態)
本実施の形態では、サーバ2aのマウスカーソル122をローカル又はリモートで交互に操作する場合について説明する。
ここで、ローカルとは、サーバ2a及びKVMスイッチ1側を指し、リモートとは、PC11a側を指す。
本実施の形態では、KVMスイッチ1のメモリ105及びPC11aのHDD34に図7(B)及び図7(C)のテーブルデータが保存されているものとする。また、本実施の形態では、サーバ2a及びPC11aにおいて、マウス操作が行われると加算処理が行われることを前提に説明する。
本実施の形態のKVMシステムは、第1の実施の形態のKVMシステム1000と同一の構成である。
以下、上記KVMスイッチ1及びPC11aで実行される処理について、図13(A),(B)を用いて説明する。
図13(A)は、ローカル(サーバ2a及びKVMスイッチ1側)の画面を示す図であり、図13(B)はリモート(PC11a側)の画面を示す図である。
図13(A)において、符号121はローカルの画面を示し、符号122はサーバ2aのマウスカーソルを示す。図13(B)において、符号123はリモートの画面を示し、符号126は、PC11aのマウスカーソルを示す。符号124は、PC11aのマウスカーソル126の非表示を設定したウィンドウを示し、符号125は、マウスカーソルの表示を設定した他のウィンドウを示す。ウィンドウ124には、ローカルの画面が表示される。ウィンドウ124やウィンドウ125におけるマウスカーソルの表示/非表示は、PC11aのオぺレーティングシステムで設定することができる。
リモートのマウス操作からローカルのマウス操作に切り替わった時点のPC11aのマウスカーソル126の位置を位置Aとすると、サーバ2aのマウスカーソル122の位置は位置aにある。ローカルのマウス操作によって、サーバ2aのマウスカーソル122が軌跡xを辿って位置aから位置bに移動した場合、最終的にサーバ2aのマウスカーソル122の移動量、即ち、KVMスイッチ1がサーバ2aに出力したデータの累積値は、Vabとなる。
ここで、ローカルのマウス操作からリモートのマウス操作に切り替わった時のサーバ2aのマウスカーソル122の位置を位置bとし、PC11aのマウスカーソル126の位置を位置Bとする。ローカルのマウス操作からリモートのマウス操作に切り替わり、リモートのマウス操作により、PC11aのマウスカーソル126がいずれかの方向に移動すると、PC11aのCPU31は、サーバ2aのマウスカーソル122の移動量Vabをサーバ2aから取得し、当該移動量Vab及び位置aの座標から位置bを割り出し、位置bとサーバ2aのマウスカーソル122の位置Bとの差分(Vb’)を算出する。そして、PC11aのCPU31は、PC11aのマウスカーソル126の移動量と上記算出された位置bと位置Bとの差分(Vb’)とを合算し、図7(C)のテーブルデータを使って合算された値に対応する1又は2以上のマウスデータをサーバ2aに出力する。
図14(A)は、第3の実施の形態にかかるKVMスイッチ1及びPC11aで実行される処理を示すフローチャートである。
まず、PC11aのCPU31は、リモート(PC11a側)のマウス操作からローカル(サーバ2a及びKVMスイッチ1側)のマウス操作に切り替わった時点のPC11aのマウスカーソル126の位置、即ち、リモートのマウス操作の最終位置をHDD34に保存する(ステップS81)。
次に、KVMスイッチ1のコントローラ101は、ローカルのマウス操作中に、サーバ2aに出力したデータの累積値をPC11aに出力する(ステップS82)。ここで、KVMスイッチ1がサーバ2aに出力したデータは、図7(B)又は図7(C)のテーブルデータのPC11aのマウスカーソル126の移動量Yに相当する。
PC11aのCPU31は、KVMスイッチ1がサーバ2aに出力したデータの累積値を取得する(ステップS83)。次いで、PC11aのCPU31は、ローカルのマウス操作からリモートのマウス操作に切り替わり、リモートのマウス操作により、PC11aのマウスカーソル126がいずれかの方向に移動する(ステップS84)と、HDD34に保存されたリモートのマウス操作の最終位置及びKVMスイッチ1がサーバ2aに出力したデータの累積値に基づいて、現在のサーバ2aのマウスカーソル122の位置を算出し(ステップS85)、現在のサーバ2aのマウスカーソル122の位置と現在のPC11aのマウスカーソル126の位置との差分を算出する(ステップS86)。
次いで、PC11aのCPU31は、PC11aのマウスカーソル126の移動量とステップS85で算出された差分とを合算し、図7(C)のテーブルデータを使って合算された値に対応する1又は2以上のマウスデータをサーバ2aに出力する(ステップS87)。具体的には、PC11aのCPU31は、当該合算された値と一致するPC11aのマウスカーソル126の移動量Yの値を求め、この値に対応する1又は2以上のマウスデータをサーバ2aに出力する。
以上の処理により、ローカルのマウス操作からリモートのマウス操作に切り替わる時点で、サーバ2aのマウスカーソル122の位置は、PC11aのマウスカーソル126の位置に一致する。
上記ステップS82,S83に代えて、図14(B)の処理を実行してもよい。この場合、全ての処理をPC11aのCPU31が実行することができる。
図14(B)において、ステップS81の処理後、PC11aのCPU31は、上記第1の実施の形態で説明したように、ウィンドウ124内のサーバ2aのマウスカーソル122の画像をキャプチャし(ステップS91)、サーバ2aのマウスカーソル122の画像のウィンドウ124内の移動先をパターンマッチングにより検出し(ステップS92)、マウスカーソル122の移動前の位置(即ち、リモートのマウス操作からローカルのマウス操作に切り替わった時のマウスカーソル122の位置)と移動後の位置(即ち、ローカルのマウス操作からリモートのマウス操作に切り替わった時のマウスカーソル122の位置)との差分を計算し、ローカルのマウス操作により移動したサーバ2aのマウスカーソル122の移動量を算出する(ステップS93)。
そして、PC11aのCPU31は、図7(B)のテーブルデータを使って、算出されたサーバ2aのマウスカーソル122の移動量に対応するPC11aのマウスカーソル126の移動量を、KVMスイッチ1がサーバ2aに出力したデータの累積値とし(ステップS94)、ステップS84の処理に進む。
次に、図14(A)の処理をKVMスイッチ1のコントローラ101が実行する例を説明する。
図15は、KVMスイッチ1で実行される処理を示すフローチャートである。
まず、KVMスイッチ1のコントローラ101は、リモート(PC11a側)のマウス操作からローカル(サーバ2a及びKVMスイッチ1側)のマウス操作に切り替わった時点のPC11aのマウスカーソル126の位置、即ち、リモートのマウス操作の最終位置をPC11aから取得し、メモリ105に保存する(ステップS101)。
次に、KVMスイッチ1のコントローラ101は、ローカルのマウス操作中に、サーバ2aに出力したデータの累積値をメモリ105に保存する(ステップS102)。
次いで、KVMスイッチ1のコントローラ101は、ローカルのマウス操作からリモートのマウス操作に切り替わったときのPC11aのマウスカーソル126の位置をPC11aから取得する(ステップS103)。KVMスイッチ1のコントローラ101は、メモリ105に保存されたリモートのマウス操作の最終位置及びサーバ2aに出力したデータの累積値に基づいて、現在のサーバ2aのマウスカーソル122の位置を算出し(ステップS104)、現在のサーバ2aのマウスカーソル122の位置とステップS103で取得されたPC11aのマウスカーソル126の位置との差分を算出する(ステップS105)。
その後、KVMスイッチ1のコントローラ101は、PC11aのマウスカーソル126の移動量を示すデータをPC11aから受信すると、当該PC11aのマウスカーソル126の移動量とステップS105で算出された差分とを合算し、図7(C)のテーブルデータを使って合算された値に対応する1又は2以上のマウスデータをサーバ2aに出力する(ステップS106)。具体的には、PC11aのCPU31は、当該合算された値と一致するPC11aのマウスカーソル126の移動量Yの値を求め、この値に対応する1又は2以上のマウスデータをサーバ2aに出力する。
以上の処理により、ローカルのマウス操作からリモートのマウス操作に切り替わる時点で、サーバ2aのマウスカーソル122の位置は、PC11aのマウスカーソル126の位置に一致する。
図14(A),(B)又は図15の処理によれば、サーバ2aのマウスカーソル122をローカル又はリモートで交互に操作する場合でも、PC11aのマウスカーソルとサーバ2aのマウスカーソルの位置ズレが補正でき、マウス14aのオペレータに対して快適なマウス操作環境を提供できる。
本実施の形態では、サーバ2a及びPC11aにおいて、マウス操作が行われると加算処理が行われることを前提に説明したが、従来のように、サーバ2a及びPC11aの加算処理を無効にするKVMシステムでは、サーバ2a、KVMスイッチ1及びPC11aの入出力されるマウスデータはいずれも同一である。
このため、サーバ2a及びPC11aの加算処理を無効にするKVMシステムでも、図14(A)、図14(B)及び図15の処理を適用できるが、図7(B)及び図7(C)のテーブルデータを使う必要はない。この場合、上記ステップS87では、PC11aのCPU31は、PC11aのマウスカーソル126の移動量とステップS85算出された差分とを合算し、その合算値のデータをサーバ2aに出力する。また、上記ステップS94では、算出されたサーバ2aのマウスカーソル122の移動量が、KVMスイッチ1がサーバ2aに出力したデータの累積値となる。さらに、上記ステップS106では、PC11aのマウスカーソル126の移動量とステップS105で算出された差分とを合算し、その合算値のデータをサーバ2aに出力する。
(第4の実施の形態)
本実施の形態では、PC11aのマウスカーソル126がウインドウ124の内部から外部に一旦出て、再度ウインドウ124の外部から内部に入る場合に実行される位置補正処理について説明する。
本実施の形態のKVMシステムは、第1の実施の形態のKVMシステム1000と同一の構成である。
図16は、PC11aの画面の一例を示す図である。
図16において、符号122はサーバ2aのマウスカーソルを示し、符号123はPC11aの画面を示し、符号126は、PC11aのマウスカーソルを示す。符号124は、PC11aのマウスカーソル126の非表示を設定したウィンドウを示し、符号125は、マウスカーソルの表示を設定した他のウィンドウを示す。ウィンドウ124には、ローカル(サーバ2a)の画面が表示される。ウィンドウ124やウィンドウ125におけるマウスカーソルの表示/非表示は、PC11aのオぺレーティングシステムで設定することができる。
まず、PC11aのマウスカーソル126とサーバ2aのマウスカーソル122との位置ズレが生じていないものとする。PC11aのマウスカーソル126が位置Aからウィンドウ124の枠上の位置Bに移動したときに、PC11aのCPU31は、位置Bの座標をHDD34に保存する。このとき、サーバ2aのマウスカーソル122は位置Bと同一の位置bにある。
その後、PC11aのオペレータのマウス操作により、PC11aのマウスカーソル126は、ウィンドウ124の外部の任意の経路Cを辿り、ウィンドウ124の枠上の位置Gに到達する。このとき、位置Bの座標と位置Gの座標との差分はVBGとなる。
PC11aのCPU31は、ウィンドウ124の枠上の位置Gに到達した瞬間に、HDD34に保存された位置Bの座標と位置Gの座標の差分VBGを算出し、算出された差分をサーバ2aに出力する。これにより、サーバ2aのマウスカーソル122は位置bから位置gに移動する。位置gと位置Gは同じ位置である。
また、PC11aのマウスカーソル126が、ウィンドウ124の外部の任意の経路Cを辿っている最中に、サーバ2aのマウスカーソル122がローカルのマウス操作によって、軌跡xを辿って位置bから位置b’に移動していた場合は、PC11aのCPU31は、予め位置bの座標と位置b’の座標の差分Vb’bを算出し、HDD34に保存する。
その後、PC11aのCPU31は、ウィンドウ124の枠上の位置Gに到達した瞬間に、HDD34に保存された位置Bの座標と位置Gの座標の差分VBGを算出し、HDD34に保存された差分Vb’bと差分VBGとを合成し、合成値Vb’Gをサーバ2aに出力する。これにより、サーバ2aのマウスカーソル122は位置b’から位置gに移動する。
尚、PC11aのマウスカーソル126が位置Gからウィンドウ124の内部に入った後は、上述した第1〜第3の実施の形態で説明した処理が実行されるため、PC11aのマウスカーソル126とサーバ2aのマウスカーソル122の位置ズレが発生することがなくなる。
図17は、PC11aのCPU31が実行する処理を示すフローチャートである。
まず、PC11aのCPU31は、PC11aのマウスカーソル126がウィンドウ124の外部に出たときのウィンドウ124の枠上の座標をHDD34に保存する(ステップS111)。次に、PC11aのCPU31は、ローカルのマウス操作によって、サーバ2aのマウスカーソル122の移動があるか否かを判別する(ステップS112)。
ステップS112でYESの場合には、PC11aのCPU31は、サーバ2aのマウスカーソル122の移動前の位置の座標と移動後の位置の座標との差分を算出し、当該差分をHDD34に保存する(ステップS113)。
次いで、PC11aのCPU31は、PC11aのマウスカーソル126が再びウィンドウ124の枠上に到達したときに、当該到達したときのウィンドウ124の枠上の座標とステップS111でHDD34に保存された座標との差分を算出し、当該差分とステップS113でHDD34に保存されたサーバ2aのマウスカーソル122の移動の差分とを合成し、合成値をサーバ2aに出力し(ステップS114)、本処理を終了する。
一方、ステップS112でNOの場合には、PC11aのCPU31は、PC11aのマウスカーソル126が再びウィンドウ124の枠上に到達したときに、当該到達したときのウィンドウ124の枠上の座標とHDD34に保存された座標との差分を算出し、当該差分をサーバ2aに出力し(ステップS115)、本処理を終了する。
図18は、KVMスイッチ1のコントローラ101が実行する処理を示すフローチャートである。
まず、KVMスイッチ1のコントローラ101は、PC11aのマウスカーソル126がウィンドウ124の外部に出たときのウィンドウ124の枠上の座標をPC11aから取得し、メモリ105に保存する(ステップS121)。次に、KVMスイッチ1のコントローラ101は、ローカルのマウス操作によって、サーバ2aのマウスカーソル122の移動があるか否かを判別する(ステップS122)。
ステップS122でYESの場合には、KVMスイッチ1のコントローラ101は、サーバ2aのマウスカーソル122の移動前の位置の座標と移動後の位置の座標との差分を算出し、当該差分をメモリ105に保存する(ステップS123)。
次いで、KVMスイッチ1のコントローラ101は、PC11aのマウスカーソル126が再びウィンドウ124の枠上に到達したときに、当該到達したときのウィンドウ124の枠上の座標をPC11aから取得し、当該取得された座標とステップS121でメモリ105に保存された座標との差分を算出し、当該差分とステップS123でメモリ105に保存されたサーバ2aのマウスカーソル122の移動の差分とを合成し、合成値をサーバ2aに出力し(ステップS124)、本処理を終了する。
一方、ステップS122でNOの場合には、KVMスイッチ1のコントローラ101は、PC11aのマウスカーソル126が再びウィンドウ124の枠上に到達したときに、当該到達したときのウィンドウ124の枠上の座標をPC11aから取得し、当該取得された座標とメモリ105に保存された座標との差分を算出し、当該差分をサーバ2aに出力し(ステップS125)、本処理を終了する。
図17又は図18の処理によれば、PC11aのマウスカーソル126がウィンドウ124の枠外に一旦出て、再度ウィンドウ124の枠内に戻ったときに、自動的にPC11aのマウスカーソル126とサーバ2aのマウスカーソル122の位置ズレが補正されるので、マウス14aのオペレータに対して快適なマウス操作環境を提供できる。
本実施の形態では、サーバのマウスカーソルが表示されるウィンドウがPC11aの画面123に1つ表示されているが(ウィンドウ124参照)、例えば、PC11aの画面123が、サーバのマウスカーソルが表示されるウィンドウを複数表示する場合(即ち、複数のサーバに対する複数のウィンドウが表示される場合)には、図17又は図18の処理をウィンドウ毎に実行する。
従来技術では、リモートPCのマウスカーソルが、サーバのマウスカーソルが表示されるウィンドウの枠外に出て、他のウィンドウに移るたびに、リモートPCのオペレータが手動で位置ズレ補正機能を発動させ、リモートPCのマウスカーソルとサーバのマウスカーソルの位置ズレを補正していたため、リモートPCのオペレータは煩わしさを感じていた。
このような場合でも、上記図17又は図18の処理を実行することで、自動的にリモートPCのマウスカーソルとサーバのマウスカーソルの位置ズレが補正されるため、リモートPCのオペレータに煩わしさを感じさせず、快適なマウス操作環境を提供できる。
上記第1〜第4の実施の形態では、PC11aのマウスカーソル126を操作するためにマウス14aが使用され、サーバ2aのマウスカーソル122を操作するためにマウス14a又はマウス5が使用されるが、PC11aのマウスカーソル126又はサーバ2aのマウスカーソル122を操作するための操作部材は、マウスに限定されるものではなく、タブレットなどのマウスカーソルを移動させる機能を有する操作部材でもよい。
各サーバの機能を実現するためのソフトウェアのプログラムが記録されている記録媒体を、当該サーバに供給し、当該サーバのCPUが記憶媒体に格納されたプログラムを読み出し実行することによっても、上記第1〜第4の実施の形態と同様の効果を奏する。また、各遠隔端末の機能を実現するためのソフトウェアのプログラムが記録されている記録媒体を、当該遠隔端末に供給し、当該遠隔端末のCPUが記憶媒体に格納されたプログラムを読み出し実行することによっても、上記第1〜第4の実施の形態と同様の効果を奏する。さらにKVMスイッチ1の機能を実現するためのソフトウェアのプログラムが記録されている記録媒体を、当該KVMスイッチ1に供給し、当該KVMスイッチ1のコントローラ101が記憶媒体に格納されたプログラムを読み出し実行することによっても、上記第1〜第4の実施の形態と同様の効果を奏する。この場合、KVMスイッチ1は記憶媒体からプログラムを読み出す装置(CD−ROMドライブ又はDVD−ROMドライブなど)を備えている。尚、プログラムを供給するための記憶媒体としては、例えば、CD−ROM、DVD、又はSDカードなどがある。
また、各サーバのCPUが、各サーバの機能を実現するためのソフトウェアのプログラムを実行することによっても、上記第1〜第4の実施の形態と同様の効果を奏する。また、各遠隔端末のCPUが、各遠隔端末の機能を実現するためのソフトウェアのプログラムを実行することによっても、上記第1〜第4の実施の形態と同様の効果を奏する。さらに、KVMスイッチ1のコントローラ101が、KVMスイッチ1の機能を実現するためのソフトウェアのプログラム(例えば、ドライバ)を実行することによっても、上記第1〜第4の実施の形態と同様の効果を奏する。
なお、本発明は、上述した実施の形態に限定されるものではなく、その要旨を逸脱しない範囲内で種々変形して実施することが可能である。