\underline{琉球大学主催工学部情報工学科中間発表予稿}

授業やゼミ向けの画面共有システム TreeVNC の設計と実装

115747H 大城美和指導教員 : 河野真治

1 はじめに

普段授業を行う際、プロジェクタを使用し授業を進めることが多い。この場合、後ろの席から見えにくく、不便に感じる。そこで、 VNC を使用し手元のパソコンに画面を出力することによって、この問題は解消される。従来の画面共有システム VNC では、多人数で接続すると画像データ提供側にアクセスが集中し、処理性能が低下してしまい授業の進行についていかなくなってしまう。画面表示の切り替えの際も、 VNC を一度切断し、発表者の画面に接続をし直す必要が出てくる。

本研究室では、授業やゼミ向けの画面共有システムである TreeVNC の開発を行っている。 TreeVNC は、クライアントをツリー状に接続させ、その上から順番にデータを流していくという方法を取り、アクセスを分散させ処理性能の低下を防いでいる。画面を切り替える際もボタンひとつで済む様に設計されていて、再接続をする必要がない。

本研究では、プレゼンテーションを快適に聴講できること、参加者同士が充分なコミュニケーションを取れることを目的として、 TreeVNC に新たな機能の実装を行う。

2 VNC とは

VNC(Virtual Network Computing) は、 RFB プロトコルを使用し遠隔操作を行うリモートデスクトップソフトである。 VNC はサーバ側とクライアント (ビューア) 側に分かれていて、サーバを起動し、クライアントがサーバに接続を行い遠隔操作を可能にする。

3 TreeVNC とは

TreeVNC は、 TightVNC の java 版のビューアを元に作成された画面共有システムである。従来の VNC とは違って、接続に来たクライアントをツリー状に接続させ、上からデータを流していく。この方法を使用しアクセスを分散させ、多人数でも性能を低下せずに、画面共有を行うことができる。接続しているクライアントがボタンひとつでホストになることができ、画面切り替えのために再接続する必要がない。

図 1: TreeVNC の図

4 TreeVNC のデバッグ

機能向上のため TreeVNC をデバッグし、大幅な変更を加えた。

4.1 port 番号の変更

TreeVNC に接続している node すべてが port 番号を保持するように設計し直した。 node が TreeVNC に接続する際に使用されていない port 番号を探し、その port 番号を保持する。 TreeVNC には、子 node から root へと送信する message がある (Screen Change Request, lost Parent 等)。今まではこれら message を、 node から root へ直接 message を送信していた。その際、 node 側では送信専用・ root 側では受信専用の port を固定の番号で開き、使用していた。今回設計し直したことによって、 message のやり取りの際の、余計な通信経路を削除した。そして、 port 番号が重複することなく、パソコン 1 台で TreeVNC を複数立ち上げることができるようになった。

4.2 Tree の構成の変更

有線と無線で別の木構造を形成するように設計し直した。無線での接続の場合、有線と比べてデータの受け渡しの速度が低下する。有線 node と無線 node を同じ木構造に接続すると、無線の node がデータ送受信のボトルネックになってしまう可能性がある。

TreeVNC は、 root が nodeList というリストを持って木構造を管理している。有線と無線で違う木構造を形成する場合、この nodeList をネットワークインターフェース毎に作成しておく。新しい node を接続する場合、 node のネットワークインターフェースを取得し、どの nodeList に登録されるかを決める。こうすることによって、有線と無線で別の木構造を形成することができる。

図 2: マルチネットワークに対応した TreeVNC の図

4.3 ホスト切り替え時の挙動の修正

ホストを切り替える際に viewer を閉じる様、設計した。また、元のホストでは、 viewer が立ち上がる様にした。 viewer を閉じていないと、ビデオフィードバックが起こり、その結果が他のユーザに共有されてしまう。今までだと手動で viewer を最小化する必要があった。

4.4 子 node の再接続時の挙動の修正

親 node との接続が切れた場合、接続していた node は再接続が必要となる。その際、画像データを受け取るスレッドが動作したままであった。そのため、再接続時に画像データの整合性が取れなくなり、エラーが生じる。この問題を解決するために、再接続をする際に一度スレッドを停止し、親 node との通信が確立した際に立ち上げる処理を追加した。

4.5 CheckDelay の再実装

CheckDelay を使用し、データの受け渡しの速度を計測を行う。 root が CheckDelay を、画像データと共に node に送信し、受信した node は、 CheckDelayReply を root へ返信するよう実装した。 CheckDelay を送信した時間と、 Check-DelayReply を受信した時間から、 root - node 間のデータ通信の速度を判定することができる。

5 まとめ

6 今後の課題

6.1 画像データの遅延

全画像データの書き換えが立て続けに起こってしまった場合、データの受け渡し処理で遅延が発生する。解決策として、クライアント側で最新のデータのみを出力するといった実装を行う。

6.2 エラーハンドリング

client で起こったエラーメッセージが root 側に表示されてしまうという問題がある。どの client のエラーかを検出した後、その client の ID を取得し、木構造を下に辿ってエラーメッセージを含むデータを client に送信する。下へと降る際、各 node で ID の確認をし、一致した箇所でエラーメッセージを出力するような実装を行う。

6.3 音声データの共有

TreeVNC に、画像データと共に音声データを追加する。この機能を追加することによって、遠隔からでもプレゼンテーションや授業に参加できる。

6.4 解像度の変更

現在の TreeVNC は、画像データ全体を送信している。これでは共有する画面によってサイズが違い、発表者毎に表示する大きさを手元で変更しなければならない。画面サイズを HD サイズ (1920x1080) に固定すれば、この手間を省くことができる。

6.5 画面の大きさを共有する側で変更できる

どの画面を共有するのかを、ホスト側で指定できるようにする。マルチディスプレイを共有する場合、 2 つの画面が共有されてしまい、本来共有する必要のないデータまで送信することになる。ホストが枠を指定し、枠の大きさの画像データを共有する機能を追加する。

参考文献

[1]