LibVNCServer: VNC サーバーを簡単に実装するためのライブラリ。著作権 (C) 2001-2003 ヨハネス E. シンデリン
一般的な質問がある場合は、コミュニティ チャットで質問するのが最善です。バグや機能リクエストに関する懸念がある場合は、問題トラッカーを使用してください。
すでに LibVNCServer を使用している場合は、おそらく NEWS をお読みください。
VNC は、RFB (リモート フレーム バッファ) プロトコルを使用するプログラムのセットです。これらは、ネット経由でフレーム バッファを「エクスポート」するように設計されています。サーバーをセットアップし、VNC ビューア経由でサーバーに接続できます。サーバーが WebSocket をサポートしている場合 (LibVNCServer はサポートしています)、noVNC などのブラウザ内 VNC ビューアを使用して接続することもできます。
すでに管理用に広く使用されていますが、自分でサーバーをプログラムするのはそれほど簡単ではありません。
これは LibVNCServer によって変更されました。
ホームページには、LibVNCServer または LibVNCClient、あるいはその両方を使用するすべてのプロジェクトの暫定的なリストがあります。
名前 | 番号 | LibVNCサーバー | LibVNCクライアント |
---|---|---|---|
なし | 1 | ✔ | ✔ |
VNC認証 | 2 | ✔ | ✔ |
SASL | 20 | ✔ | |
MSログオン | 0xfffffffa | ✔ | |
アップルARD | 30 | ✔ | |
TLS | 18 | ✔ | |
VenCrypt | 19 | ✔ | |
UltraVNC MSLogonII | 113 | ✔ |
名前 | 番号 | LibVNCサーバー | LibVNCクライアント |
---|---|---|---|
生 | 1 | ✔ | ✔ |
コピーレクト | 2 | ✔ | ✔ |
RRE | 3 | ✔ | ✔ |
コレ | 4 | ✔ | ✔ |
ヘクスタイル | 5 | ✔ | ✔ |
ズリブ | 6 | ✔ | ✔ |
きつい | 7 | ✔ | ✔ |
ウルトラ | 9 | ✔ | ✔ |
TRLE | 15 | ✔ | |
ZRLE | 16 | ✔ | ✔ |
ザイラップ | 17 | ✔ | ✔ |
タイトPNG | -260 | ✔ |
名前 | LibVNCサーバー | LibVNCクライアント |
---|---|---|
RFB | ✔ | ✔ |
VeNCrypt による暗号化された RFB | ✔ | |
AnonTLS 経由で暗号化された RFB | ✔ | |
ウェブソケット | ✔ | |
暗号化されたWebソケット | ✔ |
LibVNCServer は CMake を使用します。CMake はここからダウンロードできますが、プラットフォームのパッケージ マネージャー (apt、yum、brew、macports、chocolatey など) を使用してインストールすることもできます。
その後、次のようにしてビルドできます。
mkdir build
cd build
cmake ..
cmake --build .
LibVNCClient と LibVNCServer の暗号化サポートでは、異なるバックエンドを使用できます。
-DWITH_OPENSSL=ON -DWITH_GCRYPT=OFF
)-DWITH_OPENSSL=OFF -DWITH_GCRYPT=ON
)-DWITH_OPENSSL=OFF -DWITH_GCRYPT=OFF
)LibVNCClient および LibVNCServer のトランスポート層セキュリティ サポートでは、以下を使用できます。
-DWITH_OPENSSL=ON -DWITH_GNUTLS=OFF
)-DWITH_OPENSSL=OFF -DWITH_GNUTLS=ON
)依存関係のインストールを含む、より包括的な例については、Unix CI および Windows CI のビルド セットアップを参照してください。
参考として https://developer.android.com/ndk/guides/cmake.html を参照してくださいが、基本的には次のようになります。
mkdir build
cd build
cmake .. -DANDROID_NDK= -DCMAKE_TOOLCHAIN_FILE= -DANDROID_NATIVE_API_LEVEL=
cmake --build .
Debian 上の MinGW-w64 でテストしました。これはsudo apt install mingw-w64
経由でインストールする必要があります。提供されているツールチェーンファイルを利用できます。これは、 deps
ディレクトリ内の libjpeg や friends などの (オプションの) win32 依存関係を予期するように CMake を設定します。 win32 用の (おそらく自作の) 開発パッケージが必要であることに注意してください。ディストリビューションに付属の-dev
パッケージは機能しません。また、サンプルを実行するには、ビルド ディレクトリにlibwinpthread-1.dll
を配置する必要があることにも注意してください。この DLL は、Linux ビルド マシン上でlocate libwinpthread-1.dll
て見つけることができます。
mkdir build
cd build
cmake -DCMAKE_TOOLCHAIN_FILE=../cmake/Toolchain-cross-mingw32-linux.cmake ..
cmake --build .
サーバー インスタンスの作成方法、入力ハンドラーの接続方法、およびカーソルの処理方法については、LibVNCServer API の概要ドキュメントを参照してください。
LibVNCServer を例で学びたい場合は、examples/server ディレクトリ内のサーバーを参照してください。
LibVNCClient の例は、examples/client にあります。
インストール プロセスでは、LibVNCServer と LibVNCClient の pkg-config .pc ファイルがインストールされます。これらのファイルは、通常のpkg-config --cflags libvncserver
などを介してビルド システムで使用できます。
CMake を使用する場合、LibVNCServer バージョン > 0.9.13 では CMake 構成ファイルが提供されるため、プロジェクトの CMakeLists.txt で次のように指定できます。
find_package (LibVNCServer)
if (LibVNCServer_FOUND)
# libs and headers location are now accessible via properties, but you only
# need to add the respective export target to your project's target_link_libraries,
# cmake will automatically add libs and headers
# eg: add client (YOUR_PROJECT_TARGET being a placeholder for your real target -
# it must be defined by add_executable or add_library):
target_link_libraries (YOUR_PROJECT_TARGET LibVNCServer::vncclient)
# add server:
target_link_libraries (YOUR_PROJECT_TARGET LibVNCServer::vncserver)
endif ()
../examples/example
を介して webclients ディレクトリからサンプル サーバーを起動することで、組み込みの WebSocket サポートを試すことができます。 examples
ディレクトリ内から開始しないことが重要です。そうしないと、サーバー プログラムが HTTP インデックス ファイルを見つけられなくなります。サーバー プログラムは、Web ブラウザーが指す URL を通知します。そこで、noVNC ボタンをクリックして、noVNC ビューア git submodule ( git submodule update --init
経由でインストール可能) を使用して接続できます。
ブラウザーによって信頼される SSL 証明書をまだ持っていない場合は、minica を使用して証明書を作成するのが最も簡単な方法です。 Debian ベースのディストリビューションではsudo apt install minica
を介してインストールでき、MacOS ではbrew install minica
介してインストールできます。
webclients ディレクトリに移動し、次のようにホスト証明書と CA 証明書を作成します。
cd webclients
minica -org "LibVNC" $(hostname)
作成したcacert.crt
インポートしてブラウザ内の証明書を信頼します。たとえば、Firefox の場合は、[オプション]->[プライバシーとセキュリティ]->[証明書の表示]->[認証局] に移動し、作成されたcacert.crt
インポートし、Web サイトを信頼するために使用するにはチェックボックスをオンにします。他のブラウザの場合も、プロセスは同様です。
次に、作成したホスト キーと証明書を指定して、サンプル サーバーを最終的に起動できます。
../examples/example -sslkeyfile $(hostname).key -sslcertfile $(hostname).crt
サーバー プログラムは、Web ブラウザーが指す URL を通知します。そこで、[noVNC-encrypted-connection-] ボタンをクリックすると、暗号化された Websocket 接続を使用して、バンドルされている noVNC ビューアを使用して接続できます。
リンクが「遅い」ためにクライアントとサーバーの接続が遅い場合は、考慮すべき点がいくつかあります。
まず、リンクのスループットが低いか、遅延が高いか、あるいはその両方かを調査する必要があります。
RFB はデフォルトでサーバー プッシュではなくクライアント プルであるため、高遅延リンクではフレームバッファの更新を継続的に要求してみてください。実装例の 1 つがここにあり、応答性が確実に向上します。
ContinuousUpdates RFB 拡張機能もありますが、これは LibVNC では (まだ) サポートされていません。
リンクのスループットが低い場合は、基本的に、フレームバッファの更新ごとに送信されるバイト数を減らす必要があります。
このプロジェクトの開始当初、オリジナルの作者である Dscho は、それを BSD ライセンスにしたいと考えていました。ただし、多くの GPL コードに基づいているため、GPL である必要があります。
AT&T のスタッフは、VNC と同じくらいクリーンで無駄のないものを作成するために非常に協力しました。マネージャーたちは、自分たちの名声を高めるために、プログラムを無料で公開することに決めました。しかしそれだけではありません!彼らは、コードも無料で公開することで、VNC が進化する小さな子供となり、新しい世界を征服し、その親たちを非常に誇りに思うだろうということに気づきました。彼らもそうすることができます!このイノベーションを保護するために、彼らはそれを BSD ではなく GPL にすることに決めました。主な違いは、GPL ではなく BSD から派生したクローズド ソース プログラムを作成できることです。両方について適切な評価を与える必要があります。
弊社の商用製品では、LibVNCServer を利用して独自の VNC サーバーを作成し、配布したいと考えています。これは GPLv2 の文脈では二次的著作物とみなされますか?
はい。 LibVNCServer/LibVNCClient にリンクする場合はプログラムの GPL に従う必要がありますが、派生著作物を組織内で使用する場合はコードを公開する必要がないことに注意してください。https://www を参照してください。 .gnu.org/licenses/gpl-faq.html#GPLRequireSourcePostedPublic
LibVNCServer コードを変更するか否かは、VNC サーバーが二次的著作物と見なされるかどうかを決定するのに影響を及ぼしますか?
いいえ。LibVNCServer/LibVNCClient にリンクするだけで、プログラムは二次的著作物になります。
このプログラムはフリーソフトウェアです。 Free Software Foundation によって公開されている GNU General Public License の条件に基づいて、再配布したり変更したりすることができます。ライセンスのバージョン 2、または (オプションで) それ以降のバージョンのいずれか。
このプログラムは役立つことを期待して配布されていますが、いかなる保証もありません。商品性や特定目的への適合性についての暗黙の保証もありません。詳細については、GNU 一般公衆利用許諾書を参照してください。
このプログラムと一緒に GNU 一般公衆利用許諾書のコピーも受け取っているはずです。そうでない場合は、Free Software Foundation, Inc. (住所 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA) までご連絡ください。