Non è l'ideale, ma ecco una soluzione. Per evitare che il laptop dorma quando il coperchio è chiuso e si utilizza la batteria, eseguire i comandi seguenti:
sudo pmset -b sleep 0; sudo pmset -b disablesleep 1
Per riattivare la sospensione del laptop quando il coperchio è chiuso e la batteria è in esecuzione, eseguire i comandi seguenti:
sudo pmset -b sleep 5; sudo pmset -b disablesleep 0
Il "5" nel secondo set di comandi rappresenta il numero di minuti prima di dormire quando è a batteria; regolare come desiderato per il tuo laptop.
Questo è un po 'pericoloso, poiché se si dimentica di riattivare le impostazioni, il laptop non dormirà mai quando è a batteria. Per questo motivo, ho scritto uno script di shell per riattivare automaticamente le impostazioni:
#!/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
Lo script della shell disabiliterà la sospensione fino a quando non si Enterpreme il tasto, a quel punto riattiverà le impostazioni di sospensione (in alternativa, è possibile premere Ctrl- Ce ottenere la stessa cosa). Inoltre imposterà un timeout (il valore predefinito è 300 secondi / 5 minuti) dopo il quale le impostazioni di sospensione verranno automaticamente riattivate e il laptop sarà costretto a dormire. Anche se questo sarebbe un dolore se stai usando il tuo laptop in una riunione, sarà un vero toccasana se ti dimenticassi e mettessi il laptop nella borsa per tornare a casa.
I lettori astuti noteranno che questi comandi richiedono sudo
; purtroppo, è inevitabile AFAIK. Quello che ho fatto sul mio sistema è farlo in modo da non dover inserire la mia password per funzionare pmset
come root. Per fare ciò, modifica il sudoers
file ( sudo visudo
) e aggiungi questa riga:
joe ALL=(ALL) NOPASSWD: /usr/bin/pmset
sostituendo "joe" con il tuo nome utente. Probabilmente potresti ottenere lo stesso risultato (ovvero eseguire lo script senza inserire la password) eseguendo lo script shell SETUID, ma non mi piace farlo; l'apertura di questo comando tramite sudoer mi sembra meno rischiosa.
Per eseguire lo script, incollalo in una directory sul tuo PATH
e invocalo come tale:
noz [<timeout in seconds>]
Quando arrivi a dove stai andando, premi semplicemente Entero Ctrl- Ce sei a posto. E se te ne dimentichi, si ripristinerà e dormirà automaticamente.
C'è probabilmente un modo per ottenere tutto ciò tramite AppleScript, in modo che tu possa assegnargli un tasto di scelta rapida e cosa no; Ci proverò se mai mi stanco di eseguirlo dalla riga di comando.