To nie jest idealne, ale oto rozwiązanie. Aby zapobiec zasypianiu laptopa, gdy pokrywa jest zamknięta i pracujesz na baterii, uruchom następujące polecenia:
sudo pmset -b sleep 0; sudo pmset -b disablesleep 1
Aby ponownie włączyć tryb uśpienia laptopa, gdy pokrywa jest zamknięta i pracujesz na baterii, uruchom następujące polecenia:
sudo pmset -b sleep 5; sudo pmset -b disablesleep 0
„5” w drugim zestawie poleceń reprezentuje liczbę minut przed snem na baterii; dostosuj odpowiednio do swojego laptopa.
Jest to trochę niebezpieczne, ponieważ jeśli zapomnisz ponownie włączyć ustawienia, laptop nigdy nie będzie spał na baterii. Z tego powodu napisałem skrypt powłoki, aby automatycznie ponownie włączyć ustawienia:
#!/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
Skrypt powłoki wyłączy tryb uśpienia, dopóki nie naciśniesz Enterklawisza, w którym to momencie ponownie włączy ustawienia uśpienia (alternatywnie możesz nacisnąć Ctrl- Ci osiągnąć to samo). Ustawi także limit czasu (domyślnie 300 sekund / 5 minut), po którym ustawienia uśpienia zostaną automatycznie ponownie włączone, a laptop zostanie zmuszony do przejścia w tryb uśpienia. Chociaż byłoby to uciążliwe, jeśli używasz laptopa na spotkaniu, uratuje życie, jeśli zapomnisz i włożysz laptopa do torby, aby wrócić do domu.
Bystrzy czytelnicy zauważą, że te polecenia wymagają sudo
; niestety to nieuniknione AFAIK. To, co zrobiłem w moim systemie, polega na tym, aby nie musiałem wpisywać hasła, aby uruchomić się pmset
jako root. Aby to zrobić, edytuj sudoers
plik ( sudo visudo
) i dodaj ten wiersz:
joe ALL=(ALL) NOPASSWD: /usr/bin/pmset
zastępując „joe” twoją nazwą użytkownika. Prawdopodobnie mógłbyś osiągnąć ten sam wynik (tj. Uruchomić skrypt bez konieczności wprowadzania hasła), uruchamiając skrypt powłoki SETUID, ale nie lubię tego; otwarcie tego jednego polecenia przez sudoers wydaje mi się mniej ryzykowne.
Aby uruchomić skrypt, umieść go w katalogu na swoim PATH
i wywołaj jako:
noz [<timeout in seconds>]
Gdy dotrzesz do celu, po prostu naciśnij Enterlub Ctrl- Ci możesz już iść. A jeśli o tym zapomnisz, automatycznie zresetuje się i przejdzie w tryb uśpienia.
Prawdopodobnie istnieje sposób, aby to wszystko osiągnąć za pomocą AppleScript, dzięki czemu można następnie przypisać mu skrót klawiszowy, a co nie; Spróbuję tego, jeśli będę zmęczony uruchamianiem tego z wiersza poleceń.