คู่มือ Mac

ปิดฝา MacBook แล้วให้ Claude Code ทำงานต่อ ทำอย่างไร

สั่งงานยาวให้ Claude Code หรือ Codex แล้วปิดฝาเครื่อง Mac จะ sleep และงานจะหยุดกลางทาง คู่มือนี้อธิบายว่าทำไม caffeinate กันไม่ได้ สามวิธีที่ได้ผล คำสั่งที่ใช้จริง และความเสี่ยงของแต่ละวิธี

คำตอบสั้นๆ

ปิดฝา MacBook แล้วเครื่องจะ sleep และ caffeinate ซึ่งกันได้แค่การ sleep ตอนเครื่องว่าง ช่วยเรื่องนี้ไม่ได้ วิธีที่ได้ผลมีสามทาง คือสั่ง sudo pmset -a disablesleep 1 แล้วสั่งกลับเป็น 0 เมื่องานเสร็จ ใช้โหมดปิดฝาโดยเสียบไฟและต่อจอนอก หรือใช้เครื่องมือที่ปิดการ sleep เฉพาะช่วงที่ agent ทำงานอยู่

ประเด็นสำคัญ

  • caffeinate -i กันได้แค่การ sleep ตอนเครื่องว่าง การปิดฝาเป็นอีกสาเหตุหนึ่ง ส่วน caffeinate -s ใช้ได้เฉพาะตอนเสียบไฟ
  • sudo pmset -a disablesleep 1 ทำให้ MacBook ทำงานต่อได้ทั้งที่ปิดฝา แม้ใช้แบตเตอรี่ และสั่ง sudo pmset -a disablesleep 0 เพื่อคืนค่า
  • ถ้าลืมคืนค่า แบตเตอรี่อาจหมดเกลี้ยง และไม่มีอะไรคอยดูความร้อนตอนเครื่องอยู่ในกระเป๋า
  • โหมดปิดฝาเป็นวิธีที่ Apple อธิบายไว้ แต่ต้องเสียบไฟ ต่อจอนอก และมีคีย์บอร์ดกับเมาส์หรือแทร็กแพด
  • สคริปต์สั้น ๆ หรือ AgentAwake ช่วยปิดการ sleep เฉพาะช่วงที่ agent ยังทำงานอยู่

ทำไมปิดฝา MacBook แล้วเครื่อง sleep ทั้งที่รัน caffeinate อยู่

เพราะการปิดฝาไม่ใช่การ sleep ตอนเครื่องว่าง และ caffeinate ตามปกติกันได้แค่แบบหลัง macOS แยก "ไม่มีใครใช้เครื่องมาสักพัก" กับ "ฝาเพิ่งปิด" เป็นสองเหตุผลที่ต่างกัน เอกสารของ Apple สำหรับ assertion กัน sleep ตอนเครื่องว่างเขียนไว้ชัดว่าระบบยังอาจ sleep ได้เมื่อปิดฝา เมื่อเลือกจากเมนู Apple หรือเมื่อแบตเตอรี่ต่ำ

man page ของ caffeinate มี assertion ห้าแบบ -d ให้จอไม่ดับ -i กันระบบ sleep ตอนว่าง -m กันดิสก์ sleep ตอนว่าง -u บอกว่ามีผู้ใช้อยู่ และ -s กันระบบ sleep แต่ใช้ได้เฉพาะตอนเสียบไฟ ถ้าไม่ใส่ตัวเลือกจะได้ assertion แบบกัน sleep ตอนว่าง ไม่มีแบบไหนที่เอกสารบอกว่าครอบคลุมการปิดฝา และตอนใช้แบตเตอรี่ -s ไม่มีผลเลย

คนใช้ agent มักพลาดตรงนี้ เพราะ Claude Code รัน caffeinate ให้เองระหว่างตอบ เปิดฝาไว้เครื่องก็ไม่ sleep จึงดูเหมือนปลอดภัย แต่พอปิดฝาเครื่องก็ sleep อยู่ดี ระหว่างนั้นไม่มีอะไรทำงาน agent หยุดกลางงาน และคำขอที่ค้างอยู่อาจหมดเวลา ดูสถานะได้ด้วยสองคำสั่งนี้

# What is holding the Mac awake, and with which assertion
pmset -g assertions

