Ini tidak ideal, tetapi inilah solusinya. Untuk mencegah laptop dari tidur ketika tutupnya ditutup dan Anda menggunakan baterai, jalankan perintah berikut:
sudo pmset -b sleep 0; sudo pmset -b disablesleep 1
Untuk mengaktifkan kembali laptop tidur ketika tutupnya ditutup dan Anda menggunakan baterai, jalankan perintah berikut:
sudo pmset -b sleep 5; sudo pmset -b disablesleep 0
"5" pada set perintah kedua mewakili jumlah menit sebelum tidur ketika menggunakan baterai; sesuaikan yang diinginkan untuk laptop Anda.
Ini agak berbahaya, karena jika Anda lupa mengaktifkan kembali pengaturan Anda, laptop tidak akan pernah tidur ketika baterai. Karena itu, saya telah menulis skrip shell untuk secara otomatis mengaktifkan kembali pengaturan:
#!/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
Script shell akan menonaktifkan Entersleep sampai Anda menekan tombol, pada titik itu ia akan mengaktifkan kembali pengaturan sleep (secara bergantian, Anda dapat menekan Ctrl- Cdan mencapai hal yang sama). Ini juga akan menetapkan batas waktu (default menjadi 300 detik / 5 menit) setelah itu pengaturan tidur akan secara otomatis diaktifkan kembali, dan laptop akan dipaksa untuk tidur. Meskipun ini akan menyebalkan jika Anda menggunakan laptop Anda dalam rapat, itu akan menjadi penyelamat jika Anda lupa dan meletakkan laptop Anda di tas Anda untuk pulang.
Pembaca yang cerdik akan mencatat bahwa perintah ini memerlukan sudo
; Sayangnya, itu adalah AFAIK yang tak terhindarkan. Apa yang saya lakukan pada sistem saya adalah membuatnya sehingga saya tidak perlu memasukkan kata sandi saya untuk dijalankan pmset
sebagai root. Untuk melakukannya, edit sudoers
file ( sudo visudo
) dan tambahkan baris ini:
joe ALL=(ALL) NOPASSWD: /usr/bin/pmset
mengganti "joe" dengan nama pengguna Anda. Anda mungkin dapat mencapai hasil yang sama (yaitu menjalankan skrip tanpa harus memasukkan kata sandi Anda) dengan menjalankan skrip shell SETUID, tetapi saya tidak suka melakukan itu; membuka perintah yang satu ini melalui sudoers tampaknya kurang berisiko bagi saya.
Untuk menjalankan skrip, tempel di direktori pada Anda PATH
dan aktifkan seperti itu:
noz [<timeout in seconds>]
Saat Anda mencapai tujuan, tekan saja Enteratau Ctrl- Cdan Anda siap melakukannya. Dan jika Anda melupakannya, itu akan secara otomatis mengatur ulang dan tidur.
Mungkin ada cara untuk mencapai semua ini melalui AppleScript, sehingga Anda dapat menetapkan hot key dan yang tidak; Saya akan mencobanya jika saya bosan menjalankan ini dari baris perintah.