Apache Guacamoleを使用してリモートデスクトップにアクセスする方法

Apache Guacamoleとは何か?

Apache GuacamoleはApache Foundationによって作成されたオープンソースのフレームワークで、HTML5アプリケーションとしてリモートデスクトップゲートウェイを提供し、RDP、SSH、VNCプロトコルを通じてリモートデスクトップにアクセスするための第三者のソフトウェア無しに機能します。

Guacamoleソリューションには、libguacguacamole-commonguacamole-extなど多くの個別コンポーネントが含まれています。これらのプロジェクトはこの記事の範囲を超えますが、Guacamoleエコシステム内のguacamole-common-jsに焦点を当てます。

guacamole-common-jsとは何か?

Guacamoleプロジェクトは、Guacamole仕様に基づいたコンポーネントと対話するためのJavaScript APIを提供しています。guacamole-common-js APIは、GuacamoleクライアントとタunnelingメカニズムのJavaScript実装を提供し、JavaScriptからアプリケーションのサーバーサイドにプロトコルデータを転送します。サーバーサイドは通常、guacdまたはGuacamoleデーモンを実行しているマシンです。guacamole-common-jsライブラリは、マウスとキーボードのアブストラクションオブジェクトを提供し、JavaScriptのマウスとキーボードイベントをGuacamoleが簡単に処理できるデータに変換します。

guacamole-common-jsを使用してカスタムGuacamoleクライアントを作成する

前提条件:任意のパッケージマネージャーを使用してguacamole-common-jsをインストールします。この例では、npmを使用します。

Shell

 

ステップ1:Guacamoleタunnelを作成する

Guacamoleトンネルを作成することで、サーバーとクライアント間でデータをスムーズにストリーミングできます。

JavaScript

 

トンネルURLを使用してサーバーに追加のパラメータを渡すことができます。例えば、トンネルURLはpath/to/your/tunnel?param1=value1&param2=value2のような形式になります。

ステップ2: トンネルオブジェクトを使用してGuacamoleクライアントを作成する

作成したトンネルオブジェクトをGuacamole.Clientコンストラクタに渡すことで、Guacamoleクライアントオブジェクトを作成できます。

JavaScript

 

ステップ3: 接続を確立するためにconnect関数を呼ぶ

そして、GuacamoleトンネルインスタンスとGuacamoleクライアントインスタンスがあります。これらがリモートマシンに接続するために必要なすべてです。

JavaScript

 

ただし、忘れてはならないことがあります:Guacamole.Clientコンストラクタに渡されるGuacamole.Tunnelオブジェクトは、すでに接続されていない必要があります。なぜなら、内部的にはguacClient.connect()メソッドがtunnel.connect()メソッドを呼び出し、トンネルがすでに接続されているとこの操作が失敗するからです。

さて、鋭い方々はまだクライアント上にリモートマシンの内容が表示されていないことに気づかれているでしょう。それは、まだ一つの重要なステップが欠けているからです。

ステップ4: Guacamoleディスプレイを取得し、DOMにアタッチする

guacClient.connect()を呼んで接続を確立した後、Guacamoleディスプレイ(HTMLDivElement)をDOMにアタッチすることで、リモートマシンのディスプレイを表示できます。それをどうやるか見てみましょう。

HTMLページでリモートマシンの表示をしたいと imagine してください。

HTML

 

次に、ユーザーに表示する必要がある HTMLDivElementguacClient から取得しましょう。

JavaScript

 

えいたら!リモートマシンの内容が DOM に表示されるのです。でも、待ってください、何かが違います。キーボードの入力も、マウスの動きも何も反応しません。これをどう対処するのでしょうか?

ステップ5:キーボードとマウスイベントの設定

キーボードとマウスイベントを設定するためには、guacamole-common-js が提供する入力ハンドラを設定する必要があります。

まずは、マウスイベントを設定する方法を見てみましょう。

JavaScript

 

キーボードの設定はさらにシンプルで、設定する必要があるイベントがたった2つだけです。

JavaScript

 

ステップ6:タッチイベントの設定(オプション)

オプションとして、タッチ入力のためのクライアントを設定することもできますが、それが Guacamole.Mouse イベントに変換されます。

JavaScript

 

Touchイベントを Guacamole マウスイベントに変換していることがわかりますが、このステップは完全にオプションです。タッチスクリーンデバイスでカスタムクライアントを使用するつもりがない限り、タッチイベントを設定する必要はありません。

ステップ7:リモートマシンとの切断

最後に、リモートマシンとの切断という最後のステップに達しました。これは、クライアントのメソッドを呼ぶだけと同じくらいシンプルです。

JavaScript

 

結論

总的来说,Apache Guacamole 是一个强大且多功能的开源框架,它通过 RDP、SSH 或 VNC 协议提供了一种无缝访问远程桌面的方式。guacamole-common-js 库允许开发者创建自定义的 Guacamole 客户端,这些客户端可以与其他 Guacamole 组件如 guacamole-commonguaclibguacamole-ext 接口。

通过遵循本文中概述的步骤,您可以设置一个基本的自定义 guacamole 客户端,该客户端可以连接到您的远程服务器并处理键盘、鼠标和触摸事件。

Source:
https://dzone.com/articles/access-remote-desktops-using-apache-guacamole-a-ba