# Is lid sleep switched off? 1 = off, 0 = normal
pmset -g | grep SleepDisabled
เกิดอะไรขึ้นเมื่อปิดฝาระหว่างที่ agent ทำงาน
  1. agent กำลังทำงานClaude Code ถือ caffeinate ไว้ เครื่องจึงไม่ sleep ตอนว่าง
  2. ปิดฝาเป็นอีกสาเหตุของการ sleep ที่ assertion นี้ไม่ครอบคลุม
  3. เครื่อง sleepทุกโปรเซสหยุด รวมถึง agent
  4. เปิดฝาagent ทำงานต่อ แต่คำขอที่ค้างอยู่อาจล้มเหลวไปแล้ว

ใช้ pmset ให้ MacBook ไม่ sleep ตอนปิดฝาอย่างไร

สั่ง sudo pmset -a disablesleep 1 คำสั่งนี้ปิดการ sleep ของระบบทั้งหมด รวมถึงตอนปิดฝา ทั้งตอนใช้แบตเตอรี่และตอนเสียบไฟ จนกว่าจะสั่ง sudo pmset -a disablesleep 0 ต้องใช้รหัสผ่านผู้ดูแลเครื่อง และเป็นการเปลี่ยนค่าของทั้งระบบ ไม่ได้มีผลแค่หน้าต่างที่เปิดอยู่

ตัวเลือกนี้ไม่มีใน man page ของ pmset แต่ใช้กันแพร่หลาย pmset -g แสดงค่านี้ในชื่อ SleepDisabled ตัวช่วย Power Protect ของ Amphetamine ติดตั้งสิทธิ์ sudo สำหรับสองคำสั่งนี้พอดี และ AgentAwake ก็สลับค่าเดียวกันนี้ ตรวจให้แน่ใจว่าค่าเปลี่ยนแล้วก่อนปิดฝา

# Before you close the lid
sudo pmset -a disablesleep 1
pmset -g | grep SleepDisabled    # expect: SleepDisabled 1

# When the agent has finished
sudo pmset -a disablesleep 0

pmset disablesleep มีความเสี่ยงอะไรบ้าง

ความเสี่ยงคือค่านี้ค้างอยู่ macOS ไม่ได้คืนค่าให้เมื่อ agent ทำงานเสร็จ เครื่องที่เก็บใส่กระเป๋าหลังงานจบจึงยังไม่ sleep และยังกินไฟต่อ

ถ้าใช้แบตเตอรี่ เครื่องจะทำงานไปจนแบตหมด งานที่ยังไม่ได้บันทึกก็หายไปด้วย ถ้าปิดฝาแล้วใส่กระเป๋า พัดลมแทบไม่มีอากาศให้ระบาย และค่านี้ไม่ได้สนใจอุณหภูมิเลย ถ้าลืมคืนค่า เครื่องจะไม่ sleep ทุกครั้งที่ปิดฝาไปอีกหลายวันจนกว่าจะมีคนสังเกต

ทุกข้อแก้ได้ คืนค่าทันทีที่งานจบ หยุดที่ระดับแบตเตอรี่ที่กำหนด และตอบสนองต่อความร้อน สคริปต์ในหัวข้อถัดไปทำสองข้อแรกได้โดยไม่เสียเงิน

ปิดการ sleep เอง เทียบกับปิดเฉพาะตอน agent ทำงาน

สั่ง disablesleep 1 เอง

  • ค้างอยู่แม้ agent ทำงานเสร็จแล้ว
  • ใช้แบตเตอรี่ไปจนหมด
  • ไม่มีอะไรตอบสนองต่อความร้อนในกระเป๋า
  • ถ้าลืม ค่านี้ค้างไปหลายวัน

ปิดเฉพาะตอนงานยังรันอยู่

  • คืนค่าเองเมื่องานหยุด
  • sleep ที่ระดับแบตเตอรี่ที่ตั้งไว้
  • หยุดพักหรือเร่งพัดลมเมื่อเครื่องร้อน
  • มีตัวเฝ้าระวังคืนค่าให้ถ้าเครื่องมือหยุดทำงาน

วิธีฟรีที่ปลอดภัยกว่า ปิดการ sleep เฉพาะคำสั่งเดียว

ให้สคริปต์ครอบ agent ไว้ ปิดการ sleep ตอนเริ่ม รัน agent แล้วคืนค่าทุกครั้งไม่ว่าคำสั่งจะจบแบบไหน ขั้นแรกให้สามคำสั่ง pmset รันได้โดยไม่ต้องใส่รหัสผ่าน เพราะ sudo จะลืมรหัสผ่านในไม่กี่นาที คำสั่งคืนค่าตอนท้ายงานยาวจึงจะรอรหัสผ่านอยู่โดยไม่มีใครพิมพ์ให้

