Elige primero el modo de navegador correcto
Opción 1: CDP remoto directo de WSL2 a Windows
Usa un perfil de navegador remoto que apunte desde WSL2 a un endpoint CDP de Chrome en Windows. Elige esto cuando el Gateway permanezca dentro de WSL2, Chrome se ejecute en Windows y el control del navegador tenga que cruzar el límite WSL2/Windows.Opción 2: Chrome MCP local al host
Usa el controladorexisting-session (perfil user) solo cuando el Gateway se ejecute
en el mismo host que Chrome, quieras el estado del navegador local con sesión iniciada, no
necesites transporte de navegador entre hosts y no necesites responsebody,
exportación a PDF, interceptación de descargas ni acciones por lotes (los perfiles de Chrome MCP no
admiten esto).
Para WSL2 Gateway + Chrome en Windows, usa CDP remoto directo. Chrome MCP es
local al host, no un puente de WSL2 a Windows.
Arquitectura funcional
- WSL2 ejecuta el Gateway en
127.0.0.1:18789 - Windows abre la interfaz de usuario de control en un navegador normal en
http://127.0.0.1:18789/ - Chrome en Windows expone un endpoint CDP en el puerto
9222 - WSL2 puede alcanzar ese endpoint CDP de Windows
- OpenClaw apunta un perfil de navegador a la dirección alcanzable desde WSL2
Regla crítica para la interfaz de usuario de control
Cuando la interfaz de usuario se abre desde Windows, usa localhost de Windows salvo que tengas una configuración HTTPS deliberada:Validar por capas
Trabaja de arriba abajo; no te saltes pasos. Arreglar una capa aún puede dejar visible un error distinto de una capa más abajo.Capa 1: verifica que Chrome esté sirviendo CDP en Windows
Diagnostica IPv4 e IPv6 antes de cambiar portproxy
Chromium intenta enlazar la depuración remota a127.0.0.1 primero y recurre a
[::1] solo si falla el enlace IPv4. Una regla v4tov4 persistente que escuche en
127.0.0.1:9222 puede ocupar ese endpoint antes de que Chrome arranque. Chrome entonces
recurre a [::1]:9222, mientras la regla antigua reenvía el tráfico IPv4 de vuelta a
su propio listener y devuelve una respuesta vacía.
Comprueba los listeners y las reglas de proxy reales desde Windows en lugar de inferirlos
a partir de la versión de Chrome:
tasklist /fi "PID eq <PID>" para cada PID de netstat.
-
Si
chrome.exeresponde en127.0.0.1, elimina cualquier regla de portproxy que también escuche en127.0.0.1:9222. Reenvía solo la dirección del adaptador de Windows alcanzable desde WSL2 a127.0.0.1. -
Si
chrome.exeresponde solo en[::1], apunta el listener alcanzable desde WSL2 a::1conv4tov6en lugar de reenviar a una dirección IPv4 no usada:
0.0.0.0, una dirección de LAN ni una dirección de tailnet: CDP concede control de
la sesión del navegador.
Capa 2: verifica que WSL2 pueda alcanzar ese endpoint de Windows
Desde WSL2, prueba la dirección exacta que planeas usar encdpUrl:
/json/versiondevuelve JSON con metadatos Browser / Protocol-Version/json/listdevuelve JSON (un arreglo vacío está bien si no hay páginas abiertas)
Capa 3: configura el perfil de navegador correcto
Apunta OpenClaw a la dirección alcanzable desde WSL2:- usa la dirección alcanzable desde WSL2, no lo que solo funcione en Windows
- conserva
attachOnly: truepara navegadores gestionados externamente cdpUrlpuede serhttp://,https://,ws://owss://- usa HTTP(S) cuando quieras que OpenClaw descubra
/json/version - usa WS(S) solo cuando el proveedor del navegador te dé una URL directa de socket DevTools
- prueba la misma URL con
curlantes de esperar que OpenClaw tenga éxito
Capa 4: verifica por separado la capa de la interfaz de usuario de control
Abrehttp://127.0.0.1:18789/ desde Windows y luego verifica:
- que el origen de la página coincida con lo que espera
gateway.controlUi.allowedOrigins - que la autenticación con token o el emparejamiento estén configurados correctamente
- que no estés depurando un problema de autenticación de la interfaz de usuario de control como si fuera un problema de navegador
Capa 5: verifica el control de navegador de extremo a extremo
Desde WSL2:- la pestaña se abre en Chrome en Windows
browser tabsdevuelve el objetivo- las acciones posteriores (
snapshot,screenshot,navigate) funcionan desde el mismo perfil
Errores engañosos comunes
| Mensaje | Significado |
|---|---|
control-ui-insecure-auth | problema de origen de la interfaz de usuario/contexto seguro, no un problema de transporte CDP |
token_missing | problema de configuración de autenticación |
pairing required | problema de aprobación de dispositivo |
Remote CDP for profile "remote" is not reachable | WSL2 no puede alcanzar el cdpUrl configurado |
respuesta CDP vacía / other side closed a través de un portproxy | incompatibilidad de listener de Windows o un bucle consigo mismo; inspecciona ambas familias de loopback y netsh interface portproxy show all |
Browser attachOnly is enabled and CDP websocket for profile "remote" is not reachable | el endpoint HTTP respondió, pero no se pudo abrir el WebSocket de DevTools |
| viewport obsoleto / modo oscuro / configuración regional / anulaciones offline después de una sesión remota | ejecuta openclaw browser --browser-profile remote stop para cerrar la sesión y liberar la conexión Playwright/CDP almacenada en caché sin reiniciar el Gateway ni el navegador externo |
timeout alrededor de remoteCdpTimeoutMs (predeterminado 1500 ms) | normalmente sigue siendo alcanzabilidad de CDP, o un endpoint remoto lento/no alcanzable |
Playwright page enumeration timed out after 3000ms | el CDP remoto se conectó, pero la lectura de su pestaña persistente se bloqueó; el plazo es el mayor de remoteCdpTimeoutMs y remoteCdpHandshakeTimeoutMs |
No Chrome tabs found for profile="user" | perfil local Chrome MCP seleccionado donde no hay pestañas locales al host disponibles |
Lista rápida de triaje
- Windows: ¿cuál de
127.0.0.1o[::1]responde en/json/version, y ese listener pertenece achrome.exe? - WSL2: ¿funciona
curl http://WINDOWS_HOST_OR_IP:9222/json/version? - Configuración de OpenClaw: ¿
browser.profiles.<name>.cdpUrlusa esa dirección exacta alcanzable desde WSL2? - Interfaz de usuario de control: ¿estás abriendo
http://127.0.0.1:18789/en lugar de una IP de LAN? - ¿Estás intentando usar
existing-sessionentre WSL2 y Windows en lugar de CDP remoto directo?