Solución de problemas de WSL2 + Windows + Chrome remoto con CDP
Esta guía cubre la configuración dividida entre hosts más común, donde:- OpenClaw Gateway se ejecuta dentro de WSL2
- Chrome se ejecuta en Windows
- el control del navegador debe cruzar el límite entre WSL2 y Windows
Primero elige el modo de navegador correcto
Tienes dos patrones válidos:Opción 1: CDP remoto sin procesar desde WSL2 a Windows
Usa un perfil de navegador remoto que apunte desde WSL2 a un endpoint CDP de Chrome en Windows. Elige esta opción cuando:- el Gateway permanece dentro de WSL2
- Chrome se ejecuta en Windows
- necesitas que el control del navegador cruce el límite entre WSL2 y Windows
Opción 2: Chrome MCP local al host
Usaexisting-session / user solo cuando el propio Gateway se ejecute en el mismo host que Chrome.
Elige esta opción cuando:
- OpenClaw y Chrome están en la misma máquina
- quieres el estado local del navegador con sesión iniciada
- no necesitas transporte del navegador entre hosts
- no necesitas rutas avanzadas gestionadas o exclusivas de raw CDP, como
responsebody, exportación de PDF, interceptación de descargas o acciones por lotes
Arquitectura funcional
Forma de referencia:- WSL2 ejecuta el Gateway en
127.0.0.1:18789 - Windows abre la UI 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 accesible desde WSL2
Por qué esta configuración es confusa
Pueden superponerse varios fallos:- WSL2 no puede alcanzar el endpoint CDP de Windows
- la UI de control se abre desde un origen no seguro
gateway.controlUi.allowedOriginsno coincide con el origen de la página- falta el token o el emparejamiento
- el perfil del navegador apunta a la dirección equivocada
Regla crítica para la UI de control
Cuando la UI se abra desde Windows, usa localhost de Windows, a menos que tengas una configuración HTTPS deliberada. Usa:http://127.0.0.1:18789/
No uses por defecto una IP de LAN para la UI de control. HTTP sin cifrar sobre una dirección LAN o de tailnet puede activar comportamientos de origen no seguro o autenticación de dispositivo que no están relacionados con CDP en sí. Consulta Control UI.
Valida por capas
Trabaja de arriba abajo. No te saltes pasos.Capa 1: Verifica que Chrome esté sirviendo CDP en Windows
Inicia Chrome en Windows con depuración remota habilitada: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 de Browser / Protocol-Version/json/listdevuelve JSON (un arreglo vacío está bien si no hay páginas abiertas)
- Windows aún no está exponiendo el puerto a WSL2
- la dirección es incorrecta para el lado de WSL2
- todavía falta firewall / reenvío de puertos / proxy local
Capa 3: Configura el perfil de navegador correcto
Para CDP remoto sin procesar, apunta OpenClaw a la dirección accesible desde WSL2:- usa la dirección accesible desde WSL2, no la que solo funciona en Windows
- mantén
attachOnly: truepara navegadores gestionados externamente cdpUrlpuede serhttp://,https://,ws://owss://- usa HTTP(S) cuando quieras que OpenClaw detecte
/json/version - usa WS(S) solo cuando el proveedor del navegador te dé una URL directa del socket DevTools
- prueba la misma URL con
curlantes de esperar que OpenClaw funcione
Capa 4: Verifica por separado la capa de la UI de control
Abre la UI desde Windows:http://127.0.0.1:18789/
Luego verifica:
- que el origen de la página coincida con lo que espera
gateway.controlUi.allowedOrigins - que la autenticación por token o el emparejamiento estén configurados correctamente
- que no estés depurando un problema de autenticación de la UI de control como si fuera un problema del navegador
Capa 5: Verifica el control del navegador de extremo a extremo
Desde WSL2:- la pestaña se abre en Chrome de Windows
openclaw browser tabsdevuelve el destino- acciones posteriores (
snapshot,screenshot,navigate) funcionan desde el mismo perfil
Errores engañosos comunes
Trata cada mensaje como una pista específica de una capa:control-ui-insecure-auth- problema de origen de la UI / contexto seguro, no un problema de transporte de CDP
token_missing- problema de configuración de autenticación
pairing required- problema de aprobación del dispositivo
Remote CDP for profile "remote" is not reachable- WSL2 no puede alcanzar el
cdpUrlconfigurado
- WSL2 no puede alcanzar el
Browser attachOnly is enabled and CDP websocket for profile "remote" is not reachable- el endpoint HTTP respondió, pero aún no se pudo abrir el WebSocket de DevTools
- anulaciones obsoletas de viewport / modo oscuro / configuración regional / modo sin conexión después de una sesión remota
- ejecuta
openclaw browser stop --browser-profile remote - esto cierra la sesión de control activa y libera el estado de emulación de Playwright/CDP sin reiniciar el gateway ni el navegador externo
- ejecuta
gateway timeout after 1500ms- a menudo sigue siendo un problema de alcance de CDP o de un endpoint remoto lento o inaccesible
No Chrome tabs found for profile="user"- se seleccionó un perfil local de Chrome MCP donde no hay pestañas locales del host disponibles
Lista rápida de comprobación para triage
- Windows: ¿funciona
curl http://127.0.0.1:9222/json/version? - WSL2: ¿funciona
curl http://WINDOWS_HOST_OR_IP:9222/json/version? - Configuración de OpenClaw: ¿
browser.profiles.<name>.cdpUrlusa exactamente esa dirección accesible desde WSL2? - UI 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 vez de CDP remoto sin procesar?
Conclusión práctica
Esta configuración normalmente es viable. La parte difícil es que el transporte del navegador, la seguridad del origen de la UI de control y el token/emparejamiento pueden fallar de forma independiente mientras desde el lado del usuario parecen similares. En caso de duda:- primero verifica localmente el endpoint de Chrome en Windows
- después verifica ese mismo endpoint desde WSL2
- solo entonces depura la configuración de OpenClaw o la autenticación de la UI de control