Virtual Network Computing

**Virtual Network Computing**（ヴァーチャル・ネットワーク・コンピューティング、略称**VNC**）は、ネットワーク上の離れたコンピュータを遠隔操作するためのRFBプロトコルを利用する、リモートデスクトップソフトである。VNCはクロスプラットフォームなソフトウェアとして開発されているため、インストールされているマシン同士はOSなどのプラットフォームの種類に依存することなく通信できる。

VNCの最初のバージョンは Olivetti & Oracle Research Lab によって開発されたが、オリジナル版のソースコードがGPL方式のライセンス下でオープンソースとして公開されているため、現在では様々な派生ソフトが誕生している。

## 概要
このソフトウェアはサーバソフトと、クライアント（もしくはビューア）ソフトの2つに分かれている。

操作される側でサーバソフトを起動しておき、遠隔操作する側はクライアントソフトを起動させ接続、遠隔操作を行う。

VNCで通信プロトコルとして使用されるRFB Protocolは非常に簡素なプロトコルで、サーバ側はピクセルデータ化した画面を小さな長方形に分け、位置を指定してクライアントに送信するだけである。しかし、この方法は非常に単純であると同時に、大きな帯域幅を使用する。そこで、帯域幅の削減のために様々な方法が編み出された。様々なエンコード形式やデータ圧縮がこれに該当するが、最も単純な方法は、前の送信と比較して変更された部分のみを送信する方法である。これはマウスポインタの移動のみが行われた場合などには非常に有効だが、全体的な変化の大きい動画再生をしている画面などを送信するには適していない。それはネットワークが十分に高速であっても変わらない。なお、このような拡張プロトコルを使用するには、サーバとクライアント双方のソフトウェアがその形式に対応している必要がある。

デフォルトではTCPの5900から5906までのポート番号を使用する。また、ウェブブラウザ上で動作するJava版のクライアントは、既定で5800から5806までのポートを使用する。これらは設定によって変更可能である。通常はポート毎に（物理デスクトップとも）独立した仮想デスクトップセッションを提供する。同じポートにアクセスする複数のクライアントは同じデスクトップを共有する。

WindowsはシングルセッションOSのため、5900番以外のポートを使用することは少ない。クライアント（ビューア）は物理デスクトップのミラリング・イメージを見ることになる。ターミナルサービスと違い、Windowsにログインしているユーザに無関係であり、また仮想デスクトップのサイズは物理デスクトップのサイズになるので両者が異なるとレターボックスやスクロールなどの効果が生じる。

## メリット

当項目冒頭にもあるとおり、VNCはマルチプラットフォームでのGUIの遠隔操作が可能である。Linuxの操作をWindowsから、あるいはその逆でWindowsの操作をLinuxからなど、自由度が高い。派生ソフトのMetaVNCにおいてはLinux上のウインドウ毎にVNCビューアを開くことができる。

また、タブレット端末からVNCを利用して自宅のPCを操作し、ファイルの送受信、テレビ録画予約などが可能である。

CPU切替器という商品があり、複数台のPC、複数のOSを一組のモニタ、マウス、キーボードで操作できるが、これをVNCで代用することもできる。

PC操作を教える側、教わる側が傍にいなくても、実際に操作して見せて説明ができる。これに特化したのがMultiVNCと言えるが、他の派生VNCでも充分な場面が多い。

ネットワーク管理者が、施設内の複数のPCのメンテナンスを行う際、時間やコストを削減するのに役立てる場合がある。

外出先から、あるいは前述の管理者がVNCを利用する場合、電源の切れているPCはWake-on-LANを利用することで電源を入れることができる。こういった複合的な手段で多様な可能性がある。

## デメリット
### 暗号化
オリジナルのVNCは通信に暗号を用いないため、パスワード等を含め全て平文で送信される。このため、Telnet等と同じく危険なプロトコルであり、使用には注意が必要である。

ただし、よりセキュリティの高いSSHやVPNをトンネルして接続することも出来る。また、派生バージョンでは、TLSで暗号化したり、NTLM認証が可能であったりと、セキュリティ面の強化が図られているものもある。

