まず適切なブラウザーモードを選択する
オプション 1:WSL2 から Windows への直接リモート CDP
WSL2 から Windows Chrome の CDP エンドポイントを指すリモートブラウザープロファイルを使用します。Gateway を WSL2 内で稼働させ、Chrome を Windows 上で実行し、ブラウザー制御で WSL2/Windows の境界を越える必要がある場合に選択してください。オプション 2:ホストローカル Chrome MCP
Gateway が Chrome と同じホストで動作し、ローカルのログイン済みブラウザー状態を使用したい場合にのみ、existing-session ドライバー(user プロファイル)を使用してください。この構成では、
ホスト間のブラウザートランスポートが不要であり、responsebody、
PDF エクスポート、ダウンロードのインターセプト、バッチアクションも不要である必要があります(Chrome MCP プロファイルは
これらをサポートしていません)。
WSL2 Gateway + Windows Chrome では、直接リモート CDP を使用してください。Chrome MCP は
ホストローカルであり、WSL2 から Windows へのブリッジではありません。
動作するアーキテクチャ
- WSL2 は
127.0.0.1:18789で Gateway を実行する - Windows は通常のブラウザーで
http://127.0.0.1:18789/の Control UI を開く - Windows Chrome はポート
9222で CDP エンドポイントを公開する - WSL2 からその Windows CDP エンドポイントに到達できる
- OpenClaw は WSL2 から到達可能なアドレスをブラウザープロファイルに指定する
Control UI に関する重要なルール
Windows から UI を開く場合、意図的に HTTPS を設定している場合を除き、 Windows の localhost を使用してください。レイヤーごとに検証する
上から下へ進め、途中を飛ばさないでください。1 つのレイヤーを修正しても、 さらに下の別のレイヤーのエラーが引き続き表示される場合があります。レイヤー 1:Windows 上で Chrome が CDP を提供していることを確認する
portproxy を変更する前に IPv4 と IPv6 を診断する
Chromium は最初にリモートデバッグを127.0.0.1 にバインドしようとし、IPv4 のバインドが失敗した場合にのみ
[::1] にフォールバックします。127.0.0.1:9222 でリッスンする永続的な v4tov4 ルールが、
Chrome の起動前にそのエンドポイントを占有することがあります。その場合 Chrome は
[::1]:9222 にフォールバックする一方、古いルールは IPv4 トラフィックを自身のリスナーへ転送し直し、
空の応答を返します。
Chrome のバージョンから推測するのではなく、Windows から実際のリスナーとプロキシルールを
確認してください。
netstat に表示される各 PID について tasklist /fi "PID eq <PID>" を使用してください。
-
chrome.exeが127.0.0.1で応答する場合は、127.0.0.1:9222でも リッスンしている portproxy ルールを削除してください。WSL2 から到達可能な Windows アダプターの アドレスだけを127.0.0.1に転送します。 -
chrome.exeが[::1]でのみ応答する場合は、使用されていない IPv4 アドレスへ転送する代わりに、v4tov6を使用して、WSL2 から到達可能なリスナーを::1に向けてください。
0.0.0.0、LAN アドレス、または tailnet アドレスで公開しないでください。CDP は
ブラウザーセッションの制御権を付与します。
レイヤー 2:WSL2 からその Windows エンドポイントに到達できることを確認する
WSL2 から、cdpUrl で使用する予定の正確なアドレスをテストします。
/json/versionは Browser / Protocol-Version メタデータを含む JSON を返す/json/listは JSON を返す(ページが開かれていなければ空の配列でも問題ありません)
レイヤー 3:適切なブラウザープロファイルを設定する
WSL2 から到達可能なアドレスを OpenClaw に指定します。- Windows 上でしか動作しないアドレスではなく、WSL2 から到達可能なアドレスを使用する
- 外部で管理されるブラウザーでは
attachOnly: trueを維持する cdpUrlにはhttp://、https://、ws://、またはwss://を指定できる- OpenClaw に
/json/versionを検出させる場合は HTTP(S) を使用する - ブラウザープロバイダーから直接 DevTools ソケット URL が提供される場合にのみ WS(S) を使用する
- OpenClaw の成功を期待する前に、同じ URL を
curlでテストする
レイヤー 4:Control UI レイヤーを個別に確認する
Windows からhttp://127.0.0.1:18789/ を開き、次を確認します。
- ページのオリジンが
gateway.controlUi.allowedOriginsの想定と一致している - トークン認証またはペアリングが正しく設定されている
- Control UI の認証問題をブラウザーの 問題としてデバッグしていない
レイヤー 5:エンドツーエンドのブラウザー制御を確認する
WSL2 から実行します。- Windows Chrome でタブが開く
browser tabsがターゲットを返す- 後続のアクション(
snapshot、screenshot、navigate)が同じ プロファイルで動作する
誤解を招きやすい一般的なエラー
高速トリアージチェックリスト
- Windows:
127.0.0.1と[::1]のどちらが/json/versionで応答し、 そのリスナーはchrome.exeに属しているか? - WSL2:
curl http://WINDOWS_HOST_OR_IP:9222/json/versionは動作するか? - OpenClaw の設定:
browser.profiles.<name>.cdpUrlは、その WSL2 から到達可能な正確な アドレスを使用しているか? - Control UI:LAN IP ではなく
http://127.0.0.1:18789/を開いているか? - 直接リモート CDP ではなく、WSL2 と Windows をまたいで
existing-sessionを使用しようとして いないか?