Vì sao caffeinate không đủ cho các workflow AI closed-lid

Henry AGI
6 phút đọcJun 2026
Vì sao caffeinate không đủ cho các workflow AI closed-lid

Không — caffeinate chỉ chặn ngủ khi rảnh (idle sleep), còn việc đóng nắp máy lại kích hoạt một kiểu ngủ hoàn toàn khác, nên một AI agent hoặc tác vụ model chạy không ai trông chừng có thể "chết" ngay khi bạn gập nắp và bước ra khỏi phòng. Dưới đây là lý do chính xác vì sao có khoảng trống đó, lệnh miễn phí để lấp nó, rủi ro mà lệnh đó mang lại, và những gì một workflow closed-lid an toàn hơn cần bổ sung thêm.

caffeinate thực sự chặn được những gì

caffeinate là một công cụ nhỏ, đáng tin cậy đi kèm sẵn trong macOS, nằm ở /usr/bin/caffeinate. Chạy caffeinate -i, nó sẽ tạo một assertion ngăn hệ thống ngủ khi rảnh; -d giữ màn hình luôn sáng; -s giữ hệ thống không ngủ, nhưng chỉ khi Mac đang cắm nguồn AC; -m ngăn ổ đĩa ngủ khi rảnh. Bọc một lệnh bằng nó — caffeinate -i make — và nếu bạn không chỉ định flag nào, caffeinate sẽ tự hiểu là -i, giữ assertion đó trong đúng khoảng thời gian tiến trình đó chạy.

Ở tầng dưới, đó là một lệnh gọi tới IOPMAssertionCreateWithName, yêu cầu một loại assertion như PreventUserIdleSystemSleep — cùng cơ chế nền tảng cấp thấp mà chính chế độ Keep Awake khi mở nắp của LidRun cũng được xây dựng trên đó. Đây không phải là lời chê caffeinate; nó là công cụ đúng, được làm đúng, cho đúng việc nó nhắm tới.

Với một build dài, một lượt tải nặng, một bộ test, hay một phiên chạy Codex hoặc Claude Code qua đêm khi vẫn mở nắp máy, chỉ một dòng lệnh đó là thực sự đủ. Không có lý do gì để tìm đến thứ gì nặng nề hơn.

Từ đáng chú ý ở đây là rảnh (idle). caffeinate chặn kiểu ngủ xảy ra khi bạn rời khỏi một chiếc laptop đang mở nắp và macOS quyết định rằng bạn không còn dùng nó nữa. Đó chỉ là một kiểu ngủ cụ thể — không phải tất cả các kiểu ngủ.

Vì sao đóng nắp máy lại là một vấn đề khác

Đóng nắp máy không kích hoạt ngủ khi rảnh — nó kích hoạt ngủ clamshell, một hành vi riêng, ở tầng thấp hơn của macOS. Trừ khi có một màn hình ngoài, nguồn AC, và bàn phím hoặc chuột đang thực sự vận hành một cấu hình desktop với màn hình đóng thực thụ, macOS sẽ đưa máy vào trạng thái ngủ chỉ trong vài giây sau khi nắp đóng lại, bất kể có assertion hay không.

LidRun
Diagram comparing idle sleep, which caffeinate blocks, to clamshell sleep triggered by closing the lid, which it does not
Hai kiểu sleep khác nhau: caffeinate chỉ xử lý được một trong hai.

Không có assertion nào dựa trên IOPMAssertionCreateWithName chạm được tới đường đó — không phải của caffeinate, và cũng không phải của bất kỳ app nào xây trên cùng cơ chế nền đó. Ngay cả -s, flag mạnh nhất của caffeinate, cũng được chính man page của nó giới hạn rõ là "chỉ có hiệu lực khi hệ thống đang chạy bằng nguồn AC," và vẫn không hề nhắc gì đến chiếc nắp máy.

Vì vậy, một tình huống ngày càng phổ biến — khởi chạy một agent hoặc một tác vụ fine-tune, gập laptop lại, rồi đi sang phòng khác — sẽ khiến phiên chạy đó bị treo ngay khi nắp máy vừa đóng. caffeinate vẫn đang trung thành giữ assertion của nó; nhưng chiếc nắp máy vẫn thắng, vì ngủ khi rảnh và ngủ clamshell là hai câu hỏi hoàn toàn khác nhau.

