Failed to start Chrome CDP on port 18800
لماذا يعطّل Chromium بصيغة snap التحكم في متصفح OpenClaw على Linux
تطلب من الوكيل فتح صفحة، فيعود استدعاء الأداة بسطر JSON واحد: Failed to start Chrome CDP on port 18800 for profile openclaw. لا شيء في هذه الرسالة يخبرك بالجزء الذي فشل، وعلى جهاز Linux بلا واجهة رسومية لا يظهر المتصفح أصلًا. والسبب المعتاد ليس OpenClaw، بل المتصفح الذي ثبّته apt لك.
أربع رسائل خطأ، وأربعة أسباب مختلفة
- الخطأ Failed to start Chrome CDP on port 18800 for profile openclaw يعني أن ملف التعريف المدار يفشل في الإقلاع على منفذ التصحيح الخاص به. على Ubuntu يكون السبب المعتاد أن Chromium الموجود على الجهاز غلاف snap وليس ملفًا تنفيذيًا حقيقيًا للمتصفح.
- الرسالة The profile appears to be in use by another Chromium process تشير إلى ملفات قفل Singleton قديمة متبقية في مجلد ملف التعريف المدار. يزيل OpenClaw هذه الأقفال ويعيد المحاولة مرة واحدة عندما يشير القفل إلى عملية منتهية على المضيف الحالي، لكن الأقفال التي تحمل اسم مضيف آخر تبقى محفوظة حتى تؤكد أن ملف التعريف لم يعد قيد الاستخدام، بما في ذلك بعد إعادة تسمية الجهاز.
- الرسالة Missing X server or $DISPLAY تعني أن متصفحًا مرئيًا طُلب صراحةً على مضيف لا توجد فيه جلسة سطح مكتب. فملفات التعريف المدارة المحلية تتحول تلقائيًا إلى العمل بلا واجهة على Linux عندما يكون DISPLAY وWAYLAND_DISPLAY كلاهما غير معرّفين، لذا فإن ظهور هذا الخطأ يعني أن شيئًا ما فرض متصفحًا بواجهة: OPENCLAW_BROWSER_HEADLESS=0، أو ضبط browser.headless على false، أو المفتاح نفسه على ملف تعريف واحد.
- يظهر الخطأ Port N is in use for profile NAME but not by openclaw عندما تكون خدمة CDP خارجية على واجهة loopback معدّة مسبقًا بينما لا يزال attachOnly على false. والحل هو التوقف عن مطالبة OpenClaw بتشغيل متصفحه الخاص، وهو مسار attach-only الموضّح أدناه.
يتداخل تقييد AppArmor في snap مع الطريقة التي يطلق بها OpenClaw عملية المتصفح ويراقبها.
لماذا يكون apt install chromium هو السبب الجذري
على Ubuntu ومعظم توزيعات Linux، لا يمنحك apt install chromium متصفحًا. فالحزمة تُحال إلى chromium-browser، ويطبع apt ملاحظة بأنه اختار chromium-browser بدلًا من chromium، وما يصل إلى القرص هو غلاف snap. وهذا مهم، لأن OpenClaw حين يشغّل متصفحًا محليًا يأخذ أول متصفح يجده بالترتيب: Chrome ثم Brave ثم Edge ثم Chromium ثم Chrome Canary، ويغطي مسار البحث لديه على Linux المواقع /usr/bin و /snap/bin و /opt/google و /opt/brave.com و /usr/lib/chromium و /usr/lib/chromium-browser، إضافة إلى Chromium الذي يديره Playwright ضمن PLAYWRIGHT_BROWSERS_PATH أو ~/.cache/ms-playwright. على خادم جديد تكون فيه حزمة snap الملف التنفيذي الوحيد من فئة Chromium، يعثر عليها الاكتشاف التلقائي ويفشل عليها كل تشغيل مدار. لا توجد تركيبة من الخيارات تصلح ذلك، ولهذا فإن الحل الموثّق ملف تنفيذي مختلف وليس إعدادًا مختلفًا.
ثلاث خطوات تحل المشكلة
- ثبّت Google Chrome الحقيقي، وهو الحل الموصى به. نزّل google-chrome-stable_current_amd64.deb من dl.google.com، وثبّته باستخدام dpkg -i، ثم شغّل sudo apt --fix-broken install -y إذا اشتكت الاعتماديات. بعد ذلك اضبط browser.executablePath على /usr/bin/google-chrome-stable في ~/.openclaw/openclaw.json، مع ضبط enabled وheadless وnoSandbox جميعها على true.
- إذا كان لا بد من إبقاء Chromium بصيغة snap، فاستخدم وضع attach-only. اضبط browser.attachOnly على true حتى لا يشغّل OpenClaw أي شيء، وشغّل المتصفح بنفسك باستخدام الأمر chromium-browser --headless --no-sandbox --disable-gpu --remote-debugging-port=18800 --user-data-dir=$HOME/.openclaw/browser/openclaw/user-data about:blank.
- اجعل هذا المتصفح اليدوي يستمر في العمل بعد إغلاق الطرفية عبر خدمة systemd على مستوى المستخدم. فوحدة في ~/.config/systemd/user/openclaw-browser.service تشغّل /snap/bin/chromium بالخيارات نفسها، مع Restart=on-failure وRestartSec=5، ومفعّلة عبر systemctl --user enable --now openclaw-browser.service، تُبقي منفذ CDP في وضع الاستماع قبل أن يطلبه OpenClaw.
واجهة الإعداد ستة إعدادات، والقيم الافتراضية تناسب حاسوبًا محمولًا لا خادمًا. يفعّل browser.enabled التحكم في المتصفح وقيمته true أصلًا. أما browser.executablePath فهو مسار ملف تنفيذي مبني على Chromium، سواء Chrome أو Brave أو Edge أو Chromium، ويُكتشف تلقائيًا إذا أغفلته، مع تفضيل متصفح النظام الافتراضي حين يكون مبنيًا على Chromium. ويشغّل browser.headless المتصفح بلا واجهة رسومية وقيمته الافتراضية false، لذا يجب ضبطه صراحةً على الخادم، مع توفر OPENCLAW_BROWSER_HEADLESS كتجاوز على مستوى العملية، وهو غير معرّف افتراضيًا. ويضيف browser.noSandbox الخيار --no-sandbox الذي تحتاجه بعض بيئات Linux، وقيمته الافتراضية false، أما browser.attachOnly فيمنع OpenClaw من تشغيل أي متصفح على الإطلاق، وقيمته الافتراضية false. ووضع attach-only هو أيضًا الحل الموثّق على Raspberry Pi، أو مضيف VPS قديم، أو تخزين بطيء، حيث يحتاج Chrome إلى وقت لإتاحة نقطة نهاية CDP HTTP أطول مما تسمح به المهلة المحددة للمتصفح المدار. يغطي دليل OpenClaw على Linux تثبيت Linux عمومًا، ودليل OpenClaw على خادم VPS هو قائمة التحقق لخادم لا يجلس أمامه أحد.
فشل بدء CDP أم حظر التنقل
بعد إعداد المتصفح، تحقق منه قبل البحث في أي مكان آخر. تذهب هذه الفحوص إلى خدمة التحكم في المتصفح لدى OpenClaw، لا إلى منفذ Chrome CDP المستخدم عند التشغيل، ويُشتق منفذها من gateway.port: القيمة الافتراضية 18791، أي منفذ gateway زائد اثنين، فعدّله إذا نقلت Gateway إلى منفذ آخر. اطلب المسار الجذر باستخدام curl فتحصل على running وpid وchosenBrowser؛ ثم أرسل POST إلى /start؛ ثم GET إلى /tabs. الآن نفّذ السلّم الذي يفصل بين فئتي الأعطال: openclaw browser --browser-profile openclaw start، ثم tabs، ثم open https://example.com. إذا فشل start مع not reachable after start، فمستوى التحكم غير سليم، وجاهزية CDP هي ما يجب تتبّعه. وإذا نجح start وفشل tabs، فما زالت المشكلة مشكلة وصول، لا مشكلة صفحة. وإذا نجح start وtabs كلاهما وفشل open أو navigate وحده، فالمتصفح سليم وأنت أمام سياسة التنقل أو الصفحة نفسها، وهذا مسار شيفرة منفصل: تطبّق إعدادات المتصفح افتراضيًا كائن سياسة SSRF مغلقًا عند الفشل (fail-closed) حتى لو لم تكتب browser.ssrfPolicy قط، ونجاح start أو tabs لا يمنح أي إذن للعنوان التالي. وعندما تحتاج إلى استثناء، فإن إدخالًا ضيقًا باسم مضيف مطابق تمامًا في allowedHostnames أفضل من فتح الشبكة الخاصة، ولا مكان للخيار dangerouslyAllowPrivateNetwork إلا في بيئة راجعتها عن قصد. أداة المتصفح في OpenClaw هي الأداة التي يستدعيها الوكيل فعلًا، وواجهة API للتحكم في المتصفح هي المرجع الكامل لواجهة التحكم البرمجية وسطر الأوامر.
على Diali
يستضيف Diali منصة OpenClaw، لذا لن تمر بهذه الأمسية. كل عميل يشغّل مساعده الخاص بدلًا من حصة من مساعد مشترك، ويُولَّد إعداد التشغيل مما تضبطه في لوحة التحكم، ثم يُكتب من جديد مع كل إصدار، فلا يوجد openclaw.json على خادم لتصلحه بعد الترقية، ولا قرار بين snap وdeb لتتخذه. كل ما يحتفظ به المساعد يعيش على وحدة تخزين دائمة، مع لقطات يومية واستعادة بنقرة واحدة عبر إضافة «النسخ الاحتياطية» (مشمولة في Max). تشرح صفحة OpenClaw المستضاف على Diali الإعداد المستضاف، وتعرض صفحة أسعار Diali تكلفته.
- يمنحك apt install chromium غلاف snap، لا متصفحًا.
- Chrome الحقيقي أولًا، ثم attach-only مع وحدة systemd ثانيًا.
- نجاح start وtabs مع فشل open: المشكلة في السياسة، لا في CDP.
كفاك قراءة، ابنِ وكيلك الخاص
جهز وكيلًا، واختر قناة، واجعله يعمل داخل التطبيق المفتوح لديك دائمًا.
