ใช้คาเฟอีนเพื่อป้องกันการนอนหลับบนฝาปิดแบตเตอรี่


41

caffeinateยูทิลิตี้ดั้งเดิมไม่ทำงานเพื่อป้องกัน macbook ของฉันเข้าสู่โหมดสลีปเมื่อฉันปิดจอแสดงผล แต่ระบบพักและบริการเครือข่ายต่างๆ (VPN, หน้าจอ, การโทรผ่าน VOIP, โปรแกรมรับส่งข้อความ, การถ่ายโอนไฟล์) จะล้มเหลวขณะที่ฉันเดินจากโต๊ะทำงานของฉันไปยังการประชุมของฉันภายใน 5 นาที

การเดินไปรอบ ๆ พร้อมกับเปิดฝาแล็ปท็อปทำให้มันยากที่จะพกติดตัวไปกับกาแฟของฉันได้อย่างปลอดภัย

caffeinateยูทิลิตี้ดั้งเดิมได้รับการออกแบบมาเพื่อจัดการสิ่งนี้แทนการใช้งานง่ายpmsetแต่ดูเหมือนจะได้รับการออกแบบไม่ให้ทำงานเมื่อตัดการเชื่อมต่อจากไฟ AC

เอกสารทาง man caffeinate

-s สร้างการยืนยันเพื่อป้องกันไม่ให้ระบบจากการนอนหลับ การยืนยันนี้จะใช้ได้เฉพาะเมื่อระบบทำงานบนไฟ AC

มองหาทางเลือกพื้นเมืองInsomniaXหรือNoSleep

ฟีเจอร์ไทม์เอาต์เป็นสิ่งจำเป็นเพื่อที่ฉันจะได้หลีกเลี่ยงการบรรจุแมคบุ๊กที่ไม่ตายของฉันลงในกระเป๋าโดยไม่ตั้งใจทำให้เกิดความร้อนจัด ( caffeinate -t, ระบุค่าการหมดเวลาเป็นวินาที)


ฉันกลัวไม่มีพื้นเมืองทางเลือกที่เป็น MacBook ควรจะไปนอนเมื่อคุณปิดมัน : - /
Asmus

2
เดินไปรอบ ๆ กับ MacBook เป็นว่าทำไมฉันยังต้องการโซลูชั่นสำหรับการป้องกันการนอนหลับเมื่อฝาปิดให้บริการ
theonlygusti

คุณลองตัวเลือก-tแล้วcaffeinate -t 3600ใช่ไหม ตามประสบการณ์ของฉันมันใช้งานได้แม้ว่า macbook จะทำงานโดยใช้แบตเตอรี่
Qiang Xu

ขอขอบคุณสำหรับข้อเสนอแนะไม่สามารถทำงานได้ในความพยายามครั้งแรก ฉันพลาดอะไรไปรึเปล่า? ผ่านการทดสอบ 1) caffeinate -t 36002) ปิดแล็ปท็อป 3) รอ 5 วินาที 4) เปิดแล็ปท็อปเพื่อค้นหาหน้าจอเข้าสู่ระบบและตัดการเชื่อมต่อบริการเครือข่าย
ที่นี่

@ ที่ฉันไม่ได้พยายามปิดฝาแม้ว่า ฉันเพิ่งรันคำสั่งพร้อม-tตัวเลือกเมื่อ macbook ของฉันใช้แบตเตอรีและไม่เข้าสู่โหมดสลีป ฉันไม่ได้ลองปิดฝา แต่ดูเหมือนว่า macbook จะถูกบังคับให้หลับทันทีที่คุณปิดฝา ขอโทษด้วยที่ฉันเข้าใจผิด ฉันคิดว่าคุณกำลังมองหาวิธีที่จะทำให้มันทำงานเมื่อมันใช้แบตเตอรี่เท่านั้นโดยไม่ต้องปิดฝา
Qiang Xu

คำตอบ:


37