Hướng dẫn liên quanChế độ Closed-Lid trên macOS, không cần kext

Cách khắc phục miễn phí: pmset disablesleep

Cần gạt duy nhất được ghi nhận công khai, có thể thay đổi hành vi khi đóng nắp lúc dùng pin, mà không cần màn hình ngoài, là tùy chọn pmset disablesleep. Lệnh cụ thể là: sudo pmset -a disablesleep 1 cho phép đóng nắp mà Mac không ngủ, còn sudo pmset -a disablesleep 0 đưa việc ngủ khi đóng nắp trở lại bình thường.

LidRun
Terminal screenshot showing the sudo pmset -a disablesleep 1 and disablesleep 0 commands with annotations
Lệnh thực sự giúp Mac không ngủ khi đóng lid — và lệnh bạn phải nhớ chạy để tắt nó đi.

Nó sẽ hỏi mật khẩu admin khi bạn tự chạy lệnh này (flag -a khiến nó áp dụng cho toàn hệ thống), và có hiệu lực ngay lập tức — không cần khởi động lại máy.

Đó chính là cơ chế mà chế độ Closed-Lid của LidRun bật/tắt ở tầng dưới, và nếu bạn tự chạy lệnh này cho một tác vụ qua đêm duy nhất thì hoàn toàn miễn phí và vẫn hiệu quả. Nếu chỉ dùng một lần, vậy là thường đã đủ thật sự.

Rủi ro khi tự làm bằng tay — và vì sao các ứng dụng giữ máy thức khác cũng gặp bức tường tương tự

Vấn đề nằm ở chỗ pmset disablesleep tự nó không làm được gì thêm: đây là một cài đặt toàn cục, tồn tại lâu dài. Nó không giới hạn trong phiên Terminal hay tiến trình mà bạn đặt cho nó — nó vẫn giữ giá trị 1 cho đến khi bạn tự tay chuyển lại về 0 hoặc khởi động lại Mac. Chỉ cần quên chạy lệnh thứ hai, hoặc cửa sổ Terminal hay app bạn dùng để chạy nó bị crash trước khi bạn kịp tắt, thì Mac sẽ từ chối ngủ khi đóng nắp — kể cả khi đang nằm im trong balo — cho tới khi bạn nhận ra và tự tay khắc phục.

LidRun
Comparison table showing caffeinate, Amphetamine, KeepingYouAwake, Lungo, and Caffeine all block idle sleep but none block lid-closed clamshell sleep on battery, unlike LidRun's guarded pmset path
Mọi công cụ keep-awake xử lý idle-sleep đều gặp cùng một giới hạn khi đóng lid — cách khắc phục nằm ở một tầng thấp hơn tất cả những công cụ đó.

Và khi nắp đã đóng, một chiếc Mac vẫn đang thức sẽ không tản nhiệt được như lúc mở nắp. Chạy một phiên làm việc bên trong một chiếc balo kín là trường hợp đáng để cẩn trọng, bất kể công cụ nào đã bật disablesleep — quy tắc trung thực ở đây là giữ cho một chiếc Mac đang chạy được thông thoáng, không bị bịt kín.

Đây cũng không phải khoảng trống mà một bản thay thế caffeinate đẹp hơn có thể lấp được. Amphetamine, KeepingYouAwake, Lungo, và Caffeine đều là những công cụ menu bar chắc chắn, làm tốt, với những điểm mạnh thực sự — giao diện gọn hơn, hẹn giờ theo phiên, quy tắc kích hoạt theo app — nhưng tất cả đều hoạt động qua cùng một cơ chế assertion IOKit dạng ngủ-khi-rảnh mà caffeinate dùng. Không app nào trong số đó ghi đè được ngủ clamshell: một chiếc nắp đóng khi dùng pin vẫn khiến Mac ngủ dưới Amphetamine hay KeepingYouAwake y hệt như dưới một lệnh caffeinate -i trần trụi. Đó không phải vì các app đó thiếu tính năng — ghi đè ngủ khi đóng nắp cần đến bước leo thang pmset disablesleep (hoặc một cấu hình clamshell với màn hình ngoài), chứ không phải một lớp bọc assertion đẹp hơn.

Một workflow AI closed-lid an toàn hơn thực sự cần những gì