# Once: allow exactly these three pmset commands without a password
sudo visudo -f /etc/sudoers.d/lid-awake
# add this one line, using your short user name (run: whoami)
yourname ALL=(root) NOPASSWD: /usr/bin/pmset -a disablesleep 0, /usr/bin/pmset -a disablesleep 1, /usr/bin/pmset sleepnow
#!/bin/bash
# lid-awake: lid sleep off for one command, back on when it ends
# or when the battery falls to FLOOR %. Usage: lid-awake codex
FLOOR=20
P=/usr/bin/pmset
sudo -n $P -a disablesleep 1 || exit 1
( while sleep 60; do
    b=$(pmset -g batt)
    pct=$(echo "$b" | grep -Eo '[0-9]+%' | head -1 | tr -d %)
    if echo "$b" | grep -q "Battery Power" && [ "$pct" -le "$FLOOR" ]; then
      sudo -n $P -a disablesleep 0 && sudo -n $P sleepnow
      exit
    fi
  done ) &
watcher=$!
disown
restore() {
  kill $watcher 2>/dev/null
  sudo -n $P -a disablesleep 0
  ioreg -r -k AppleClamshellState -d 1 | grep -q '"AppleClamshellState" = Yes' && sudo -n $P sleepnow
}
trap restore EXIT
"$@"
# Install it, then start your agent through it
chmod +x lid-awake
sudo mkdir -p /usr/local/bin && sudo mv lid-awake /usr/local/bin/
lid-awake claude
  • การ sleep กลับมาเมื่อ agent จบ เมื่อกด Ctrl-C และเมื่อปิดหน้าต่างเทอร์มินัล
  • ตอนใช้แบตเตอรี่ สคริปต์เช็กทุกนาที และสั่งเครื่อง sleep ที่ 20% ปรับได้ที่ FLOOR
  • ถ้างานจบตอนฝายังปิดอยู่ pmset sleepnow จะสั่งเครื่อง sleep ทันที ไม่ปล่อยให้ทำงานค้างในกระเป๋า
  • ช่วยไม่ได้ถ้าโดน kill -9 เชลล์ล่ม หรือไฟดับ ถ้าไม่แน่ใจให้สั่ง pmset -g | grep SleepDisabled
  • สคริปต์ไม่ได้ดูความร้อน และไม่รู้ว่า agent ยังทำงานอยู่จริงหรือไม่ ถ้า agent รอให้กดอนุมัติ เครื่องจะไม่ sleep จนกว่าจะตอบ

โหมดปิดฝาต่อจอนอกใช้กับ AI agent ได้ไหม

ได้ ถ้านั่งทำงานที่โต๊ะ โหมดปิดฝา (closed-display mode หรือ clamshell) เป็นวิธีที่ Apple อธิบายไว้สำหรับใช้ MacBook ตอนปิดฝา คือเสียบไฟ ต่อจอนอก คีย์บอร์ด และเมาส์หรือแทร็กแพด แล้วปิดฝาทำงานบนจอนอกต่อ ไม่ได้เปลี่ยนค่าอะไรในระบบ จึงไม่ต้องคืนค่า

แต่โหมดนี้ไม่ตอบโจทย์ที่คนใช้ agent ส่วนใหญ่ต้องการ คือปิดฝาแล้วเดินออกไป ถ้าใช้แบตเตอรี่หรือไม่ได้ต่ออะไรไว้ ปิดฝาแล้วเครื่องก็ยัง sleep

AgentAwake ทำให้ agent ทำงานต่อตอนปิดฝาได้อย่างไร

AgentAwake เป็นแอปบนแถบเมนูของ SyncEdge ที่สลับค่า pmset ให้เอง และปิดการ sleep เฉพาะตอนที่ agent ทำงานอยู่ agent นับว่ากำลังทำงานเมื่อ Codex หรือ opencode ที่เชื่อมไว้แล้วรายงานผ่าน hook เมื่อมี caffeinate รันอยู่ข้างใน อย่างที่ Claude Code ทำระหว่างตอบ หรือเมื่อโปรเซสของ agent กำลังใช้ซีพียู ค่าเริ่มต้นดู claude codex gemini aider และ opencode เมื่อไม่มี agent ไหนทำงาน แอปจะรอช่วงผ่อนผัน ค่าเริ่มต้น 2 นาที แล้วปล่อยให้เครื่อง sleep

