Nó không lý tưởng, nhưng đây là một giải pháp. Để ngăn máy tính xách tay ngủ khi đóng nắp và bạn đang chạy bằng pin, hãy chạy các lệnh sau:
sudo pmset -b sleep 0; sudo pmset -b disablesleep 1
Để bật lại máy tính xách tay ngủ khi đóng nắp và bạn đang chạy bằng pin, hãy chạy các lệnh sau:
sudo pmset -b sleep 5; sudo pmset -b disablesleep 0
"5" trong bộ lệnh thứ hai biểu thị số phút trước khi ngủ khi sử dụng pin; điều chỉnh như mong muốn cho máy tính xách tay của bạn.
Điều này hơi nguy hiểm, vì nếu bạn quên bật lại cài đặt của mình, máy tính xách tay sẽ không bao giờ ngủ khi hết pin. Vì điều này, tôi đã viết một tập lệnh shell để tự động kích hoạt lại các cài đặt:
#!/bin/bash
#***************************************************************************
#*** noz - prevent laptop from sleeping when lid is closed
#***************************************************************************
#***** set some defaults *****
BATTERY_SLEEP=5 # in minutes
DEF_WAKE_LEN=300 # in seconds
#***** determine timeout value *****
timeout_len=${1:-$DEF_WAKE_LEN}
function prevent_sleep() {
echo
echo -n "Preventing sleep for $timeout_len seconds; press <enter> to continue..."
sudo pmset -b disablesleep 1
sudo pmset -b sleep 0
}
function enable_sleep() {
# $1: <enter> = 0, timeout = 1, Ctrl-C = undef
#----- insert a newline for timeout or Ctrl-C -----
if [[ ${1:-1} -eq 1 ]]; then echo; fi
echo "Restoring previous battery sleep setting: $BATTERY_SLEEP"
sudo pmset -b disablesleep 0
sudo pmset -b sleep $BATTERY_SLEEP
#----- sleep on timeout only -----
if [[ ${1:--1} -eq 1 ]]; then sudo pmset sleepnow; fi
exit
}
#***** prevent it from sleeping *****
prevent_sleep
#***** trap Ctrl-C *****
trap enable_sleep INT
#***** wait for an enter *****
read -t $timeout_len
rc=$?
#***** re-enable normal sleep *****
enable_sleep $rc
Kịch bản shell sẽ vô hiệu hóa chế độ ngủ cho đến khi bạn nhấn Enterphím, tại thời điểm đó, nó sẽ kích hoạt lại cài đặt ngủ (thay vào đó, bạn có thể nhấn Ctrl- Cvà đạt được điều tương tự). Nó cũng sẽ đặt thời gian chờ (mặc định là 300 giây / 5 phút) sau đó cài đặt chế độ ngủ sẽ tự động được bật lại và máy tính xách tay sẽ buộc phải đi ngủ. Mặc dù điều này sẽ là một nỗi đau nếu bạn đang sử dụng máy tính xách tay của bạn trong một cuộc họp, nó sẽ là cứu cánh nếu bạn quên và đặt máy tính xách tay của bạn trong túi của bạn để về nhà.
Độc giả sắc sảo sẽ lưu ý rằng các lệnh này yêu cầu sudo
; thật đáng buồn, đó là điều không thể tránh khỏi AFAIK. Những gì tôi đã làm trên hệ thống của mình là làm cho nó để tôi không phải nhập mật khẩu để chạy pmset
bằng root. Để làm điều đó, chỉnh sửa sudoers
tệp ( sudo visudo
) và thêm dòng này:
joe ALL=(ALL) NOPASSWD: /usr/bin/pmset
thay thế "joe" bằng tên người dùng của bạn. Bạn có thể có thể đạt được kết quả tương tự (nghĩa là chạy tập lệnh mà không cần phải nhập mật khẩu của mình) bằng cách chạy tập lệnh shell SETUID, nhưng tôi không thích làm điều đó; mở ra một lệnh này thông qua sudoers có vẻ ít rủi ro hơn đối với tôi.
Để chạy tập lệnh, dán nó vào một thư mục trên của bạn PATH
và gọi nó như sau:
noz [<timeout in seconds>]
Khi bạn đến nơi bạn sẽ đến, chỉ cần nhấn Enterhoặc Ctrl- Cvà bạn tốt để đi. Và nếu bạn quên nó, nó sẽ tự động thiết lập lại và ngủ.
Có lẽ có một cách để đạt được tất cả những điều này thông qua AppleScript, để sau đó bạn có thể gán cho nó một phím nóng và những gì không; Tôi sẽ thử nếu tôi cảm thấy mệt mỏi khi chạy nó từ dòng lệnh.