คำตอบสั้นๆ
ปิดฝา 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 กำลังทำงานClaude Code ถือ caffeinate ไว้ เครื่องจึงไม่ sleep ตอนว่าง
- ปิดฝาเป็นอีกสาเหตุของการ sleep ที่ assertion นี้ไม่ครอบคลุม
- เครื่อง sleepทุกโปรเซสหยุด รวมถึง agent
- เปิดฝา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 0pmset disablesleep มีความเสี่ยงอะไรบ้าง
ความเสี่ยงคือค่านี้ค้างอยู่ macOS ไม่ได้คืนค่าให้เมื่อ agent ทำงานเสร็จ เครื่องที่เก็บใส่กระเป๋าหลังงานจบจึงยังไม่ sleep และยังกินไฟต่อ
ถ้าใช้แบตเตอรี่ เครื่องจะทำงานไปจนแบตหมด งานที่ยังไม่ได้บันทึกก็หายไปด้วย ถ้าปิดฝาแล้วใส่กระเป๋า พัดลมแทบไม่มีอากาศให้ระบาย และค่านี้ไม่ได้สนใจอุณหภูมิเลย ถ้าลืมคืนค่า เครื่องจะไม่ sleep ทุกครั้งที่ปิดฝาไปอีกหลายวันจนกว่าจะมีคนสังเกต
ทุกข้อแก้ได้ คืนค่าทันทีที่งานจบ หยุดที่ระดับแบตเตอรี่ที่กำหนด และตอบสนองต่อความร้อน สคริปต์ในหัวข้อถัดไปทำสองข้อแรกได้โดยไม่เสียเงิน
สั่ง 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 เครื่อง
- ช่วงผ่อนผันเริ่มต้นก่อนปล่อยให้เครื่อง sleep
- 2 นาที
- ระดับแบตเตอรี่ที่เลือกได้ ตอนใช้แบตเตอรี่
- 10 ถึง 25%
- ความเร็วพัดลมขั้นต่ำตอนปิดฝา โปรไฟล์ Balanced
- 40%
- ตัวเฝ้าระวังเปิดการ sleep คืนถ้าแอปหยุด
- 60 วินาที
ควรใช้วิธีไหน
เลือกตามที่ที่เครื่องจะอยู่ ถ้าอยู่ที่โต๊ะและมีจอนอก โหมดปิดฝาไม่ต้องติดตั้งอะไรเพิ่ม ถ้าเป็นงานเดียวที่จะกลับมาดูเอง สองคำสั่ง pmset ก็พอ ถ้าปิดฝาแล้วเดินออกไปบ่อย ให้ใช้สิ่งที่คืนค่าให้เอง คือสคริปต์ lid-awake ข้างบน หรือ AgentAwake ถ้าต้องการการหยุดพักเมื่อร้อน การคุมพัดลม และตัวเฝ้าระวังด้วย
ถ้าเปิดฝาไว้ ไม่ต้องใช้วิธีไหนเลย caffeinate -i <command> ก็ทำให้งาน build หรือเทสต์ยาว ๆ รันไปจนจบได้
| วิธี | ปิดฝาตอนใช้แบตเตอรี่ | คืนค่าเองไหม | แบตเตอรี่และความร้อน |
|---|---|---|---|
| caffeinate -i | ไม่ได้ | จบพร้อมคำสั่งที่ครอบ | ไม่เกี่ยว |
| sudo pmset -a disablesleep 1 | ได้ | ไม่ จนกว่าจะสั่ง disablesleep 0 | ไม่มีอะไรดูให้ |
| สคริปต์ lid-awake | ได้ | คืนค่าเมื่อคำสั่งจบ | มีระดับแบตเตอรี่ ไม่ดูความร้อน |
| โหมดปิดฝาต่อจอนอก | ไม่ได้ ต้องเสียบไฟและต่อจอนอก | ไม่มีอะไรต้องคืน | เป็นไปตาม macOS ปกติ |
| AgentAwake | ได้ เฉพาะตอน agent ทำงาน | 2 นาทีหลังงานหยุด และตัวเฝ้าระวังภายใน 60 วินาที | ระดับแบตเตอรี่ หยุดพักเมื่อร้อน คุมพัดลม |
เทียบ AgentAwake กับ caffeinate, pmset, Amphetamine และ Hold My Lid
ก่อนปิดฝาทิ้งให้ 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