Tools
عیبیابی WSL2 + Windows + CDP راهدور Chrome
در چیدمان رایج میزبانِ جداگانه، OpenClaw Gateway داخل WSL2 اجرا میشود، Chrome روی Windows اجرا میشود، و کنترل مرورگر باید از مرز WSL2 و Windows عبور کند. الگوی خرابی لایهای از issue #39369 یعنی چند مشکل مستقل میتوانند همزمان ظاهر شوند، که باعث میشود ابتدا لایهی اشتباه خراب به نظر برسد.
ابتدا حالت مرورگر درست را انتخاب کنید
دو الگوی معتبر دارید:
گزینه ۱: CDP خام از راه دور از WSL2 به Windows
از یک پروفایل مرورگر از راه دور استفاده کنید که از WSL2 به یک endpoint مربوط به Chrome CDP در Windows اشاره میکند.
این گزینه را زمانی انتخاب کنید که:
- Gateway داخل WSL2 باقی میماند
- Chrome روی Windows اجرا میشود
- باید کنترل مرورگر از مرز WSL2/Windows عبور کند
گزینه ۲: Chrome MCP محلیِ میزبان
فقط زمانی از existing-session / user استفاده کنید که خود Gateway روی همان میزبانی اجرا میشود که Chrome روی آن است.
این گزینه را زمانی انتخاب کنید که:
- OpenClaw و Chrome روی یک ماشین هستند
- وضعیت مرورگر محلیِ واردشده را میخواهید
- به انتقال مرورگر بین میزبانها نیاز ندارید
- به مسیرهای پیشرفتهی مدیریتشده/فقط-CDP-خام مثل
responsebody، خروجی PDF، رهگیری دانلود، یا عملیات دستهای نیاز ندارید
برای WSL2 Gateway + Windows Chrome، CDP خام از راه دور را ترجیح دهید. Chrome MCP محلیِ میزبان است، نه پلی از WSL2 به Windows.
معماری کاری
شکل مرجع:
- WSL2 Gateway را روی
127.0.0.1:18789اجرا میکند - Windows رابط Control UI را در یک مرورگر عادی در
http://127.0.0.1:18789/باز میکند - Windows Chrome یک endpoint مربوط به CDP را روی پورت
9222ارائه میکند - WSL2 میتواند به آن endpoint مربوط به CDP در Windows دسترسی پیدا کند
- OpenClaw یک پروفایل مرورگر را به آدرسی اشاره میدهد که از WSL2 قابل دسترسی است
چرا این چیدمان گیجکننده است
چند خرابی میتوانند همپوشانی داشته باشند:
- WSL2 نمیتواند به endpoint مربوط به CDP در Windows دسترسی پیدا کند
- Control UI از یک origin غیرامن باز شده است
gateway.controlUi.allowedOriginsبا origin صفحه مطابقت ندارد- token یا جفتسازی وجود ندارد
- پروفایل مرورگر به آدرس اشتباه اشاره میکند
به همین دلیل، اصلاح یک لایه همچنان میتواند خطای متفاوتی را قابل مشاهده باقی بگذارد.
قانون حیاتی برای Control UI
وقتی UI از Windows باز میشود، از localhost ویندوز استفاده کنید مگر اینکه چیدمان HTTPS عمدی داشته باشید.
استفاده کنید از:
http://127.0.0.1:18789/
برای Control UI بهصورت پیشفرض از IP شبکه LAN استفاده نکنید. HTTP ساده روی یک آدرس LAN یا tailnet میتواند رفتار insecure-origin/device-auth را فعال کند که به خود CDP ربطی ندارد. Control UI را ببینید.
لایهبهلایه اعتبارسنجی کنید
از بالا به پایین کار کنید. جلوتر نپرید.
لایه ۱: بررسی کنید Chrome روی Windows در حال ارائهی CDP است
Chrome را روی Windows با remote debugging فعال اجرا کنید:
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 هنوز مشکل نیست.
لایه ۲: بررسی کنید WSL2 میتواند به آن endpoint در 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 / local proxying هنوز وجود ندارد
قبل از دست زدن به پیکربندی OpenClaw، این را اصلاح کنید.
لایه ۳: پروفایل مرورگر درست را پیکربندی کنید
برای 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://باشد- وقتی میخواهید OpenClaw بتواند
/json/versionرا کشف کند، از HTTP(S) استفاده کنید - فقط زمانی از WS(S) استفاده کنید که ارائهدهندهی مرورگر یک URL مستقیم DevTools socket به شما میدهد
- قبل از اینکه انتظار موفقیت از OpenClaw داشته باشید، همان URL را با
curlآزمایش کنید
لایه ۴: لایهی Control UI را جداگانه بررسی کنید
UI را از Windows باز کنید:
http://127.0.0.1:18789/
سپس بررسی کنید:
- origin صفحه با چیزی که
gateway.controlUi.allowedOriginsانتظار دارد مطابقت دارد - token auth یا جفتسازی درست پیکربندی شده است
- مشکل احراز هویت Control UI را طوری اشکالزدایی نمیکنید که انگار مشکل مرورگر است
صفحهی مفید:
لایه ۵: کنترل مرورگر را از ابتدا تا انتها بررسی کنید
از 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- مشکل origin رابط 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- endpoint مربوط به HTTP پاسخ داده است، اما DevTools WebSocket همچنان نتوانسته باز شود
- بازنویسیهای قدیمی viewport / dark-mode / locale / offline پس از یک نشست از راه دور
openclaw browser stop --browser-profile remoteرا اجرا کنید- این نشست کنترل فعال را میبندد و وضعیت شبیهسازی Playwright/CDP را بدون راهاندازی دوبارهی gateway یا مرورگر خارجی آزاد میکند
gateway timeout after 1500ms- اغلب همچنان مربوط به قابل دسترسی بودن CDP یا یک endpoint از راه دور کند/غیرقابل دسترسی است
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: آیا بهجای IP شبکه LAN،
http://127.0.0.1:18789/را باز میکنید؟ - آیا تلاش میکنید بهجای CDP خام از راه دور، از
existing-sessionدر میان WSL2 و Windows استفاده کنید؟
نتیجهی عملی
این چیدمان معمولاً عملی است. بخش سخت این است که انتقال مرورگر، امنیت origin در Control UI، و token/جفتسازی هرکدام میتوانند مستقل از هم شکست بخورند، در حالی که از سمت کاربر شبیه به هم به نظر میرسند.
وقتی شک دارید:
- ابتدا endpoint مربوط به Windows Chrome را بهصورت محلی بررسی کنید
- سپس همان endpoint را از WSL2 بررسی کنید
- فقط بعد از آن پیکربندی OpenClaw یا احراز هویت Control UI را اشکالزدایی کنید