
2026/04/25 19:59
Go WebAssembly と grdp を採用した、Web 上で動作する RDP クライアントです。
RSS: https://news.ycombinator.com/rss
要約▶
Japanese Translation:
Web ベースのリモートデスクトッププロトコル (RDP) クライアントは、Go と WebAssembly を使用し、grdp ライブラリを構築しています。このクライアントは、プラグインなしでブラウザから Windows サーバーに直接接続することを可能にします。そのアーキテクチャは、WebSocket を介して軽量な Go プロキシサーバーに接続するブラウザタブ上の WASM 実行環境と、TCP を介して安全に RDP ホスト(デフォルトポート 3389)へトラフィックを転送するプロキシサーバーで構成されています。すぐに始めるには、Go 1.24 以降と到達可能な RDP サーバーを用意し、リポジトリ
https://github.com/nakagami/grdpwasm.git をクローンして make all を実行し、WASM バイナリ、サポートする JavaScript ファイル、およびプロキシの実行可能ファイルを作成してください。起動するには make serve を使用するか、直接 ./proxy/proxy -listen :8080 -static static を実行してクライアントにアクセスできます(http://localhost:8080)。接続インターフェースでは、ホスト、ポート(デフォルト 3389)、ドメイン、ユーザー名、パスワード、および希望する幅/高さを入力する必要があります。
このクライアントは、キーボード入力量、マウスの移動、クリック、スクロールホイール、ならびに RDPSND を介したオーディオストリーミングを完全にサポートしています。オーディオ再生は、PCM 形式(44100 Hz、ステレオ、16 ビット符号付きリトルエンディアン)でブラウザの Web Audio API を使用して行われます。信頼性の高いキーボード操作のためには、ブラウザタブがフォーカスされたままにする必要があります。キーが反応しなくなったら、キャンバス領域をクリックすることで入力転送を回復できます。
セキュリティ上の考慮事項として、デフォルトではプロキシはあらゆるオリジンからの接続を受け付けます。そのため、信頼できるネットワーク上で配置するか、認証または TLS レイヤー(例:nginx、Caddy)の背後に置くべきです。開発用には、特定のコンポーネントを
make wasm、make proxy、または make wasm_exec で再構築し、アーティファクトをクリーンアップするには make clean を使用できます。本プロジェクトは GPLv3 ライセンスの下で提供されています。本文
Go WebAssembly および grdp を用いて構築された、ウェブベースの RDP クライアントです。ブラウザから Windows リモートデスクトップサーバーに直接接続でき、プラグインは一切不要です。
アーキテクチャ
ブラウザ (WASM) ──WebSocket──► プラクシー(Go) ──TCP──► RDP サーバー
ブラウザが生の TCP ソケットを開くことができないため、軽量な Go 製のプロキシサーバーが、ブラウザからの WebSocket 接続と、RDP サーバーの TCP ポート間の橋渡し役を務めます。
要件
- Go 1.24 以降
- 到達可能な RDP サーバー(Windows または任意の RDP 互換ホスト)
ビルド方法
git clone https://github.com/nakagami/grdpwasm.git cd grdpwasm make all
make all コマンドを実行すると、以下の成果物が生成されます:
| 出力ファイル | 説明 |
|---|---|
| ブラウザ内で実行される Go WebAssembly バイナリ |
| Go ランタイム用の JavaScript サポートファイル |
| WebSocket から TCP への変換を行うプロキシサーバー+静的ファイルサーバー |
実行方法
make serve # または同等の操作として: ./proxy/proxy -listen :8080 -static static
その後、ブラウザで
http://localhost:8080 を開いてください。
プロキシオプション
| フラグ | デフォルト値 | 説明 |
|---|---|---|
| | リスニング先のアドレスおよびポート |
| | 静的ファイルを配信するためのディレクトリパス |
使用方法
- ブラウザで
を開きます。http://localhost:8080 - 接続フォームに情報を填入します:
- ホスト (Host) – RDP サーバーのホスト名または IP アドレス
- ポート (Port) – RDP ポート番号(デフォルト:3389)
- ドメイン (Domain) – Windows ドメイン名(ローカルアカウントを使用する場合は空欄のままにしてください)
- ユーザー名 (User) – ユーザー名
- パスワード (Password) – パスワード
- 幅 / 高さ (Width / Height) – 初期デスクトップの解像度
- 「接続」ボタンをクリックします。
- リモートデスクトップがキャンバス領域に表示されます。キーボードの入力を受け付けるためには、キャンバス領域を一度クリックしてフォーカスを取得してください。
- 「断開」ボタンをクリックしてセッションを終了します。
キーボード・マウス操作
- すべての標準的なキーボード入力は、RDP スキャンコード経由でリモートデスクトップに転送されます。
- マウスの移動、クリック、スクロールホイールの操作は完全にサポートされています。
- 注意: キーボードイベントが正しく転送されるには、ブラウザタブ自体にフォーカスが必要です。キーが無反応の場合は、キャンバス領域内をクリックしてフォーカスを再取得してください。
オーディオ
リモート側のオーディオは RDPSND プロトコルでストリーミングされ、ブラウザの Web Audio API を使用して再生されます(PCM 44100 Hz、ステレオ、16 ビット符号付きリトルエンディアン)。
セキュリティに関する注意事項
プロキシはあらゆるオリジンからの接続を受け入れます。インターネットに公開する場合は、信頼されたネットワーク上で実行するか、認証機能を追加してから使用してください。認証情報はブラウザからプロキシへ WebSocket 経由で転送されます。不信任されたネットワーク越しにアクセスする際には、HTTPS/WSS を使用してください(nginx や Caddy などの TLS ターミネーションを行うリバースプロキシの背後でプロキシを配置することをお勧めします)。
開発
# WebAssembly バイナリのみ再構築make wasm
# プロキシサーバーのみ再構築make proxy
# ローカルの Go ツールチェーンからmake wasm_exec
を更新wasm_exec.js
# ビルド成果物をすべて削除make clean
ライセンス
GPLv3 – 詳しくは grdp プロジェクトの LICENSE ファイルを参照してください。