แอปเพิ่มการป้องกันที่วิธีสั่งเองไม่มี ตอนใช้แบตเตอรี่ เครื่องจะ sleep ที่ระดับที่เลือกไว้ 10, 15, 20 หรือ 25% แอปหยุดพักทุกครั้งที่ macOS รายงานว่าร้อนระดับ serious และคุมพัดลมด้วย ในโปรไฟล์ Balanced ซึ่งเป็นค่าเริ่มต้น พัดลมหมุนอย่างน้อย 40% ระหว่างปิดฝาและ agent ทำงาน และหมุนเต็มที่ที่ 90 °C หน้าต่างแอปขึ้น "Lid sleep blocked ✓" ก็ต่อเมื่ออ่านค่ากลับจากระบบแล้วเท่านั้น และถ้าแอปหยุดทำงาน ตัวเฝ้าระวังจะเปิดการ sleep คืนภายใน 60 วินาที

ตอนติดตั้งต้องใส่รหัสผ่านครั้งเดียว สิทธิ์ sudo ที่แอปเพิ่มครอบคลุม pmset แค่สามคำสั่ง คือปิดการ sleep เปิดการ sleep และสั่ง sleep ทันที ใช้กับ macOS 14 ขึ้นไป ทั้ง Apple silicon และ Intel ใช้ได้เต็มที่ 14 วันโดยไม่ต้องใส่บัตร หลังจากนั้นปีละ $9.99 ใช้ได้ 3 เครื่อง

การป้องกันของ AgentAwake
ช่วงผ่อนผันเริ่มต้นก่อนปล่อยให้เครื่อง sleep
2 นาที
ระดับแบตเตอรี่ที่เลือกได้ ตอนใช้แบตเตอรี่
10 ถึง 25%
ความเร็วพัดลมขั้นต่ำตอนปิดฝา โปรไฟล์ Balanced
40%
ตัวเฝ้าระวังเปิดการ sleep คืนถ้าแอปหยุด
60 วินาที

ควรใช้วิธีไหน

เลือกตามที่ที่เครื่องจะอยู่ ถ้าอยู่ที่โต๊ะและมีจอนอก โหมดปิดฝาไม่ต้องติดตั้งอะไรเพิ่ม ถ้าเป็นงานเดียวที่จะกลับมาดูเอง สองคำสั่ง pmset ก็พอ ถ้าปิดฝาแล้วเดินออกไปบ่อย ให้ใช้สิ่งที่คืนค่าให้เอง คือสคริปต์ lid-awake ข้างบน หรือ AgentAwake ถ้าต้องการการหยุดพักเมื่อร้อน การคุมพัดลม และตัวเฝ้าระวังด้วย

ถ้าเปิดฝาไว้ ไม่ต้องใช้วิธีไหนเลย caffeinate -i <command> ก็ทำให้งาน build หรือเทสต์ยาว ๆ รันไปจนจบได้

วิธีให้ AI agent ทำงานต่อตอนปิดฝา MacBook
วิธีปิดฝาตอนใช้แบตเตอรี่คืนค่าเองไหมแบตเตอรี่และความร้อน
caffeinate -iไม่ได้จบพร้อมคำสั่งที่ครอบไม่เกี่ยว
sudo pmset -a disablesleep 1ได้ไม่ จนกว่าจะสั่ง disablesleep 0ไม่มีอะไรดูให้
สคริปต์ lid-awakeได้คืนค่าเมื่อคำสั่งจบมีระดับแบตเตอรี่ ไม่ดูความร้อน
โหมดปิดฝาต่อจอนอกไม่ได้ ต้องเสียบไฟและต่อจอนอกไม่มีอะไรต้องคืนเป็นไปตาม macOS ปกติ
AgentAwakeได้ เฉพาะตอน agent ทำงาน2 นาทีหลังงานหยุด และตัวเฝ้าระวังภายใน 60 วินาทีระดับแบตเตอรี่ หยุดพักเมื่อร้อน คุมพัดลม

ก่อนปิดฝาทิ้งให้ agent ทำงาน

  • pmset -g | grep SleepDisabled ขึ้น 1 หรือเครื่องมือที่ใช้บอกว่าปิดการ sleep แล้ว
  • รู้ว่าอะไรจะเปิดการ sleep คืน สคริปต์ แอป หรือตัวเราเอง
  • ถ้าใช้แบตเตอรี่ มีอะไรสั่งเครื่อง sleep ก่อนแบตหมด
  • วางเครื่องบนพื้นแข็ง ไม่ใช่ในกระเป๋าหรือบนเตียง
  • agent ไม่ได้รอให้กดอนุมัติในขณะที่เราไม่อยู่
  • บันทึกงานในแอปอื่นไว้แล้ว เผื่อแบตเตอรี่หมด