SSH によるポートフォワーディングは、5900 番ポートを転送するには、OpenSSH の場合は `ssh -NT -L localhost:5900:localhost:5900 -i 秘密鍵のパス ユーザー名@ホスト名` をクライアント側のパソコンで実行すれば良く、VNC クライアントは localhost の 5900 番ポートに対して接続する。

全てのサーバソフトウェアと同じように、外部からの使用するポートへの通信がファイアウォールやルーターでブロックされていた場合は、VNCを利用することは出来ない。また、セキュリティ上危険であるため、平文プロトコルは原則として開けるべきではない。

### VNCループ
以下、いずれも合わせ鏡のような状態を作り出すことによって起こる現象。ただし厳密には、ポート開放など正常な動作を確認するために用いられる場合もある。
* ひとつのマシン上でクライアントとサーバを起動し自分自身に接続した時。
* 2台のコンピュータがお互いにもう一方を操作しようとした場合に、**VNCループ**と呼ばれる現象が起こることがある。マシンAで画面変化があった時、それがマシンBに送信され表示されると同時にさらにマシンBの画面変化としてマシンAに送信され…と繰り返す状態。場合によっては無限ループに陥ることもあり、マシンパワーを消費しコンピュータのフリーズを引き起こす事もあるので注意が必要である。

### 音声
サウンド出力はVNCで送受信できない。

## 対応OS

; サーバ動作OS
: Windows 98/Me/2000/XP/2003/2008/Vista/7、macOS、Linux、Solaris、Windows CE/iOS(要 jailbreak)
; クライアント動作OS
: Windows 98/Me/2000/XP/2003/Vista/2008/7/2008 R2、macOS、Linux、Solaris、Windows CEなどJavaが作動するOS全て、iOS (アップル)。

また、TridaVNC、ChromiVNC、µVNC、WinVNC、UltraVNCなどの本家から派生したものがあり、Palm OS、携帯電話ならBREW上でも対応している。

Mac OS X v10.5では、VNCクライアント「画面共有」及びVNCサーバが内蔵されている。
*VNCクライアントを利用する場合は、Finderのサイドバーの共有に表示されている機器を選択し「画面共有...」を選ぶか、IPアドレスを入力して使う場合は、「/システム/ライブラリ/CoreServices/画面共有("/System/Library/CoreServices/Screen Sharing.app")」を起動する、またはFinderの「移動」メニューから「サーバへ接続...」を選び、サーバアドレスに「vnc://」+ IPアドレスを入力し接続する。
*VNCサーバを利用する場合、「システム環境設定」→「共有」→「サービス」で出てくるサービス一覧から「画面共有」 をオンにするか、「リモートマネージメント」をONにして画面右下にある「アクセス権…」ボタンを押すと出てくる設定パネル内で「VNC使用者が画面を操作することを許可」をオンし、VNC接続のためのパスワードを右の欄に設定する。

## VNCの開発元および派生
VNCはイギリスのケンブリッジでThe Olivetti & Oracle Research Lab (ORL)が開発した。Olivetti と Oracle Corporation の共同所有の研究所であった。オリジナル版のソースコードはGPL方式のライセンス下で公開された。

この研究所を1999年にAT&Tが買収したが2002年には研究所における開発業務をやめた。これにより、VNCは開発停止となった。
この後開発メンバーが新会社を設立し新版をRealVNCとして公開。直系のVNCである。

GPLライセンスで公開されたため、世界中の多くの開発者が様々な派生VNCを誕生させた。それぞれは独自の開発である。
サーバとクライアントの接続は、転送方式が同一であれば、別のVNCであっても論理的に可能である。