มันไม่เหมาะ แต่นี่เป็นวิธีแก้ปัญหา เพื่อป้องกันไม่ให้แล็ปท็อปหลับเมื่อฝาปิดและคุณใช้พลังงานจากแบตเตอรี่ให้เรียกใช้คำสั่งต่อไปนี้:

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 เพื่อให้คุณสามารถกำหนดฮอตคีย์และสิ่งที่ไม่ต้องการ ฉันจะลองว่าถ้าฉันเบื่อที่จะเรียกใช้จากบรรทัดคำสั่ง


6
เย็น! ขอบคุณมาก! คำแนะนำ / การทำให้เข้าใจง่าย: ฉันไม่คิดว่าคุณต้องเปลี่ยนการsleepตั้งค่า เพียงเปิดdisablesleepและปิด pmset -a disablesleep 1และpmset -a disablesleep 0ทำงานได้ดีสำหรับฉัน MacBook ของฉันไม่ต้องนอนเมื่อฉันปิดฝา การตั้งค่าอื่น ๆ ทั้งหมดยังคงเหมือนเดิม
jcsahnwaldt

ผู้ใช้ Github iccir ได้สร้างแอพฟรีที่เรียกว่า Fermata ซึ่งใช้เคล็ดลับนี้ภายใต้ประทุนและห่อมันอย่างสวยงามด้วยไอคอนแถบเมนูและตัวจับเวลา ฯลฯ ฉันเพิ่งลองใช้ Mojave (10.14.2) และมันใช้งานได้ดีสำหรับฉัน github.com/iccir/Fermata
Alex Ryan

5

ผู้ใช้ Github iccir ได้สร้างแอพ menubar เล็ก ๆ น้อย ๆ ที่มีประโยชน์เรียกว่า Fermata ซึ่งทำในสิ่งที่คุณต้องการอย่างแน่นอน: ทำให้ MacBook ตื่นขึ้นมาพร้อมกับปิดฝาและช่วยให้คุณตั้งเวลาหมดเวลา

ฉันแค่ลองใช้กับโมฮาวี (10.14.2) และมันก็ใช้ได้ดีสำหรับฉัน https://github.com/iccir/Fermata


5

ไม่มีวิธีการทำแบบดั้งเดิม นี่คือสิ่งที่ฉันได้รับหลังจากการค้นหาและทดลอง:

ป้อนคำอธิบายรูปภาพที่นี่

บันทึก:

  • ส่วนขยายเคอร์เนลของ Nosleep ไม่สามารถโหลดได้ใน High Sierra
  • SPI ส่วนตัวไม่ได้รับการรองรับโดย Apple หลังจาก High Sierra Fermataเปลี่ยนไปใช้pmsetวิธีการหลังจากรุ่น 1.1
  • คุณอาจต้องปิดการใช้งาน Gatekeeper เพื่อให้Insomniaทำงานได้ตามที่คาดไว้
  • แอพอื่น ๆ ที่ฉันพยายามใช้ไม่ทำงานเมื่อปิดฝา

1

คุณลองแอพนี้หรือยัง ฉันคิดว่ามันมีประโยชน์มากสำหรับสิ่งที่คุณต้องการ

ฉันค่อนข้างแน่ใจว่ามันมีคุณสมบัติการหมดเวลาที่คุณตั้งค่าไว้ภายในการตั้งค่าของแอพ


6
ขอบคุณ @ mitchell-d คำถามคือการถามหาวิธีแก้ปัญหาพื้นเมืองโดยเฉพาะเช่นคาเฟอีน มีแอพอื่น ๆ ที่แนะนำในis-there-way-to-set-a-macbook-pro-to-not-sleep- เมื่อคุณปิดฝา อย่างไรก็ตามฉันลองแอพคาเฟอีนที่คุณแนะนำไม่ป้องกัน MacBook ของฉันจากการนอนหลับเมื่อฉันปิดฝา
ที่นี่
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.