คำถามที่พบบ่อย

caffeinate ทำให้ Mac ไม่ sleep ตอนปิดฝาได้ไหม

พึ่งไม่ได้ caffeinate สร้าง power assertion ซึ่ง man page อธิบายว่ากันการ sleep ตอนว่างของระบบ จอ หรือดิสก์ ส่วน -s กันระบบ sleep ได้เฉพาะตอนเสียบไฟ และเอกสารของ Apple ระบุว่าระบบยังอาจ sleep เมื่อปิดฝาแม้มี assertion กัน sleep ตอนว่าง ถ้าจะให้ MacBook ทำงานต่อตอนปิดฝาโดยใช้แบตเตอรี่ ต้องใช้ sudo pmset -a disablesleep 1 หรือเครื่องมือที่สั่งค่านี้ให้

สั่ง sudo pmset -a disablesleep 1 ไปแล้ว จะคืนค่าอย่างไร

สั่ง sudo pmset -a disablesleep 0 แล้วตรวจด้วย pmset -g | grep SleepDisabled ถ้าขึ้น 0 แปลว่าเครื่องกลับมา sleep ตอนปิดฝาตามปกติ ค่านี้ค้างอยู่จนกว่าจะเปลี่ยน จึงควรคืนค่าในสคริปต์เดียวกับที่ตั้งค่า ไม่ควรพึ่งความจำ

ปิดฝา MacBook ระหว่างที่ Claude Code ทำงานปลอดภัยไหม

ปลอดภัย ถ้ามีอะไรกันเครื่องไม่ให้ sleep และมีอะไรคอยดูแบตเตอรี่กับความร้อน MacBook ที่ปิดฝาทำงานได้เหมือนตอนเปิดฝา ความเสี่ยงคือแบตเตอรี่หมดและความร้อนสะสม ซึ่งหนักที่สุดเมื่ออยู่ในกระเป๋าที่อากาศไม่ถ่ายเท ควรวางบนพื้นแข็งและตั้งระดับแบตเตอรี่ขั้นต่ำไว้

ต้องต่อจอนอกไหม ถึงจะใช้ MacBook ตอนปิดฝาได้

ต้องต่อเฉพาะโหมดปิดฝาของ Apple ซึ่งต้องเสียบไฟและมีคีย์บอร์ดกับเมาส์หรือแทร็กแพดด้วย ถ้าใช้ pmset disablesleep 1 หรือเครื่องมือที่สั่งค่านี้ MacBook ทำงานต่อตอนปิดฝาได้ทั้งตอนใช้แบตเตอรี่และไม่มีจอต่ออยู่

ใช้กับ Codex, Gemini CLI, aider และ opencode ได้ไหม

ได้ pmset disablesleep ทำงานระดับระบบ ทุกโปรเซสจึงทำงานต่อไม่ว่าจะเป็น agent ตัวไหน AgentAwake รู้จัก claude, codex, gemini, aider และ opencode ตั้งแต่แรก รับรายงานเริ่มและหยุดจาก Codex กับ opencode ผ่าน hook และเพิ่มชื่อคำสั่งอื่นเองได้

AgentAwake ราคาเท่าไร

ใช้ได้เต็มที่ 14 วันโดยไม่ต้องใส่บัตร หลังจากนั้นปีละ $9.99 ใช้ได้ 3 เครื่อง ชำระในแอปผ่าน Stripe ใช้กับ macOS 14 ขึ้นไป ทั้ง MacBook ที่เป็น Apple silicon และ Intel

เริ่มจากเล่าปัญหา

อยากให้เครื่องกลับมา sleep เองเมื่องานจบ

AgentAwake ให้ MacBook ทำงานต่อตอนปิดฝาเฉพาะช่วงที่ Claude Code, Codex หรือ agent อื่นทำงานอยู่ แล้วปล่อยให้ sleep สองนาทีหลังงานหยุด มีระดับแบตเตอรี่ขั้นต่ำ หยุดพักเมื่อร้อน คุมพัดลม และตัวเฝ้าระวังในตัว ใช้ฟรี 14 วัน หลังจากนั้นปีละ $9.99 ใช้ได้ 3 เครื่อง

ดูแลธุรกิจคุณด้วยมืออาชีพ

Your business,
in professional hands.