1
|
1 \chapter{TreeVNC の新機能}
|
|
2
|
9
|
3 \section{QUALITY モードと SPEED モード}
|
|
4
|
|
5 高解像度のまま拡大・縮小の処理を行うと、
|
|
6 PC のスペックによって描画処理に時間がかかってしまうことがある。
|
10
|
7 配信者の画面をリアルタイムに取得するため、
|
|
8 描画処理に時間のかからないモードを追加する。
|
9
|
9
|
|
10 画像描画処理には、
|
|
11 高画質優先の QUALITY モードと描画速度優先の SPEED モードがある。
|
|
12 今まで TreeVNC は QUALITY モードで使用していた。
|
|
13
|
|
14 しかし、授業中に TreeVNC を使用する際、
|
|
15 拡大・縮小をしてしまうと描画処理が重くなり遅延が生じていた。
|
|
16
|
|
17 今回、どちらのモードを使用するかをビューワから変更出来るようにした。
|
|
18 これにより、描画処理の遅延を解決することができた。
|
|
19
|
|
20
|
3
|
21
|
|
22 \section{表示画面サイズ調整機能}
|
10
|
23
|
|
24 配信側PCによって、配信される画面サイズが変わる。
|
|
25 配信側とクライアントで画面サイズに差がある場合、
|
3
|
26 画面に入らない、或いは表示画面が小さすぎる等の問題が生じる。
|
|
27
|
10
|
28 ユーザ毎に適切な画面サイズがあり、
|
|
29 手軽に表示画面を適切な大きさに変更できるようにしたい。
|
3
|
30
|
|
31 今回、ビューワに HD ボタンと fit screen ボタンを追加した。
|
|
32 HD ボタンを押すと、画面サイズが 1920x1080 サイズに拡大・縮小される。
|
|
33 fit screen ボタンを押すと、クライアントの画面サイズに合わせてフルサイズで拡大・縮小される。
|
|
34
|
|
35 更に、rootとして起動し viewer も表示される -d オプションを使用した場合は、
|
|
36 表示される画面が常にフルサイズに調整されるよう実装した。
|
|
37
|
|
38
|
10
|
39 %\section{配信画面サイズ指定機能}
|
|
40 %
|
|
41 %TreeVNC は、配信する側の
|
|
42 %
|
|
43 %配信する画面サイズを指定できるオプションを追加した。
|
|
44 %TreeVNC 起動時にオプション(${\mathchar`-}$${\mathchar`-}$fixSize)を追加することによって、
|
|
45 %指定した幅・高さの画面サイズのみを配信することができる。
|
|
46 %起動方法をソースコード\ref{fixsize}に記述する。
|
|
47 %
|
|
48 %\begin{lstlisting}[caption=オプション--fixSize,label=fixsize]
|
|
49 % java -jar TreeVNC.java -d --fixSize 1920 1080
|
|
50 %\end{lstlisting}
|
|
51 %
|
|
52 %VNCServer からは、配信する側の画面全体のデータが送信される。
|
|
53 %root は指定したサイズ領域のデータのみを表示するため、
|
|
54 %領域内の更新のみを node に送信し、領域内のみを描画している。
|
|
55 %そして、VNCServer へ更新データを要求する際は、
|
|
56 %領域内のみの画像データを要求する。
|
|
57 %これにより、node に指定された領域以外は表示されない。
|
|
58 %
|
1
|
59
|
|
60 \newpage
|
|
61
|
3
|
62
|
1
|
63 \section{マルチディスプレイ対応}
|
|
64
|
10
|
65 画面配信側のPCがマルチディスプレイの場合、
|
|
66 VNCServer からは複数の画面全体の画像データが送信され、
|
|
67 図\ref{fig:multidisplay}の様に画面が配信される。
|
|
68
|
|
69 \begin{figure}[htpd]
|
|
70 \begin{center}
|
|
71 \includegraphics[scale=0.8]{./images/chapter4/multidisplay.pdf}
|
|
72 \end{center}
|
|
73 \caption{マルチディスプレイの描画}
|
|
74 \label{fig:multidisplay}
|
|
75 \end{figure}
|
|
76
|
|
77 授業やゼミ等でTreeVNCを使用する場合、複数画面の表示は必要ない。
|
3
|
78
|
|
79 そこで、一画面のみをフィルタリングし表示するためのオプション機能(${\mathchar`-}$${\mathchar`-}$filterSingleDisplay)を追加した。
|
1
|
80 オプションを追加した起動方法をソースコード\ref{filtersingledisplay}に記述する。
|
|
81
|
|
82 \begin{lstlisting}[caption=オプション--filterSingleDisplay,label=filtersingledisplay]
|
7
|
83 java -jar TreeVNC.java -d --filterSingleDisplay
|
1
|
84 \end{lstlisting}
|
|
85
|
3
|
86 root は全画面データから一画面のみをフィルタリングする必要がある。
|
|
87 シングルディスプレイサイズは、個々のクライアントでしか取得できない。
|
7
|
88 配信側は画面の切り替えを行う際に、シングルディスプレイサイズを取得する。
|
|
89 そして、root へ送信する画面切り替えの要求メッセージ SERVER\_CHANGE\_REQUEST に
|
3
|
90 シングルディスプレイサイズを付加する。
|
|
91
|
|
92 root はメッセージを受け取り initData を変更する。
|
|
93 本来 initData は、RFB プロトコルで行われる通信中に VNCServer から受信する ServerInit message から生成される。
|
7
|
94 マルチディスプレイの場合、ServerInit message は全画面サイズ様に生成されている。
|
|
95 なので、そのままの initData を使用すると複数画面全体を描画してしまう。
|
|
96 それを避けるため、initData をシングルディスプレイサイズ用の originalInitData に生成し直す。
|
|
97 図\ref{fig:initdata}の様に、root は接続されている node へ originalInitData を送信する。
|
1
|
98
|
|
99 \begin{figure}[htpd]
|
|
100 \begin{center}
|
3
|
101 \includegraphics[scale=0.8]{./images/chapter4/sendInitData.pdf}
|
1
|
102 \end{center}
|
3
|
103 \caption{シングルディスプレイサイズ用の initData}
|
|
104 \label{fig:initdata}
|
1
|
105 \end{figure}
|
|
106
|
3
|
107 さらに VNCServer から送信されてきた全画面データをそのまま node に流すのではなく、
|
|
108 シングルディスプレイサイズの領域の更新部分のみを root 側でフィルタリングし流す。
|
4
|
109 これにより、一画面のみの表示が可能となる。
|
1
|
110
|
4
|
111
|
|
112 \section{Retina のマルチディスプレイ対応}
|
|
113 Retina ディスプレイ等の高解像度ディスプレイには、
|
|
114 より画素密度を高く表示する HiDPI (High-dot per inch) モードがある。
|
|
115 HiDPI モードの場合、
|
|
116 PC で設定する解像度に対して縦横2倍の画像データを表示している。
|
10
|
117
|
|
118 HiDPIモードを使用しているPCが配信者の場合、
|
|
119 シングルディスプレイのフィルタリングに失敗してしまう問題が発生した。
|
|
120
|
|
121 % ここらへん怪しいような気がするけど頭が働かない
|
|
122 % 「2倍のサイズになると何が問題なの」という問いにちゃんと答えられてる??
|
|
123 シングルディスプレイ対応のため、originalInitDataを生成するが、
|
|
124 今までのシングルディスプレイサイズの取得方法では正しいサイズを取得できないことが原因となっていた。
|
|
125 シングルディスプレイサイズを取得すると PC で設定する解像度のサイズになるが、
|
|
126 VNCServer から送信される画像データサイズは解像度の2倍のサイズになっており、ズレが生じたためである。
|
4
|
127
|
|
128 マルチディスプレイ対応のためには、
|
|
129 シングルディスプレイサイズを VNCServer から送信される画像データサイズに合わせなければならない。
|
|
130 そこで、HiDPI モードであるかどうかを検知する必要がある。
|
|
131
|
|
132 VNCServer は、接続されているディスプレイサイズを合わせて画像データを送信してくる。
|
|
133 HiDPI モードであるかどうかを検知には、1枚目以降のディスプレイサイズが必要となる。
|
|
134
|
|
135 以下に、HiDPI モードの取得方法を記述する。
|
|
136
|
|
137 \begin{itemize}
|
|
138 \item VNCServer から送信される width は図\ref{fig:singledisplaywidth}の VNCServer Single width である
|
|
139 \item VncServer Single width から、図\ref{fig:singledisplaywidth}の 2nd Single width を引く
|
|
140 \item 余りのサイズが取得してきた図\ref{fig:singledisplaywidth} Single width の2倍であれば、HiDPI モードである
|
|
141 \end{itemize}
|
|
142
|
|
143 HiDPI モードの場合、originaiInitData を取得してきたシングルディスプレイの2倍サイズで生成する。
|
|
144 この方法を用いて、HiDPI モードでもマルチディスプレイ対応ができた。
|
|
145
|
|
146 \begin{figure}[htpd]
|
|
147 \begin{center}
|
|
148 \includegraphics[scale=0.6]{./images/chapter4/singleDisplayWidth.pdf}
|
|
149 \end{center}
|
|
150 \caption{Single Display Width}
|
|
151 \label{fig:singledisplaywidth}
|
|
152 \end{figure}
|
1
|
153
|
|
154
|
|
155 \newpage
|
|
156
|
3
|
157
|
4
|
158 \section{遠隔地からの接続}
|
|
159 遠隔地からでもゼミや授業に参加できるよう、
|
|
160 異なるネットワークインタフェースから TreeVNC への接続を可能にした。
|
3
|
161
|
4
|
162 遠隔地からの接続を実現した TreeVNC を図\ref{fig:remotetreevnc}に示す。
|
|
163 図\ref{fig:remotetreevnc}では、
|
|
164 ネットワーク A で立ち上げた TreeVNC に対し、
|
|
165 遠隔地のネットワーク B, C, D から接続している状態である。
|
|
166 図の様に、各ネットワーク毎に TreeManager を持つ root node が存在する。
|
|
167 TreeManager を持つ node は、そのネットワーク上での接続の木構造を管理する root となる。
|
|
168 遠隔地ネットワークから直接 TreeVNC に接続した node は root となる。
|
1
|
169
|
|
170 \begin{figure}[htpd]
|
|
171 \begin{center}
|
4
|
172 \includegraphics[scale=0.6]{./images/chapter4/remoteTreeVnc.pdf}
|
|
173 \end{center}
|
|
174 \caption{Remote Network Tree}
|
|
175 \label{fig:remotetreevnc}
|
|
176 \end{figure}
|
|
177
|
|
178 \newpage
|
|
179
|
|
180 以下に、遠隔地からの接続の手順を記述する。
|
|
181
|
|
182 \begin{itemize}
|
|
183 \item 遠隔地 node から接続したい root に対して接続を要求する WHERE\_TO\_CONNECT message を送信する(図\ref{fig:remotevncconnect}中, 1:)
|
|
184 \item root は、遠隔地 node に対して接続先を含む CONNECT\_TO message を送信する(図\ref{fig:remotevncconnect}中, 2:)
|
|
185 \item 遠隔地 node は指定された接続先に対して接続しに行く(図\ref{fig:remotevncconnect}中, 3:)
|
|
186 \end{itemize}
|
|
187
|
|
188 \begin{figure}[htpd]
|
|
189 \begin{center}
|
|
190 \includegraphics[scale=0.7]{./images/chapter4/remoteVncConnect.pdf}
|
|
191 \end{center}
|
|
192 \caption{遠隔地 node からの接続}
|
|
193 \label{fig:remotevncconnect}
|
|
194 \end{figure}
|
|
195
|
|
196 ネットワーク毎に TreeVNC の木構造は管理される。
|
|
197 図\ref{fig:remotenetworktree1}の TreeVNC の木構造はバイナリツリーを形成している。
|
|
198 しかし、遠隔地 node が接続している node には合計3つ node が接続している。
|
|
199 遠隔地 node は、root の管理する nodeList に追加されない。
|
|
200 これは、node の接続・切断・切り替えに遠隔地 node を関与させないためである。
|
|
201
|
|
202 ネットワーク毎に root が存在する。
|
|
203 root は同じネットワーク上の新しい node からの
|
|
204 接続を受け付ける(図\ref{fig:remotenetworktree1}中, 1,2,1',2':)。
|
|
205
|
|
206 \newpage
|
|
207
|
|
208
|
|
209 \begin{figure}[htpd]
|
|
210 \begin{center}
|
|
211 \includegraphics[scale=0.7]{./images/chapter4/remotenetwork.pdf}
|
1
|
212 \end{center}
|
|
213 \caption{Remote Network Tree}
|
|
214 \label{fig:remotenetworktree1}
|
|
215 \end{figure}
|
|
216
|
4
|
217
|
|
218 遠隔地 node からでも、画面を配信できるようにする。
|
|
219 遠隔地 node から画面配信を行う場合の画面の切り替えを図\ref{fig:remotenetworktree2}、図\ref{fig:remotenetworktree5}に示す。
|
|
220 以下に、画面切り替えの説明を記述する。
|
|
221
|
|
222 \begin{itemize}
|
|
223 \item 遠隔地 node が親 node へと SERVER\_CHANGE\_REQUEST を送信する(図\ref{fig:remotenetworktree2}中, 1:)
|
|
224 \item SERVER\_CHANGE\_REQUEST には、id が付いており、遠隔地 node からであれば -1 が付加されている
|
|
225 \item SERVER\_CHANGE\_REQUEST は root へと送信される(図\ref{fig:remotenetworktree2}中, 2:)
|
|
226 \item root は SERVER\_CHANGE\_REQUEST の id を確認し、id = -1 の場合、遠隔地 root に対して WHERE\_TO\_CONNECT を送信する(図\ref{fig:remotenetworktree2}中, 3:)
|
|
227 \item 遠隔地 root は WHERE\_TO\_CONNECT の返信として、接続先を含む CONNECT\_TO を送信する(図\ref{fig:remotenetworktree5}中, 4:)
|
|
228 \item root は指定された接続先へと接続しに行く(図\ref{fig:remotenetworktree5}中, 5:)
|
|
229 \end{itemize}
|
|
230
|
|
231
|
|
232
|
|
233
|
|
234
|
1
|
235 \begin{figure}[htpd]
|
|
236 \begin{center}
|
4
|
237 \includegraphics[scale=0.7]{./images/chapter4/remotenetwork2.pdf}
|
1
|
238 \end{center}
|
|
239 \caption{Remote Network Tree}
|
|
240 \label{fig:remotenetworktree2}
|
|
241 \end{figure}
|
|
242
|
4
|
243 \begin{figure}[htpd]
|
|
244 \begin{center}
|
|
245 \includegraphics[scale=0.7]{./images/chapter4/remotenetwork5.pdf}
|
|
246 \end{center}
|
|
247 \caption{Remote Network Tree}
|
|
248 \label{fig:remotenetworktree5}
|
|
249 \end{figure}
|