; VNC
: 現在は開発停止しているオリジナル。様々な環境用に移植開発されており、その内Windows版はWinVNCとも呼ばれる。RealVNCが後を継いでいる。
; RealVNC
: VNCの正統な後継ソフト。VNCと会社は異なるが開発陣が同一でVNCがRealVNCになったと捉えて問題ない。VNCの時と違い有償の高機能版が存在する。
; TightVNC
: 転送方式にオリジナルのTight Encodingを初めて導入した拡張版VNC。Tight Encodingは高圧縮率で低速回線環境でも動作できる反面その分CPUパワーを必要とする。VNC/RealVNCと比べても対応環境が多いのも特徴。
; TigerVNC
: TightVNCの派生。TightVNCの高機能をそのまま引き継いだうえ、クライアント側にOpenGLを利用した高速化を実現している。Fedoraなど一部のLinuxディストリビューションでは標準のVNCクライアント・サーバーソフトとして採用されている。
; TurboVNC
: TightVNC 1.3 の派生。VirtualGL と libjpeg-turbo の組合せにより OpenGL を使用した3Dアプリケーションの画面転送に対応している。
; UltraVNC
: 以前はUltr@VNCとも。なおUltra@VNCは誤り。Windowsに特化し描写の高速化を狙った多機能VNC。ファイル転送や画面拡大縮小、さらにビデオフックドライバによる取り込み高速化などのオリジナル拡張と、他の派生VNCで生まれた転送方式など多くの機能を盛り込んでいる。Windows専用。
; noVNC
: HTML と JavaScript により、ウェブブラウザで実行可能な VNC クライアント。別途 VNC サーバーが必要で、プロキシとして動作する。
; gtk-vnc

: GTK用のVNCWidgetとして、提供することを目標として、開発されている。このため、VNCビューワを含むアプリケーションを数十行程度でかける程度のAPIが提供されていることが特徴である。
: また、もう1つの特徴として、Firefoxへのプラグインとして機能することが上げられる。
; LibVNC
: VNC サーバーや VNC クライアントを組み込むためのC言語のライブラリ。これを使用した VNC 関連アプリケーションが多数存在する。
; QEMU
: リモートマシンを制御するためのVNCサーバ機能がQEMUには、含まれている。
; ShowMyPC
: Windows向け。クライアントソフト版とJava版がある。

以下は本家以外のかつて開発されていたソフトウェア。
; ChromiVNC
: Classic Mac OS用VNC。Mac OS Xには未対応。2001年で開発は停止している。
; TridiaVNC
: VNCにサポート業務を付加した商業向けVNC。Tridia社は2005年に開発・販売ともに終了している。
; µVNC
: マイクロVNCと読む。mVNCとも。VNCの公開ソースを全く利用せずに独自開発したVNC互換クライアントソフト。主に携帯電話向けビューア。ZRLE転送方式や画面の拡大縮小に対応、またSSHクライアントを内包している。µVNCにサーバソフトは存在せず別の派生VNCのサーバ利用を前提とする。また、V2.4.0以降では、動画再生を可能にする独自のZYWRLE転送方法、音声を配信する機能なども内包している。推奨はUltraVNCサーバ。開発・販売は日立システムアンドサービス。2013年9月末日をもって配布および使用停止措置が取られた。
; Win2VNC
: クライアントに画面を表示しない特殊なVNC。主に一方のマシン(デスクトップのメインPCなど)にあるキーボード・マウスを使ってもう一方のマシン(サブPCやノートPC)を操作する事が目的。マルチディスプレイを扱うかのように画面端から別のマシンへ移動ができる。
; MultiVNC
: 1対多の接続に特化した特殊なVNC。IT系講習において講師が生徒の画面を確認したり操作する事を目的とする。MultiVNCではクライアントの画面をサーバ側に送るという逆の発想になっている。
; MetaVNC
: アプリケーションのウインドウのみ転送・表示する特殊なVNC。他のマシンにあるアプリケーションをあたかもその場にあるかのように扱うのが目的。Windows 2000/XP/Vista版、UNIX/LINUX版、Java版が存在する。例としてLinux上のウインドウ毎にVNCビューアを複数開くことができるのでWindows上にLinux側の必要なウインドウを複数開き、シームレスな操作が可能となる。また、TightVNCのTight Encodingを使えるようになった。2007年が最後のバージョン。

