連載
» 2010年08月11日 00時00分 公開

Inside Linux KVM(2):SPICEプロトコルの内側を知る (2/2)

[平初,レッドハット株式会社]
前のページへ 1|2       

キーボードとマウスの処理を行うInputs Channel

 Inputs Channelは、SPICEのキーボードとマウスの処理を行います。キーボードの処理については、SPICEでは独自にキーマップテーブルを持っています。

 キーマップテーブルには256個のキーマップが登録でき、ラテン文字をはじめ、韓国語などの多言語入力のほか、日本語の全角半角や変換キーなどの特殊キーも入力できるようになっています。キーマップは各クライアントの接続時に初期化されるため、動的には変更できません。

 なお、クライアント側では、対応するキーが押されているかどうかという状態を判断しているだけで、大文字/小文字については、接続先のOS側で処理を行うロジックになっています。特殊なキーボードで独自の拡張を行っていた場合、そのキーは送ることができません。

 また、USB接続やPS/2接続のバーコードリーダーをSPICEで使いたい場合は、PS/2キーボードもしくはUSB HID キーボードとして認識するものであれば、制御コードを通常の文字コードのEnterや「↓」キーに変更することにより、利用できるようになります。

マウスのボタンの番号 図2 マウスのボタンの番号

 マウスの処理については、SPICEでは、「左クリック」「中クリック」「右クリック」「上ホイールボタン」「下ホイールボタン」の5つが利用できます。マウスボタンとして5個までしか処理を行わないので、5個以上(ホイールボタンは4、5個目)のボタンに対するイベントが発生した場合でも、そのボタンからのクリックは無視されます。

 もしもタブレットデバイスなどでマウスエミュレーションが可能なものであれば、SPICEで利用することができます。しかしながらマルチタッチや筆圧検出などの情報をSPICE上で動くOSに対して送りたい場合は、別途、VDIportの拡張を使ってプロトコルを拡張しなければなりません。

VDIport 図3 VDIportによるSPICEプロトコル拡張の仕組み

マウスカーソル処理を行うCursor Channel

 Cursor Channelは、SPICEのマウスカーソルに関する処理を行います。先ほどInput Channelがマウスの処理を行うと説明しましたが、カーソルの処理はCursor Channelで行います。

 SPICEには、マウスカーソルのモードとして、「サーバモード」と「クライアントモード」の2つがあります。

 サーバモードでは、通常のマウスと同じようにマウスカーソルは仮想デスクトップ上で描画されます。

 クライアントモードは仮想デスクトップ上のマウスカーソルを隠し、クライアント側で処理を行います。つまり、クライアント側で計測したマウスの座標情報を仮想デスクトップ上に送るという流れになります。

 このため遅延が大きい環境、例えばPDAなどのマウスカーソルが存在しない環境では、クライアントモードの方がマウスカーソルの反応がスムーズになるため有効です。なお、クライアントモードを利用した場合、ゲストOS側のSpice Agent(駐在プログラム)がマウスカーソル位置を動かします。

再生デバイスの処理を行うPlayback Channel

 Playback Channelは、再生デバイスの処理を行います。音声転送にはCELT圧縮を利用します。CELT圧縮は不可逆圧縮アルゴリズムを利用しており、帯域幅に応じた最適なデータ量に調整します。なお、再生周波数は44.100kHz、8/16ビットなので再生時に非常に迫力のある音声を転送できます。

 動画再生時には、映像ファイルのタイムスタンプ情報を基に、遅延調整もできるようになっています。そのため、映像中の人物の口元の動きと音声がずれるということはありません。再生品質に関していえば、音楽CDとほぼ同等のクリアな音声転送を行うことができます。

録音デバイスの処理を行うRecord Channel

 Record Channelは、録音デバイスの処理を行います。音声転送には再生時Playback Channelと同じくCELT圧縮を利用します。再生周波数は44.100kHz、8/16ビットなので非常にクリアな音声録音が可能となっています。

 接続元のマイクやラインインなどの音声入力デバイスが仮想デスクトップ上で音声入力デバイスとして認識されるようになります。

SPICEプロトコルの今後

 SPICEの開発チームの予定によると、今後、次のような機能が追加される模様です。

  • Direct Drawサポート
    仮想ビデオカードにDirectXのDirect Draw APIを実装します。2D CADアプリケーションやマルチメディアアプリケーションが高速化します。
  • オフスクリーンサーフェース
    VRAMと同じデータ順のスクリーンバッファを提供します。Direct Drawを使ったゲームの画面切り替え処理が高速になり、チラつきが軽減します。
  • ビデオアクセラレーション(DXVA)
    Microsoft DirectXのDirect Showで定義されているGPUを使ったビデオレンダリングの仕組みです。Windows Media PlayerなどDXVAに対応したアプリケーションでの動画再生時に、クライアント側のCPU使用率を低下させることができます。
  • 3Dアクセラレーション
    Direct 3DやOpenGLなどに対応した3Dアプリケーションが仮想デスクトップ内でも高速に動作するようになります。
  • Windows Aeroサポート
    Windows Vista/7を仮想デスクトップ環境で利用する場合、Aeroが動作する方が描画性能が向上します。
  • 解像度変更機能
    SPICEクライアントから解像度変更要求を出して、仮想デスクトップ側の解像度を動的に変更できるようにします。
  • iPhone/iPad対応
    iPhone/iPadなどのスマートフォンや端末を介して、いつも利用している仮想デスクトップ環境にどこからでもアクセスできるようになります。
  • 接続設定ファイル
    現在、SPICEクライアントの設定パラメータはコマンドライン引数にて指定していますが、これを設定ファイル形式にしてやりとりできるようにします。
  • クリップボード共有
    ローカルで動く手元のアプリケーションと、仮想デスクトップ環境とのクリップボードを共有することで、相互にデータ連携ができるようになり、シームレスに利用できます。
  • ネットワークトンネル
    - クライアント側のネットワークプリンタの転送
     ローカルからアクセスできるネットワークプリンタに対して印刷を行えるようにすることで、印刷する際のユーザビリティが向上します。
    - 全般的なリソースシェアリング
  • USBデバイスの共有
    - サーバに接続されているUSBデバイスの共有

 今後、上記のような機能が追加されることにより、仮想デスクトップ内で3Dソフトウェアを使う場合でも、マルチメディアソフトウェアを利用する場合でも、性能や使い勝手などを気にすることはありません。手元の環境とリモートの仮想デスクトップ環境がさらにシームレスに統合し、自分のデスクトップがどこにあるのかを意識せずとも利用できるようになります。ここで新しい点は、これらの機能がオープンソースソフトウェアとして実装されていくということです。

次回の予告

 以上、SPICEの仕組みとチャンネルについて紹介しました。次回はSPICEから話題を変えて、libvirtの最前線について紹介します。

筆者紹介

平 初

レッドハット株式会社 クラウド・仮想化エヴァンジェリスト。クラウドサービスや仮想サーバー統合の商談を日々こなす。Fedora Projectでシステム管理ツールの日本語翻訳を担当。近著に『KVM徹底入門』(翔泳社)、『Xen徹底入門 第2版』(翔泳社)がある。

TwitterID: htaira



前のページへ 1|2       

Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。