Tools
Усунення несправностей WSL2 + Windows + віддалений CDP Chrome
У поширеній конфігурації з розділеними хостами OpenClaw Gateway працює всередині WSL2, Chrome працює у Windows, а керування браузером має перетинати межу між WSL2 і Windows. Пошаровий шаблон збоїв з issue #39369 означає, що кілька незалежних проблем можуть виникати одночасно, через що спочатку може здаватися, що зламано не той шар.
Спочатку виберіть правильний режим браузера
У вас є два коректні варіанти:
Варіант 1: сирий віддалений CDP з WSL2 до Windows
Використовуйте профіль віддаленого браузера, який вказує з WSL2 на ендпойнт Windows Chrome CDP.
Вибирайте це, коли:
- Gateway лишається всередині WSL2
- Chrome працює у Windows
- вам потрібно, щоб керування браузером перетинало межу WSL2/Windows
Варіант 2: host-local Chrome MCP
Використовуйте existing-session / user лише тоді, коли сам Gateway працює на тому самому хості, що й Chrome.
Вибирайте це, коли:
- OpenClaw і Chrome працюють на одній машині
- вам потрібен локальний браузерний стан із виконаним входом
- вам не потрібен міжхостовий транспорт браузера
- вам не потрібні розширені маршрути лише для managed/raw-CDP, як-от
responsebody, експорт PDF, перехоплення завантажень або пакетні дії
Для Gateway у WSL2 + Chrome у Windows надавайте перевагу сирому віддаленому CDP. Chrome MCP — це host-local, а не міст між WSL2 і Windows.
Робоча архітектура
Опорна схема:
- WSL2 запускає Gateway на
127.0.0.1:18789 - Windows відкриває Control UI у звичайному браузері на
http://127.0.0.1:18789/ - Windows Chrome відкриває ендпойнт CDP на порту
9222 - WSL2 може досягти цього ендпойнта Windows CDP
- OpenClaw спрямовує профіль браузера на адресу, яка досяжна з WSL2
Чому ця конфігурація заплутує
Може накладатися кілька збоїв:
- WSL2 не може досягти ендпойнта Windows CDP
- Control UI відкрито з небезпечного походження
gateway.controlUi.allowedOriginsне збігається з походженням сторінки- відсутній токен або pairing
- профіль браузера вказує на неправильну адресу
Через це виправлення одного шару все одно може залишати видимою іншу помилку.
Критичне правило для Control UI
Коли UI відкривається з Windows, використовуйте localhost Windows, якщо тільки у вас немає навмисно налаштованого HTTPS.
Використовуйте:
http://127.0.0.1:18789/
Не використовуйте за замовчуванням LAN IP для Control UI. Звичайний HTTP на LAN або tailnet-адресі може спричиняти поведінку insecure-origin/device-auth, яка не пов’язана безпосередньо з CDP. Див. Control UI.
Перевіряйте пошарово
Рухайтеся зверху вниз. Не перескакуйте наперед.
Шар 1: переконайтеся, що Chrome віддає CDP у Windows
Запустіть Chrome у Windows з увімкненим віддаленим налагодженням:
chrome.exe --remote-debugging-port=9222
Із Windows спочатку перевірте сам Chrome:
curl http://127.0.0.1:9222/json/version
curl http://127.0.0.1:9222/json/list
Якщо це не працює у Windows, проблема ще не в OpenClaw.
Шар 2: переконайтеся, що WSL2 може досягти цього ендпойнта Windows
Із WSL2 перевірте точну адресу, яку ви плануєте використовувати в cdpUrl:
curl http://WINDOWS_HOST_OR_IP:9222/json/version
curl http://WINDOWS_HOST_OR_IP:9222/json/list
Хороший результат:
/json/versionповертає JSON із метаданими Browser / Protocol-Version/json/listповертає JSON (порожній масив — це нормально, якщо сторінок не відкрито)
Якщо це не працює:
- Windows іще не відкриває порт для WSL2
- адреса неправильна для боку WSL2
- іще бракує firewall / port forwarding / локального proxying
Виправте це, перш ніж чіпати конфігурацію OpenClaw.
Шар 3: налаштуйте правильний профіль браузера
Для сирого віддаленого CDP спрямуйте OpenClaw на адресу, яка досяжна з WSL2:
{
browser: {
enabled: true,
defaultProfile: "remote",
profiles: {
remote: {
cdpUrl: "http://WINDOWS_HOST_OR_IP:9222",
attachOnly: true,
color: "#00AA00",
},
},
},
}
Примітки:
- використовуйте адресу, досяжну з WSL2, а не ту, що працює лише у Windows
- залишайте
attachOnly: trueдля браузерів, якими керують зовнішні засоби cdpUrlможе бутиhttp://,https://,ws://абоwss://- використовуйте HTTP(S), коли хочете, щоб OpenClaw виявляв
/json/version - використовуйте WS(S) лише тоді, коли провайдер браузера надає вам прямий URL сокета DevTools
- перевіряйте той самий URL через
curl, перш ніж очікувати успіху від OpenClaw
Шар 4: окремо перевірте шар Control UI
Відкрийте UI з Windows:
http://127.0.0.1:18789/
Потім перевірте:
- походження сторінки збігається з тим, що очікує
gateway.controlUi.allowedOrigins - автентифікацію токеном або pairing налаштовано правильно
- ви не налагоджуєте проблему автентифікації Control UI так, ніби це проблема браузера
Корисна сторінка:
Шар 5: перевірте наскрізне керування браузером
Із WSL2:
openclaw browser open https://example.com --browser-profile remote
openclaw browser tabs --browser-profile remote
Хороший результат:
- вкладка відкривається у Windows Chrome
openclaw browser tabsповертає ціль- подальші дії (
snapshot,screenshot,navigate) працюють із того самого профілю
Поширені помилки, що вводять в оману
Сприймайте кожне повідомлення як підказку до конкретного шару:
control-ui-insecure-auth- проблема походження UI / secure-context, а не транспорту CDP
token_missing- проблема конфігурації автентифікації
pairing required- проблема погодження пристрою
Remote CDP for profile "remote" is not reachable- WSL2 не може досягти налаштованого
cdpUrl
- WSL2 не може досягти налаштованого
Browser attachOnly is enabled and CDP websocket for profile "remote" is not reachable- HTTP-ендпойнт відповів, але WebSocket DevTools усе одно не вдалося відкрити
- застарілі перевизначення viewport / dark-mode / locale / offline після віддаленої сесії
- виконайте
openclaw browser stop --browser-profile remote - це закриває активну сесію керування й звільняє стан емуляції Playwright/CDP без перезапуску gateway або зовнішнього браузера
- виконайте
gateway timeout after 1500ms- часто це все ще проблема досяжності CDP або повільного/недосяжного віддаленого ендпойнта
No Chrome tabs found for profile="user"- вибрано локальний профіль Chrome MCP там, де немає доступних локальних вкладок хоста
Швидкий контрольний список для тріажу
- Windows: чи працює
curl http://127.0.0.1:9222/json/version? - WSL2: чи працює
curl http://WINDOWS_HOST_OR_IP:9222/json/version? - Конфігурація OpenClaw: чи використовує
browser.profiles.<name>.cdpUrlсаме цю адресу, досяжну з WSL2? - Control UI: чи відкриваєте ви
http://127.0.0.1:18789/, а не LAN IP? - Чи не намагаєтеся ви використовувати
existing-sessionчерез WSL2 і Windows замість сирого віддаленого CDP?
Практичний висновок
Зазвичай така конфігурація є життєздатною. Найскладніше те, що транспорт браузера, безпека походження Control UI та токен/pairing можуть незалежно ламатися, водночас виглядаючи подібно з боку користувача.
Якщо сумніваєтесь:
- спочатку локально перевірте ендпойнт Windows Chrome
- потім перевірте той самий ендпойнт із WSL2
- і лише після цього налагоджуйте конфігурацію OpenClaw або автентифікацію Control UI