## 派生サービス
VNCを使った、商用・非商用のサービス。

中間サーバーによる橋渡しによって、リモート操作する側とされる側を“NAT環境であるか否か”やIPアドレス・ファイアウォールなどのネットワークの知識なしに利用できることなどが主な特徴。
従来、ファイアウォールのポート開放を必要とし、ポートスキャンなどのリスクがあったのに対し、IDによる管理ができるのでセキュリティリスクを管理しやすくする目的もある。

### 現行サービス
これまでオープンソースで改良されてきたVNCの様々な技術が盛り込まれている。

; CrossLoop
: 2007年サービス開始。サーバーソフトウェアとクライアントソフトウェアが一体型で、リモート操作される側に表示されたランダムな数字を、電話など何らかの方法で操作する側の人に知らせることで接続するのが特徴。
: ランダムな数字は毎回変わるので望まない接続を避けられる。
: インストールから接続までが非常にシンプルなため、初心者でもすぐに使い始められることから、初心者支援のためのVNCという特徴がある。
また、無料のアカウントを作ることで対価を目的としたサービスの提供などができると謳っている。
: ソフトウェアはWindows向けとMac OS X向けがあり、無料版、有料版で機能が違う。
; TeamViewer
: 2008年サービス開始。リモート操作される側に表示されたランダムな数字とパスワードを使って接続するが、毎回変わるわけではないので一人のユーザーが遠隔地のコンピューターを操作したり、サーバーのGUIにアクセスするのに利用可能。
無料のアカウントを使うことでアカウントごとにアクセス権のあるコンピューターを操作できる。
: このほか、ファイル転送やVPNによる接続ができる。
操作される側がデュアルディスプレイの場合、自由に切り替えて操作することもできる。
: ソフトウェアはWindows向けとMac OS X向け、Linux向けがあり、無料版、有料版で機能が違う。
: iPhone/iPad向けアプリやAndroid向けアプリもあり、リモート操作する側として機能する。
; LogMeIn
: ブラウザ経由でリモート操作を行えるサービス。常駐するクライアントアプリさえインストールしておけば、サーバー側のIP変更などに影響されず遠隔操作を簡単に行える。ソフトウェアはWindows、Mac OS X向けが無料配布されている。また、ファイル送信などに対応した有料版もある。そして、Android向けなどのスマートフォン用クライアントも販売されている。なお2014年1月をもってlogmein freeによる無償接続サービスは終了し、全てが有料化した。
; synergy-plus

### かつてあったサービス
; ハコ箱リモート
: エスケイサイバーパス株式会社が運営していたオンラインストレージサービスHakobako.comの会員制（無料）サービスのひとつ。2004年サービス開始。2005年4月にHakobako.comサービス終了。中間サーバーの停止とともに利用不可となった。
: ちなみにHakobako.comが日本向けに提供していた**ハコ箱プレーヤー**はGOM Playerの日本語版であり、Hakobako.comサービス終了後まもなく、正式に日本語版のGOM Playerがリリースされた。
: ハコ箱リモートもGOM Player同様、LGPLライセンスへの違反が疑われていた。
: Windows向けのみ。

## 脚注

## 関連項目
* RFB Protocol
* Wake-on-LAN
* リモートデスクトップ
** Apple Remote Desktop - macOS向けのVNCベースの複数サーバの同時管理機能を備えたリモート管理ツール
** Remote Desktop Protocol (RDP) - Microsoft Windowsのリモートデスクトップ
** PC Anywhere - シマンテック社のリモートコントロールソフトウェア
** RemoteView - RSUPPORT社のリモートコントロールソフトウェア
** NetOp - リモートコントロールソフトウェア
** WinShare - NECのソフトウェア
* リモートコントロール
* VirtualGL
* Splashtop Streamer - リモートデスクトップソフト「Splashtop」がIntel「Sandy Bridge」にバンドル -INTERNET Watch

## 外部リンク
* RealVNC Ltd.
* UltraVNC
* Bozteck VNC
* VNC使い方