Non è l'ideale, ma ecco una soluzione. Per evitare che il portatile dorme quando il coperchio è chiuso e stai utilizzando la batteria, esegui i seguenti comandi:
sudo pmset -b sleep 0; sudo pmset -b disablesleep 1
Per riattivare il laptop che dorme quando il coperchio è chiuso e stai utilizzando la batteria, esegui i seguenti comandi:
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 è in batteria; regolare come desiderato per il laptop.
Questo è un po 'pericoloso, dal momento che se ti dimentichi di riattivare le tue impostazioni, il portatile non dormirà mai quando è in 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 preme il tasto Invio , a quel punto riattiverà le impostazioni di sospensione (alternativamente, puoi premere Ctrl - < kbd> C e ottenere la stessa cosa). Inoltre, imposterà un timeout (predefinito a 300 secondi / 5 minuti) dopo il quale le impostazioni di sospensione verranno riabilitate automaticamente e il laptop sarà costretto ad andare a dormire. Anche se questo sarebbe un problema se utilizzi il tuo portatile in una riunione, sarà un vero toccasana se ti dimentichi e metti il tuo laptop nella borsa per andare a casa.
I lettori di Astute noteranno che questi comandi richiedono sudo
; purtroppo, questo è inevitabile AFAIK. Quello che ho fatto sul mio sistema è di farlo in modo che non debba inserire la mia password per eseguire pmset
come root. Per farlo, modifica il file sudoers
( 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 (cioè eseguire lo script senza dover inserire la tua password) eseguendo lo script di shell SETUID, ma non mi piace farlo; aprire questo comando tramite sudoers mi sembra meno rischioso.
Per eseguire lo script, incollalo in una directory su PATH
e invocalo come tale:
noz [<timeout in seconds>]
Quando arrivi a dove stai andando, premi semplicemente Invio o Ctrl - C e sei a posto. E se te ne dimentichi, si resetterà e dormirà automaticamente.
Probabilmente c'è un modo per ottenere tutto questo tramite AppleScript, in modo che tu possa quindi assegnargli un tasto di scelta rapida e cosa no; Ci proverò se mai mi stanco di eseguirlo dalla riga di comando.