Gunakan kafein untuk mencegah tidur pada tutup tutup pada baterai

41

caffeinateUtilitas asli tidak berfungsi untuk mencegah macbook saya tidur ketika saya menutup layar. Sebagai gantinya, sistem tidur dan berbagai layanan jaringan (VPN, tangkapan layar, panggilan VOIP, klien pengiriman pesan, transfer file) gagal sementara saya berjalan dari meja saya ke pertemuan saya dalam waktu <5 menit.

Berjalan dengan tutup laptop setengah terbuka membuat sulit untuk membawa kopi saya dengan aman, dan jelas tidak keren.

caffeinateUtilitas asli dirancang untuk menangani ini sebagai pengganti yang ramah pengguna pmset, tetapi tampaknya dirancang untuk tidak bekerja ketika terputus dari daya AC.

Documents via man caffeinate

-s Buat pernyataan untuk mencegah sistem tidur. Pernyataan ini hanya valid ketika sistem beroperasi dengan daya AC .

Mencari alternatif asli untuk InsomniaX atau tidak tidur .

Fitur batas waktu sangat penting agar saya tidak sengaja memasukkan macbook mayat hidup saya ke dalam tas, menghasilkan kekacauan yang panas. ( caffeinate -t, menentukan nilai batas waktu dalam detik)

sini
sumber
Saya khawatir tidak ada alternatif asli , karena MacBook seharusnya tidur ketika Anda menutupnya. : - /
Asmus
2
Berjalan-jalan dengan MacBook persis mengapa saya juga menginginkan solusi untuk mencegah tidur ketika tutupnya ditutup.
theonlygusti
Apakah Anda mencoba opsi -t, suka caffeinate -t 3600? Menurut pengalaman saya, itu berfungsi bahkan jika macbook berjalan dengan baterai.
Qiang Xu
Terima kasih atas sarannya, tidak berhasil pada upaya awal. Apakah saya melewatkan sesuatu? Diuji 1) caffeinate -t 36002) Tutup laptop 3) Tunggu 5s 4) Buka laptop untuk menemukan layar masuk dan layanan jaringan terputus.
sini
@di sini saya tidak mencoba untuk menutup tutupnya. Saya hanya menjalankan perintah dengan -topsi ketika macbook saya menggunakan baterai, dan itu tidak tertidur. Saya belum mencoba dengan tutupnya tertutup, tetapi kelihatannya macbook akan dipaksa untuk tidur segera setelah Anda menutup tutupnya. Maaf atas kesalahpahaman saya. Saya pikir Anda sedang mencari cara untuk membuatnya bekerja ketika hanya menggunakan baterai, tanpa tutupnya ditutup.
Qiang Xu

Jawaban:

37

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 pmsetsebagai root. Untuk melakukannya, edit sudoersfile ( 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 PATHdan 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.

Joe Casadonte
sumber
6
Keren! Terima kasih banyak! Saran / penyederhanaan: Saya rasa Anda tidak perlu mengubah sleeppengaturan. Nyalakan disablesleepdan matikan saja. pmset -a disablesleep 1dan pmset -a disablesleep 0bekerja dengan baik untukku. MacBook saya tidak bisa tidur ketika saya menutup tutupnya. Semua pengaturan lain tetap sama.
jcsahnwaldt mengatakan GoFundMonica
Pengguna iccir dari Github telah membuat aplikasi gratis bernama Fermata yang menggunakan trik ini di bawah tenda dan membungkusnya dengan baik dengan ikon menubar dan timer, dll. Saya hanya mencobanya di Mojave (10.14.2) dan itu bekerja dengan baik untuk saya. github.com/iccir/Fermata
Alex Ryan
5

Pengguna Github iccir telah membuat aplikasi menubar gratis kecil yang sangat berguna bernama Fermata yang melakukan apa yang Anda inginkan: membuat MacBook tetap terjaga dengan tutupnya tertutup, dan memungkinkan Anda untuk mengatur durasi waktu tunggu.

Saya baru mencobanya di Mojave (10.14.2) dan itu berhasil untuk saya. https://github.com/iccir/Fermata

Alex Ryan
sumber
5

Tidak ada cara asli untuk melakukannya. Inilah yang saya dapatkan setelah beberapa pencarian dan uji coba:

masukkan deskripsi gambar di sini

catatan:

  • Ekstensi kernel Nosleep gagal dimuat pada High Sierra
  • SPI pribadi TIDAK didukung oleh Apple setelah High Sierra. Fermata beralih ke pmsetmetode setelah versi 1.1
  • Anda mungkin perlu menonaktifkan Gatekeeper untuk membiarkan Insomnia berfungsi seperti yang diharapkan.
  • Aplikasi lain yang saya coba tidak berfungsi dengan tutupnya tertutup
Simba
sumber
1

Sudahkah Anda mencoba aplikasi ini ? Saya merasa sangat berguna untuk apa yang Anda cari.

Saya cukup yakin ia memiliki fitur batas waktu yang Anda atur dalam pengaturan aplikasi.

Mitchell D
sumber
6
Terima kasih @ mitchell-d. Pertanyaannya secara khusus meminta solusi asli, seperti kafein. Ada aplikasi lain yang disarankan di sana-ada-cara-untuk-mengatur-macbook-pro-untuk-tidak-tidur-ketika-Anda-tutup-tutup Namun, saya mencoba aplikasi kafein yang Anda rekomendasikan tidak tidak mencegah macbook saya dari tidur ketika saya menutup tutupnya.
sini