macOS companion app

การควบคุมระยะไกล

โฟลว์นี้ช่วยให้แอป macOS ทำหน้าที่เป็นรีโมตคอนโทรลเต็มรูปแบบสำหรับ Gateway ของ OpenClaw ที่ทำงานอยู่บนโฮสต์อื่น (เดสก์ท็อป/เซิร์ฟเวอร์) แอปเชื่อมต่อโดยตรงกับ URL ของ Gateway บน LAN/Tailnet ที่เชื่อถือได้ หรือจัดการอุโมงค์ SSH เมื่อ Gateway ระยะไกลรับการเชื่อมต่อเฉพาะ loopback การตรวจสอบสถานะ การส่งต่อ Voice Wake และ Web Chat จะใช้การกำหนดค่าระยะไกลเดียวกันจาก Settings -> General

โหมด

  • ภายในเครื่อง (Mac เครื่องนี้): ทุกอย่างทำงานบนแล็ปท็อป โดยไม่ใช้ SSH
  • ระยะไกลผ่าน SSH (ค่าเริ่มต้น): คำสั่ง OpenClaw ทำงานบนโฮสต์ระยะไกล แอปเปิดการเชื่อมต่อ SSH ด้วย -o BatchMode ข้อมูลประจำตัว/คีย์ที่เลือก และการส่งต่อพอร์ตภายในเครื่อง
  • ระยะไกลโดยตรง (ws/wss): ไม่มีอุโมงค์ SSH แอปเชื่อมต่อโดยตรงกับ URL ของ Gateway (LAN, Tailscale, Tailscale Serve หรือพร็อกซีย้อนกลับ HTTPS สาธารณะ)

การรับส่งข้อมูลระยะไกล

  • อุโมงค์ SSH (ค่าเริ่มต้น): ใช้ ssh -N -L ... เพื่อส่งต่อพอร์ตของ Gateway ไปยัง localhost โดย Gateway จะเห็น IP ของ Node เป็น 127.0.0.1 เนื่องจากอุโมงค์เป็น loopback
  • โดยตรง (ws/wss): เชื่อมต่อโดยตรงกับ URL ของ Gateway โดย Gateway จะเห็น IP จริงของไคลเอนต์

แอปจะปิดการมัลติเพล็กซ์การเชื่อมต่อ SSH และการทำงานเบื้องหลังหลังการยืนยันตัวตนสำหรับกระบวนการ SSH ของแอปเอง เพื่อให้สามารถตรวจสอบและเริ่มกระบวนการนั้นใหม่ได้อย่างแม่นยำ แม้ว่า alias ที่เลือกจะเปิดใช้ ControlMaster หรือ ForkAfterAuthentication

การตรวจสอบคีย์โฮสต์ SSH จะเข้มงวดตามค่าเริ่มต้น เนื่องจากข้อมูลประจำตัวของ Gateway เดินทางผ่านอุโมงค์นี้ หากต้องการเลือกใช้ลักษณะการเชื่อถือของ alias SSH ที่ได้รับการจัดการเอง ให้ตั้งค่า --ssh-host-key-policy openssh ผ่าน openclaw-mac configure-remote หรือตั้งค่า gateway.remote.sshHostKeyPolicy เป็น "openssh" โดยตรง ตรวจสอบ alias รวมถึง Host * ที่ตรงกันหรือการกำหนดค่าระบบก่อนเลือกใช้ การเปลี่ยนเป้าหมาย SSH (ในแอปหรือผ่าน configure-remote) จะรีเซ็ตนโยบายกลับเป็น strict เว้นแต่จะเลือกใช้อีกครั้งอย่างชัดเจนสำหรับเป้าหมายใหม่

