มันไม่เหมาะ แต่นี่เป็นวิธีแก้ปัญหา เพื่อป้องกันไม่ให้แล็ปท็อปหลับเมื่อฝาปิดและคุณใช้พลังงานจากแบตเตอรี่ให้เรียกใช้คำสั่งต่อไปนี้:
sudo pmset -b sleep 0; sudo pmset -b disablesleep 1
หากต้องการเปิดใช้งานการนอนหลับของแล็ปท็อปอีกครั้งเมื่อฝาปิดและคุณใช้พลังงานจากแบตเตอรี่
sudo pmset -b sleep 5; sudo pmset -b disablesleep 0
"5" ในคำสั่งชุดที่สองแสดงจำนวนนาทีก่อนที่จะเข้านอนเมื่อใช้แบตเตอรี่ ปรับได้ตามต้องการสำหรับแล็ปท็อปของคุณ
นี่เป็นอันตรายเล็กน้อยเพราะถ้าคุณลืมเปิดใช้งานการตั้งค่าของคุณใหม่แล็ปท็อปจะไม่นอนเมื่อใช้แบตเตอรี่ ด้วยเหตุนี้ฉันจึงเขียนเชลล์สคริปต์เพื่อเปิดใช้งานการตั้งค่าใหม่โดยอัตโนมัติ:
#!/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
เชลล์สคริปต์จะปิดใช้งานโหมดสลีปจนกว่าคุณจะกดEnterปุ่มซึ่งจะมีการเปิดใช้งานการตั้งค่าโหมดสลีปอีกครั้ง (หรือคุณสามารถกดCtrl- Cและบรรลุสิ่งเดียวกัน) นอกจากนี้ยังจะตั้งค่าการหมดเวลา (ค่าเริ่มต้นเป็น 300 วินาที / 5 นาที) หลังจากนั้นการตั้งค่าสลีปจะเปิดใช้งานอีกครั้งโดยอัตโนมัติและแล็ปท็อปจะถูกบังคับให้เข้าสู่โหมดสลีป ขณะนี้อาจเป็นเรื่องเจ็บปวดหากคุณใช้แล็ปท็อปในการประชุม แต่จะเป็นเครื่องช่วยชีวิตหากคุณลืมและวางแล็ปท็อปไว้ในกระเป๋าของคุณเพื่อกลับบ้าน
ผู้อ่านที่ชาญฉลาดจะทราบว่าคำสั่งเหล่านี้ต้องการsudo
; น่าเศร้าที่ AFAIK นั้นหลีกเลี่ยงไม่ได้ สิ่งที่ฉันทำในระบบของฉันคือการสร้างมันขึ้นมาเพื่อที่ฉันจะได้ไม่ต้องใส่รหัสผ่านของฉันเพื่อทำงานpmset
ในฐานะรูท หากต้องการทำเช่นนั้นให้แก้ไขsudoers
ไฟล์ ( sudo visudo
) และเพิ่มบรรทัดนี้:
joe ALL=(ALL) NOPASSWD: /usr/bin/pmset
แทนที่ "joe" ด้วยชื่อผู้ใช้ของคุณ คุณอาจจะได้ผลลัพธ์เดียวกัน (เช่นการเรียกใช้สคริปต์โดยไม่ต้องป้อนรหัสผ่านของคุณ) โดยการรันเชลล์สคริปต์ SETUID แต่ฉันไม่ชอบการทำเช่นนั้น การเปิดคำสั่งเดียวผ่าน sudoers นั้นมีความเสี่ยงน้อยกว่าสำหรับฉัน
หากต้องการเรียกใช้สคริปต์ให้ติดไว้ในไดเรกทอรีของคุณPATH
และเรียกใช้เช่น:
noz [<timeout in seconds>]
เมื่อคุณไปถึงที่ที่คุณกำลังไปเพียงแค่กดEnterหรือCtrl- Cและคุณก็พร้อมที่จะไป และหากคุณลืมมันก็จะรีเซ็ตและนอนหลับโดยอัตโนมัติ
อาจเป็นวิธีที่จะทำให้สำเร็จทั้งหมดนี้ผ่าน AppleScript เพื่อให้คุณสามารถกำหนดฮอตคีย์และสิ่งที่ไม่ต้องการ ฉันจะลองว่าถ้าฉันเบื่อที่จะเรียกใช้จากบรรทัดคำสั่ง