Tự tay bật disablesleep có thể giúp một tác vụ chạy qua đêm trót lọt, nhưng "thức bất kể chuyện gì" lại là mục tiêu sai cho một thứ đang chạy khi đóng nắp, dùng pin, và có thể không ai trông chừng. Điều mà cài đặt đó thực sự cần thêm là một cơ chế dọn dẹp đáng tin cậy, cùng các giới hạn biết tôn trọng cả pin lẫn nhiệt độ.

LidRun
Table of LidRun's closed-lid guardrails: battery auto-stop threshold, emergency force-sleep floor, thermal step-back, charging-only mode, timer mode, and crash recovery, with their default values
Điều biến một pmset toggle trần trụi thành một workflow bạn không cần ngồi canh chừng.

Về khoản dọn dẹp: LidRun luôn đi kèm việc bật disablesleep với việc tắt nó lại ở mỗi lần dừng, thoát app, hay kết thúc bình thường, và — sau khi bạn đã cấp quyền cho helper đặc quyền của nó — làm việc đó mà không cần hỏi mật khẩu admin mỗi lần. Nếu app bị kill trước khi kịp dọn dẹp, một file heartbeat nhỏ sẽ ghi lại rằng Closed-Lid đã được kích hoạt; lần tới khi LidRun khởi động lại, nó sẽ kiểm tra trạng thái còn sót lại đó và đưa disablesleep về 0. Việc reset này diễn ra ở lần khởi động tiếp theo, chứ không phải ngay lúc app crash — đây là điều đáng biết chứ không nên mặc định.

Về khoản pin: tính năng giữ máy thức sẽ tự động dừng khi pin xuống dưới một ngưỡng bạn tự đặt, mặc định là 20% và có thể chỉnh trong khoảng 15–50%. Bên dưới đó còn có một ngưỡng ép ngủ khẩn cấp riêng — mặc định 4%, chỉnh được trong khoảng 4–8% — hoạt động bất kể cài đặt tự-dừng ở trên là gì, vì macOS cần một khoảng đệm để thực sự hoàn tất việc ngủ trước khi pin cạn hẳn.

Về khoản nhiệt: khi tín hiệu nhiệt thô của chính macOS báo chip đang nóng ở mức nghiêm trọng, LidRun mặc định sẽ tắt chế độ Closed-Lid và cho bạn biết lý do — Mac quá nóng, hãy mở nắp ra hoặc cải thiện luồng gió — thay vì để một chiếc Mac đóng kín tiếp tục "nấu" bên trong. Đó là một bước lùi để an toàn, không phải một tuyên bố rằng Mac đóng nắp thì không thể quá nhiệt; quy tắc nền tảng vẫn là giữ cho một chiếc Mac đang chạy được thông thoáng.

Ngoài ra còn có chế độ chỉ-khi-đang-sạc và chế độ hẹn giờ, dành cho những phiên chạy mà bạn muốn assertion chỉ tồn tại khi đang cắm sạc, hoặc tự hết hạn sau một khoảng thời gian cố định, thay vì trông chờ vào việc bạn nhớ tắt nó. Gộp lại, đó chính là hình dạng của lời hứa này: agent còn chạy thì giữ máy thức; agent xong việc, hoặc phiên chạy trở nên không an toàn, thì thả assertion ra và để Mac ngủ. Không phải một wake lock mù quáng cãi nhau với pin và cảm biến nhiệt — khi hai thứ đó mâu thuẫn nhau, an toàn luôn thắng sự tiện lợi.

Dùng caffeinate (hoặc Amphetamine) cùng với LidRun

Đây vẫn không phải chuyện caffeinate đấu với LidRun. caffeinate xuất sắc ở đúng việc nó được sinh ra để làm, và rất nhiều workflow chẳng bao giờ cần hơn một dòng lệnh của nó — điều này cũng đúng với Amphetamine, KeepingYouAwake, hay Lungo khi cần giữ máy thức lúc mở nắp với một giao diện menu bar đẹp hơn.

Nếu bạn giữ nắp máy mở, caffeinate -i (hay bất kỳ app nào trong số trên mà bạn đã quen dùng) thường là câu trả lời đơn giản nhất. Nếu bạn đóng nắp trong các phiên chạy AI và dev dài, và muốn có rào chắn an toàn về pin và nhiệt độ xung quanh việc đó, thì đó chính là khoảng trống mà LidRun lấp vào.