ในโหมดอุโมงค์ SSH ชื่อโฮสต์ LAN/Tailnet ที่ค้นพบจะบันทึกเป็น gateway.remote.sshTarget แอปจะคง gateway.remote.url ไว้ที่ปลายทางอุโมงค์ภายในเครื่อง (เช่น ws://127.0.0.1:18789) เพื่อให้ CLI, Web Chat และบริการโฮสต์ Node ภายในเครื่องทั้งหมดใช้การรับส่งข้อมูลแบบ loopback เดียวกัน เมื่อการค้นพบส่งคืนทั้ง IP ดิบของ Tailnet และชื่อโฮสต์ที่เสถียร แอปจะเลือกใช้ชื่อ Tailscale MagicDNS หรือ LAN เพื่อให้การเชื่อมต่อทนต่อการเปลี่ยนแปลงที่อยู่ได้ดีกว่า หากพอร์ตอุโมงค์ภายในเครื่องต่างจากพอร์ต Gateway ระยะไกล ให้ตั้งค่า gateway.remote.remotePort เป็นพอร์ตบนโฮสต์ระยะไกล

การทำงานอัตโนมัติของเบราว์เซอร์ในโหมดระยะไกลอยู่ภายใต้การดูแลของโฮสต์ Node ของ CLI ไม่ใช่ Node ดั้งเดิมของแอป macOS แอปจะเริ่มบริการโฮสต์ Node ที่ติดตั้งไว้เมื่อทำได้ หากต้องการเปิดใช้การควบคุมเบราว์เซอร์จาก Mac เครื่องนั้น ให้ติดตั้ง/เริ่มบริการด้วย openclaw node install ... และ openclaw node start (หรือเรียกใช้ openclaw node run ... ในเบื้องหน้า) จากนั้นกำหนดเป้าหมายไปยัง Node ที่รองรับเบราว์เซอร์นั้น

ข้อกำหนดเบื้องต้นบนโฮสต์ระยะไกล

  1. ติดตั้ง Node + pnpm และสร้าง/ติดตั้ง OpenClaw CLI (pnpm install && pnpm build && pnpm link --global)
  2. ตรวจสอบว่า openclaw อยู่ใน PATH สำหรับเชลล์แบบไม่โต้ตอบ (สร้าง symlink ไปยัง /usr/local/bin หรือ /opt/homebrew/bin หากจำเป็น)
  3. สำหรับการรับส่งข้อมูลผ่าน SSH: ตั้งค่าการยืนยันตัวตน SSH ด้วยคีย์ แนะนำให้ใช้ IP ของ Tailscale เพื่อให้เข้าถึงได้อย่างเสถียรจากภายนอก LAN

การตั้งค่าแอป macOS

หากต้องการกำหนดค่าแอปล่วงหน้าโดยไม่ผ่านโฟลว์ต้อนรับ ให้ดำเนินการผ่าน SSH:

bash
openclaw-mac configure-remote \  --ssh-target user@gateway-host \  --local-port 18789 \  --remote-port 18789 \  --token "$OPENCLAW_GATEWAY_TOKEN"

หรือสำหรับ Gateway ที่เข้าถึงได้อยู่แล้วบน LAN หรือ Tailnet ที่เชื่อถือได้ ให้ข้าม SSH ทั้งหมด:

bash
openclaw-mac configure-remote \  --direct-url ws://192.168.0.202:18789 \  --token "$OPENCLAW_GATEWAY_TOKEN"

openclaw-mac connect, wizard และ configure-remote จะระบุการกำหนดค่าที่ใช้งานอยู่ตามลำดับดังนี้: OPENCLAW_CONFIG_PATH จากนั้น $OPENCLAW_STATE_DIR/openclaw.json และ ~/.openclaw/openclaw.json การกำหนดค่าทั้งสองรูปแบบจะเขียนไปยังไฟล์ที่ใช้งานอยู่นั้น ทำเครื่องหมายว่าการเริ่มต้นใช้งานเสร็จสมบูรณ์ และให้อำนาจแอปจัดการการรับส่งข้อมูลที่เลือกเมื่อเริ่มต้นครั้งถัดไป --local-port/--remote-port มีค่าเริ่มต้นเป็น 18789 แฟล็กอื่นๆ ได้แก่ --password, --identity <path>, --ssh-host-key-policy <strict|openssh>, --project-root <path>, --cli-path <path>, --json เรียกใช้ openclaw-mac configure-remote --help เพื่อดูข้อมูลอ้างอิงฉบับเต็ม

หากต้องการกำหนดค่าจาก UI แทน:

  1. เปิด Settings -> General
  2. ภายใต้ OpenClaw runs ให้เลือก Remote และตั้งค่าดังนี้:
    • Transport: SSH tunnel หรือ Direct (ws/wss)
    • SSH target: user@host (เลือกใช้ :port ได้) หาก Gateway อยู่บน LAN เดียวกันและประกาศผ่าน Bonjour ให้เลือกจากรายการที่ค้นพบเพื่อกรอกฟิลด์นี้โดยอัตโนมัติ
    • Gateway URL (เฉพาะ Direct): wss://gateway.example.ts.net (หรือ ws://... สำหรับภายในเครื่อง/LAN)
    • Identity file (ขั้นสูง): พาธไปยังคีย์
    • Project root (ขั้นสูง): พาธเช็กเอาต์ระยะไกลที่ใช้สำหรับคำสั่ง
    • CLI path (ขั้นสูง): พาธทางเลือกไปยังจุดเข้าใช้งาน/ไบนารี openclaw ที่เรียกใช้ได้ (กรอกโดยอัตโนมัติเมื่อมีการประกาศ)
  3. กด Test remote หากสำเร็จ หมายความว่า openclaw status --json ระยะไกลทำงานอย่างถูกต้อง ความล้มเหลวมักหมายถึงปัญหา PATH/CLI ส่วนรหัสออก 127 หมายความว่าไม่พบ CLI บนโฮสต์ระยะไกล
  4. ขณะนี้การตรวจสอบสถานะและ Web Chat จะทำงานผ่านการรับส่งข้อมูลที่เลือกโดยอัตโนมัติ

Web Chat

  • อุโมงค์ SSH: เชื่อมต่อกับ Gateway ผ่านพอร์ตควบคุม WebSocket ที่ส่งต่อมา (ค่าเริ่มต้น 18789)
  • โดยตรง (ws/wss): เชื่อมต่อโดยตรงกับ URL ของ Gateway ที่กำหนดค่าไว้
  • ไม่มีเซิร์ฟเวอร์ HTTP สำหรับ Web Chat แยกต่างหาก

สิทธิ์

  • โฮสต์ระยะไกลต้องได้รับการอนุมัติ TCC แบบเดียวกับเครื่องภายใน (Automation, Accessibility, Screen Recording, Microphone, Speech Recognition, Notifications) ดำเนินการเริ่มต้นใช้งานบนเครื่องนั้นหนึ่งครั้งเพื่อให้สิทธิ์
  • Node จะประกาศสถานะสิทธิ์ผ่าน node.list / node.describe เพื่อให้เอเจนต์ทราบว่ามีสิ่งใดพร้อมใช้งาน

หมายเหตุด้านความปลอดภัย

  • ควรเลือกการผูกกับ loopback บนโฮสต์ระยะไกล และเชื่อมต่อผ่าน SSH, Tailscale Serve หรือ URL โดยตรงของ Tailnet/LAN ที่เชื่อถือได้
  • โดยค่าเริ่มต้น การสร้างอุโมงค์ SSH ต้องใช้คีย์โฮสต์ที่เชื่อถืออยู่แล้ว ให้เชื่อถือคีย์โฮสต์ก่อน (เพิ่มลงในไฟล์ known-hosts ที่กำหนดค่าไว้) หรือตั้งค่า gateway.remote.sshHostKeyPolicy: "openssh" อย่างชัดเจนสำหรับ alias ที่ได้รับการจัดการซึ่งยอมรับนโยบายการเชื่อถือของ OpenSSH
  • หากผูก Gateway กับอินเทอร์เฟซที่ไม่ใช่ loopback ต้องใช้การยืนยันตัวตน Gateway ที่ถูกต้อง ได้แก่ โทเค็น รหัสผ่าน หรือพร็อกซีย้อนกลับที่รับรู้ข้อมูลประจำตัวพร้อม gateway.auth.mode: "trusted-proxy"
  • ดู ความปลอดภัย และ Tailscale

โฟลว์การเข้าสู่ระบบ WhatsApp (ระยะไกล)

  • เรียกใช้ openclaw channels login --channel whatsapp --verbose บนโฮสต์ระยะไกล สแกน QR ด้วย WhatsApp บนโทรศัพท์
  • เข้าสู่ระบบอีกครั้งบนโฮสต์นั้นหากการยืนยันตัวตนหมดอายุ การตรวจสอบสถานะจะแสดงปัญหาการเชื่อมโยง

การแก้ไขปัญหา

อาการ สาเหตุ / วิธีแก้ไข
exit 127 / ไม่พบ openclaw ไม่อยู่ใน PATH สำหรับเชลล์ที่ไม่ใช่เชลล์ล็อกอิน ให้เพิ่มลงใน /etc/paths, ไฟล์ rc ของเชลล์ หรือสร้าง symlink ไว้ใน /usr/local/bin//opt/homebrew/bin
โพรบตรวจสอบสถานะล้มเหลว ตรวจสอบว่าสามารถเข้าถึงผ่าน SSH ได้, PATH ถูกต้อง และ Baileys (WhatsApp) ล็อกอินอยู่ (openclaw status --json)
Web Chat ค้าง ยืนยันว่า Gateway กำลังทำงานบนโฮสต์ระยะไกล และพอร์ตที่ส่งต่อตรงกับพอร์ต WS ของ Gateway โดย UI ต้องใช้การเชื่อมต่อ WS ที่ทำงานเป็นปกติ
IP ของ Node แสดงเป็น 127.0.0.1 เป็นพฤติกรรมที่คาดไว้เมื่อใช้ทันเนล SSH หากต้องการให้ Gateway เห็น IP จริงของไคลเอนต์ ให้เปลี่ยน Transport เป็น Direct (ws/wss)
แดชบอร์ดใช้งานได้ แต่ความสามารถของ Mac ออฟไลน์ การเชื่อมต่อของผู้ควบคุม/ส่วนควบคุมทำงานเป็นปกติ แต่การเชื่อมต่อ Node คู่หูยังไม่ได้เชื่อมต่อหรือไม่มีชุดคำสั่ง เปิดส่วนอุปกรณ์ในแถบเมนูและตรวจสอบว่า Mac อยู่ในสถานะ paired · disconnected หรือไม่ สำหรับปลายทาง Tailscale Serve แบบ wss://*.ts.net แอปจะตรวจพบพินใบรับรอง TLS ปลายทางแบบเก่าที่หมดอายุหลังการหมุนเวียนใบรับรอง ล้างพินเก่าเมื่อ macOS เชื่อถือใบรับรองใหม่ แล้วลองอีกครั้งโดยอัตโนมัติ หากใบรับรองไม่ได้รับความเชื่อถือจากระบบหรือโฮสต์ไม่ใช่ชื่อ Tailscale Serve ให้ตั้งค่า gateway.remote.tlsFingerprint เป็นลายนิ้วมือใบรับรองที่คาดไว้ ตรวจสอบใบรับรอง หรือเปลี่ยนเป็น Remote over SSH
Voice Wake วลีเรียกใช้งานจะถูกส่งต่อโดยอัตโนมัติในโหมดระยะไกล โดยไม่ต้องใช้ตัวส่งต่อแยกต่างหาก

เสียงแจ้งเตือน

เลือกเสียงสำหรับการแจ้งเตือนแต่ละรายการจากสคริปต์ด้วย openclaw nodes notify ตัวอย่างเช่น:

bash
openclaw nodes notify --node <id> --title "Ping" --body "Remote gateway ready" --sound Glass

แอปไม่มีตัวเลือกสลับเสียงเริ่มต้นส่วนกลาง ผู้เรียกใช้จะเลือกเสียง (หรือไม่ใช้เสียง) สำหรับแต่ละคำขอ

เนื้อหาที่เกี่ยวข้อง

Was this useful?
On this page

On this page