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

授業やゼミ向けの画面配信システム TreeVNC の機能拡張

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

1 はじめに

本研究室では、 TreeVNC という画面配信システムを開発している。ゼミや講義の質を高め、快適にプレゼンテーションを聴講でき、参加者同士が充分なコミュニケーションを取れることを目的としている。

TreeVNC は、接続しに来たクライアントをバイナリツリー状に接続する。バイナリツリーなら、各 node に最大 2 台分のクライアントしか接続されない。 N 台のクライアントが接続しに来た場合、画面配信の画像データをコピーする回数は、従来の VNC では N 回、 TreeVNC では logN ∗ 2 回となる。 TreeVNC は、 root への負荷を各 node に分散することにより、処理性能が向上している。

ゼミで画面配信を行う場合、発表者が頻繁に入れ替わる。プロジェクタを使用している場合、入れ替えの度にケーブルを挿し直す必要がある。 TreeVNC には、画面配信ボタンが付いており、発表者はそれを押すことによって、画面を切り替えをスムーズに行える。

既に、クライアントがツリー状に接続する設計や画面切り替え等の、基本機能はできていた。

しかし、画面切り替えのプロトコルに不備があり、リファクタリングをすると共に、 port 番号の割り当てや、その他のプロトコルの見直しを行ってきた。今研究では、更に TreeVNC に新しい機能を実装していく。

図 1: TreeVNC の図

2 VNC と TreeVNC について

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

TreeVNC は、 TightVNC の java 版のビューアを元に作成された画面配信システムである。接続しにきたクライアントは図 1 の様に、ツリー状に構成される。

3 動的な port 番号の指定

TreeVNC は複雑な分散アルゴリズムを用いたシステムであり、デバッグを行う環境を整える必要がある。

従来の TreeVNC では、固定 port 番号を複数利用していた。 port 番号は一意なので、 1 台で複数の TreeVNC を立ち上げることができない。

動的に port 番号を割り当てることで、 1 つの node に対して複数の TreeVNC を起動することを可能にした。最低限のソケットポートを開けることによって、メモリの使用量を抑えることにも繋がる。

以前は固定 port 番号を使用し message の通信を行っていたが、一意な port を割り当てられている node が通信を行うことによって、どの port 番号が使用されているかを意識する必要がなくなった。通信している message の一覧を表 1 に示す。

4 Tree の構成の変更

従来の TreeVNC は、クライアントの接続する木構造が単一であった。そのため、ネットワークインターフェースが違うクライアントが同じ木に混在している状況が生じた。

速度の遅いクライアントが木に存在すると、そのクライアント以下の通信速度が遅くなってしまう。

この問題を解決するために、図 2 の様に、ネットワークインターフェース別に木構造を形成するように設計した。

TreeVNC は、 root が nodeList というリストを保持し、木構造を管理している。複数のネットワークインターフェースで木構造を形成する場合、この nodeList をネットワークインターフェース毎に作成しておく。新しい node を接続する際、 node のネットワークインターフェースを取得し、ど

通信経路  message  説明
FIND ROOT  子 node 接続時に root を探す。
send direct message WHERE TO CONNECT  どの node に接続すれば良いかを聞く。
(child to root) LOST PARENT 親 node の接続が切れた時に root に知らせる。
FIND ROOT REPLY  FIND ROOT への返信。
send direct message CONNECT TO  node と node の接続をする。
(root to child)  CONNECT TO AS LEADER  左子 node として、 node と node の接続をする。
message down tree  FRAMEBUFFER UPDATE  画面の差分の画像データ。 EncodingType を持っている。
(root to child)  CHECK DELAY  通信の遅延を測定する message。
message up tree  CHECK DELAY REPLY  CHECK DELAY への返信。
(child to root)  SERVER CHANGE REQUEST  画面切り替えのリクエスト。
FRAMEBUFFER UPDATE REPLY FRAMEBUFFER UPDATE のリクエスト。
send message SET PIXEL FORMAT pixel 値の設定。
(root to VNCServer) SET ENCODINGS  pixel データの encodeType の設定。
KEY EVENT  キーボードからのイベント。
POINTER EVENT  ポインタからのイベント。
CLIENT CUT TEXT  テキストのカットバッファを持った際の message。
FRAMEBUFFER UPDATE  大本の画面の差分の画像データ。 EncodingType を持っている。
send message SET COLOR MAP ENTRIES 指定されている pixel 値にマップする RGB 値。
(VNCServer to root) BELL  ビープ音を鳴らす。
SERVER CUT TEXT  サーバがテキストのカットバッファを持った際の message。

表 1: 通信経路と message 一覧

の nodeList に登録されるかが決まる。こうすることによって、 TreeVNC を複数のネットワークインターフェイス別に木構造を構成することができる。

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

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

画面の切り替えを行う際、新しいホスト側の画面に生じたビデオフィードバックが他のユーザに配信されてしまう問題があった。

ホストの切り替えの際、新しいホスト側の viewer を閉じることで問題を解決した。

6 まとめ

TreeVNC にリファクタリングを行うことによって、複数のネットワークインターフェイスでの通信が遅い問題の解決、開発環境を整えることや、利便性の向上に繋がった。

7 今後の課題

TreeVNC には、画面データが遅延する問題と、クライアントで生じたエラーに対するエラーメッセージの通知箇所を適切な箇所に変更しなければならない問題が残っている。今後これらの問題を解決していく。

そして新たな機能として、遠隔からでもプレゼンテーションが聴講できるよう、音声データを配信する機能、ホスト側で、配信する画面の大きさの制御ができる機能を追加していく。

参考文献

[1] TightVNC: VNC-Compatible Free Remote Control / Remote Desktop Software

   http://www.tightvnc.com/

[2] RFB Protocol - rfbproto.pdf

   http://www.realvnc.com/docs/rfbproto.pdf

[3] 谷成雄, 河野真治, 授業やゼミ向けの画面共有システム TreeVNC の設計と実装 A Screen Sharing System using Tree Structure for Seminar and Classwork 平成 25 年度学位論文 (修士)

[4] 谷成雄, 大城信康, 河野真治. VNC を用いた授業用画面共有システムの設計・開発 Design and implementation of Screen Sharing System with VNC for lecture 情報処理学会論文誌 Vol.53 No.2 (Feb. 2012)

[5] 谷成雄, 大城信康, 河野真治. VNC を用いた授業用画面共有システムの設計と実装. 日本ソフトウェア科学会第 28 会大会 (2011 年度) 講演論文集