Rất nhiều người dùng cả hai: caffeinate cho các tác vụ nhanh, gói gọn trong một lệnh ở Terminal, LidRun cho các phiên chạy closed-lid không ai trông chừng, nơi việc quên tắt lại một cài đặt toàn hệ thống thực sự gây hậu quả.

Thử nó thay vì vật lộn với ngủ khi gập máy

LidRun giữ công việc của bạn chạy tiếp khi đóng nắp, với cơ chế bảo vệ pin và nhiệt tích hợp sẵn.

Tải cho macOS

Đã có LidRun? Đọc hướng dẫn thiết lập →

Mới biết đến LidRun? Xem bảng giá →

Câu hỏi thường gặp

caffeinate có hoạt động khi đóng nắp máy không?

Tự nó thì không. caffeinate chặn ngủ hệ thống khi rảnh; còn đóng nắp máy lại kích hoạt ngủ clamshell, thứ mà không một assertion ngủ-khi-rảnh nào — kể cả của caffeinate — có thể chạm tới. Bạn cần đến con đường pmset disablesleep (hoặc một màn hình ngoài đang thực sự vận hành một cấu hình clamshell thực thụ) cho việc đó.

caffeinate có tệ không?

Không hề. Đây là một công cụ có sẵn, đáng tin cậy, và là lựa chọn đúng cho rất nhiều nhu cầu giữ máy thức khi mở nắp. Vấn đề ở đây là phạm vi, không phải chất lượng: nó chưa bao giờ được làm ra để xử lý việc đóng nắp máy, và chính man page của nó cũng nói rõ điều đó — ngay cả flag mạnh nhất, -s, cũng chỉ có hiệu lực khi dùng nguồn AC và không hề nhắc gì đến chiếc nắp máy.

sudo pmset -a disablesleep 1 thực sự làm gì, và tự chạy lệnh này bằng tay có an toàn không?

Đây là lệnh thật, được ghi nhận chính thức: đặt về 1 trước khi đóng nắp, rồi đưa về 0 khi xong việc. Nó hoạt động, và với một tác vụ qua đêm duy nhất thì tự chạy bằng tay hoàn toàn ổn. Rủi ro nằm ở chỗ đây là cài đặt toàn cục và tồn tại lâu dài — nó vẫn bật cho tới khi bạn tự tay tắt hoặc khởi động lại Mac, nên nếu bạn quên dọn dẹp, hoặc gặp crash trước khi kịp tắt, Mac sẽ không thể ngủ khi đóng nắp cho tới khi bạn nhận ra và khắc phục.

Amphetamine, KeepingYouAwake, hay Lungo có giữ được Mac thức khi đóng nắp không?

Không hơn gì caffeinate cả. Đây đều là những công cụ menu bar giữ máy thức tốt, được xây trên cùng cơ chế assertion ngủ-khi-rảnh, và không app nào trong số đó ghi đè được ngủ clamshell khi dùng pin. Một chiếc nắp đóng vẫn khiến Mac ngủ dưới bất kỳ app nào trong số này, trừ khi pmset disablesleep, hoặc một cấu hình clamshell với màn hình ngoài, cũng đang được dùng song song.

Một phiên chạy AI closed-lid thực sự cần thêm gì ngoài việc bật/tắt pmset?

Cần tắt lại được cài đặt đó một cách đáng tin cậy, kể cả sau khi crash; một ngưỡng sàn về pin để một phiên chạy dài không ai trông chừng không hút cạn pin; một bước lùi về nhiệt để một chiếc Mac đóng kín không tiếp tục tích nhiệt; và lý tưởng nhất là có thêm tùy chọn chỉ-khi-đang-sạc hoặc hẹn giờ, để bạn không phải dựa vào trí nhớ để tắt nó.

Tôi có thể tiếp tục dùng caffeinate song song với LidRun không?

Có chứ. Hai công cụ này hoàn toàn có thể dùng song song — caffeinate cho các tác vụ nhanh, gói trong một lệnh, khi mở nắp; LidRun cho các phiên chạy closed-lid, không ai trông chừng, nơi việc dọn dẹp disablesleep cùng các rào chắn về pin và nhiệt độ thực sự quan trọng.

Bạn đang tò mò LidRun có hợp với mình không?

Cứ để ChatGPT, Claude hoặc Perplexity tìm hiểu giúp — bấm vào bên dưới xem AI thực sự nghĩ gì về LidRun.