macOS companion app
التحكم عن بُعد
يتيح هذا التدفق لتطبيق macOS أن يعمل كوحدة تحكم عن بُعد كاملة لـ Gateway OpenClaw يعمل على مضيف آخر (سطح مكتب/خادم). يمكن للتطبيق الاتصال مباشرة بعناوين URL موثوقة لـ Gateway على LAN/Tailnet أو إدارة نفق SSH عندما يكون Gateway البعيد مقتصرًا على loopback فقط. تعيد فحوصات الصحة، وتمرير إيقاظ الصوت، ودردشة الويب استخدام إعدادات البعيد نفسها من الإعدادات → عام.
الأوضاع
- محلي (هذا الـ Mac): يعمل كل شيء على الحاسوب المحمول. لا يوجد SSH.
- بعيد عبر SSH (الافتراضي): تُنفَّذ أوامر OpenClaw على المضيف البعيد. يفتح تطبيق Mac اتصال SSH باستخدام
-o BatchModeبالإضافة إلى الهوية/المفتاح الذي تختاره وتمرير منفذ محلي. - بعيد مباشر (ws/wss): لا يوجد نفق SSH. يتصل تطبيق Mac بعنوان URL الخاص بـ Gateway مباشرة (على سبيل المثال، عبر LAN أو Tailscale أو Tailscale Serve أو وكيل عكسي عام عبر HTTPS).
وسائل النقل البعيدة
يدعم الوضع البعيد وسيلتي نقل:
- نفق SSH (الافتراضي): يستخدم
ssh -N -L ...لتمرير منفذ Gateway إلى localhost. سيرى Gateway عنوان IP الخاص بالعقدة كـ127.0.0.1لأن النفق يعمل عبر loopback. - مباشر (ws/wss): يتصل مباشرة بعنوان URL الخاص بـ Gateway. يرى Gateway عنوان IP الحقيقي للعميل.
يعطّل التطبيق تعدد اتصالات SSH وتشغيل ما بعد المصادقة في الخلفية لعمليات SSH التي يملكها التطبيق، حتى يتمكن من مراقبة العملية الدقيقة وإعادة تشغيلها حتى عندما يفعّل الاسم المستعار المحدد ControlMaster أو ForkAfterAuthentication.
التحقق من مفتاح مضيف SSH صارم افتراضيًا لأن بيانات اعتماد Gateway تمر عبر هذا النفق. بالنسبة إلى اسم مستعار مُدار لـ SSH تنوي صراحة استخدام سلوك الثقة الخاص به، فعّله باستخدام openclaw-mac configure-remote --ssh-target <alias> --ssh-host-key-policy openssh أو اضبط gateway.remote.sshHostKeyPolicy على "openssh". يستخدم هذا التفعيل سياسة مفتاح مضيف OpenSSH الفعلية؛ راجع الاسم المستعار وأي إعدادات مطابقة لـ Host * أو إعدادات النظام أولًا. يؤدي تغيير هدف SSH في التطبيق أو باستخدام configure-remote إلى إعادة تعيين السياسة إلى strict ما لم تفعّلها صراحة مرة أخرى.
في وضع نفق SSH، تُحفظ أسماء مضيفي LAN/tailnet المكتشفة باسم
gateway.remote.sshTarget. يبقي التطبيق gateway.remote.url على نقطة نهاية
النفق المحلية، على سبيل المثال ws://127.0.0.1:18789، بحيث تستخدم CLI ودردشة الويب
وخدمة مضيف العقدة المحلية جميعها وسيلة نقل loopback الآمنة نفسها.
عندما يعيد الاكتشاف عناوين IP خامًا لـ Tailnet وأسماء مضيفين مستقرة، يفضّل التطبيق
Tailscale MagicDNS أو أسماء LAN حتى تتحمل الاتصالات البعيدة تغييرات العنوان
بشكل أفضل.
إذا كان منفذ النفق المحلي يختلف عن منفذ Gateway البعيد، فاضبط
gateway.remote.remotePort على المنفذ على المضيف البعيد.
أتمتة المتصفح في الوضع البعيد يملكها مضيف عقدة CLI، وليس عقدة تطبيق macOS
الأصلية. يبدأ التطبيق خدمة مضيف العقدة المثبتة عندما يكون ذلك ممكنًا؛ إذا كنت تحتاج إلى التحكم في المتصفح من ذلك الـ Mac، فثبّتها/ابدأها باستخدام
openclaw node install ... و openclaw node start (أو شغّل
openclaw node run ... في المقدمة)، ثم استهدف تلك العقدة القادرة على تشغيل المتصفح.
المتطلبات المسبقة على المضيف البعيد
- ثبّت Node + pnpm وابنِ/ثبّت OpenClaw CLI (
pnpm install && pnpm build && pnpm link --global). - تأكد من أن
openclawموجود في PATH للأصداف غير التفاعلية (أنشئ رابطًا رمزيًا إلى/usr/local/binأو/opt/homebrew/binإذا لزم الأمر). - لنقل SSH فقط: افتح SSH بمصادقة المفتاح. نوصي بعناوين IP الخاصة بـ Tailscale للوصول المستقر خارج LAN.
إعداد تطبيق macOS
لإعداد التطبيق مسبقًا من دون تدفق الترحيب:
openclaw-mac configure-remote \ --ssh-target user@gateway.local \ --local-port 18789 \ --remote-port 18789 \ --token "$OPENCLAW_GATEWAY_TOKEN"بالنسبة إلى Gateway يمكن الوصول إليه بالفعل على LAN موثوقة أو Tailnet، تجاوز SSH بالكامل:
openclaw-mac configure-remote \ --direct-url ws://192.168.0.202:18789 \ --token "$OPENCLAW_GATEWAY_TOKEN"يكتب هذا إعدادات البعيد، ويعلّم الإعداد الأولي كمكتمل، ويتيح للتطبيق امتلاك وسيلة النقل المحددة عند بدء التشغيل.
- افتح الإعدادات → عام.
- ضمن تشغيل OpenClaw، اختر بعيد واضبط:
- النقل: نفق SSH أو مباشر (ws/wss).
- هدف SSH:
user@host(اختياريًا:port).- إذا كان Gateway على LAN نفسها ويعلن عبر Bonjour، فاختره من القائمة المكتشفة لملء هذا الحقل تلقائيًا.
- عنوان URL لـ Gateway (مباشر فقط):
wss://gateway.example.ts.net(أوws://...للمحلي/LAN). - ملف الهوية (متقدم): المسار إلى مفتاحك.
- جذر المشروع (متقدم): مسار نسخة العمل البعيدة المستخدم للأوامر.
- مسار CLI (متقدم): مسار اختياري إلى نقطة إدخال/ملف ثنائي قابل للتشغيل لـ
openclaw(يُملأ تلقائيًا عند الإعلان عنه).
- اضغط اختبار البعيد. يشير النجاح إلى أن
openclaw status --jsonالبعيد يعمل بشكل صحيح. تعني حالات الفشل عادةً مشكلات في PATH/CLI؛ يعني رمز الخروج 127 أن CLI غير موجود عن بُعد. - ستعمل فحوصات الصحة ودردشة الويب الآن تلقائيًا عبر وسيلة النقل المحددة.
دردشة الويب
- نفق SSH: تتصل دردشة الويب بـ Gateway عبر منفذ تحكم WebSocket الممرّر (الافتراضي 18789).
- مباشر (ws/wss): تتصل دردشة الويب مباشرة بعنوان URL المُعد لـ Gateway.
- لم يعد هناك خادم HTTP منفصل لـ WebChat.
الأذونات
- يحتاج المضيف البعيد إلى موافقات TCC نفسها المطلوبة محليًا (الأتمتة، تسهيلات الاستخدام، تسجيل الشاشة، الميكروفون، التعرف على الكلام، الإشعارات). شغّل الإعداد الأولي على ذلك الجهاز لمنحها مرة واحدة.
- تعلن العقد عن حالة أذوناتها عبر
node.list/node.describeحتى تعرف الوكلاء ما هو متاح.
ملاحظات أمنية
- فضّل الربط عبر loopback على المضيف البعيد والاتصال عبر SSH أو Tailscale Serve أو عنوان URL مباشر موثوق لـ Tailnet/LAN.
- يتطلب نفق SSH مفتاح مضيف موثوقًا بالفعل افتراضيًا. وثّق مفتاح المضيف أولًا حتى يكون موجودًا في ملف known-hosts المُعد، أو اختر صراحة
gateway.remote.sshHostKeyPolicy: "openssh"لاسم مستعار مُدار تقبل سياسة الثقة الخاصة به في OpenSSH. - إذا ربطت Gateway بواجهة غير loopback، فاشترط مصادقة Gateway صالحة: رمز، كلمة مرور، أو وكيل عكسي واعٍ بالهوية مع
gateway.auth.mode: "trusted-proxy". - راجع الأمان وTailscale.
تدفق تسجيل الدخول إلى WhatsApp (بعيد)
- شغّل
openclaw channels login --verboseعلى المضيف البعيد. امسح رمز QR باستخدام WhatsApp على هاتفك. - أعد تشغيل تسجيل الدخول على ذلك المضيف إذا انتهت صلاحية المصادقة. سيُظهر فحص الصحة مشكلات الربط.
استكشاف الأخطاء وإصلاحها
- exit 127 / غير موجود:
openclawغير موجود في PATH للأصداف غير الخاصة بتسجيل الدخول. أضفه إلى/etc/pathsأو ملف rc الخاص بالصدفة، أو أنشئ رابطًا رمزيًا إلى/usr/local/bin//opt/homebrew/bin. - فشل مسبار الصحة: تحقق من إمكانية الوصول عبر SSH وPATH، وأن Baileys مسجّل الدخول (
openclaw status --json). - دردشة الويب عالقة: تأكد من أن Gateway يعمل على المضيف البعيد وأن المنفذ الممرّر يطابق منفذ WS الخاص بـ Gateway؛ تتطلب الواجهة اتصال WS سليمًا.
- عنوان IP للعقدة يظهر 127.0.0.1: هذا متوقع مع نفق SSH. بدّل النقل إلى مباشر (ws/wss) إذا كنت تريد أن يرى Gateway عنوان IP الحقيقي للعميل.
- لوحة التحكم تعمل لكن قدرات Mac غير متصلة: يعني ذلك أن اتصال المشغّل/التحكم الخاص بالتطبيق سليم، لكن اتصال العقدة المرافقة غير متصل أو يفتقد سطح أوامره. افتح قسم جهاز شريط القوائم وتحقق مما إذا كان الـ Mac بحالة
paired · disconnected. بالنسبة إلى نقاط نهاية Tailscale Serve ذات النمطwss://*.ts.net، يكتشف التطبيق دبابيس أوراق TLS القديمة بعد تدوير الشهادة، ويمسح الدبوس القديم عندما يثق macOS بالشهادة الجديدة، ثم يعيد المحاولة تلقائيًا. إذا لم تكن الشهادة موثوقة من النظام أو لم يكن المضيف اسم Tailscale Serve، فاضبطgateway.remote.tlsFingerprintعلى بصمة الشهادة المتوقعة، وراجع الشهادة، أو بدّل إلى بعيد عبر SSH. - إيقاظ الصوت: تُمرَّر عبارات التشغيل تلقائيًا في الوضع البعيد؛ لا حاجة إلى مُمرِّر منفصل.
أصوات الإشعارات
اختر الأصوات لكل إشعار من السكربتات باستخدام openclaw وnode.invoke، مثل:
openclaw nodes notify --node <id> --title "Ping" --body "Remote gateway ready" --sound Glassلم يعد هناك مفتاح تبديل عام لـ "الصوت الافتراضي" في التطبيق؛ يختار المستدعون صوتًا (أو لا شيء) لكل طلب.