Não é ideal, mas aqui está uma solução. Para evitar que o laptop durma quando a tampa estiver fechada e você estiver usando bateria, execute os seguintes comandos:
sudo pmset -b sleep 0; sudo pmset -b disablesleep 1
Para reativar o laptop dormindo quando a tampa estiver fechada e você estiver usando bateria, execute os seguintes comandos:
sudo pmset -b sleep 5; sudo pmset -b disablesleep 0
O "5" no segundo conjunto de comandos representa o número de minutos antes de dormir quando na bateria; ajuste conforme desejado para o seu laptop.
Isso é um pouco perigoso, pois se você esquecer de reativar suas configurações, o laptop nunca irá dormir quando estiver na bateria. Por causa disso, eu escrevi um script de shell para reativar automaticamente as configurações:
#!/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
O shell script irá desabilitar o sono até você pressionar a tecla Enter , onde irá reativar as configurações de suspensão (alternadamente, você pode pressionar Ctrl - < kbd> C e conseguir a mesma coisa). Ele também definirá um tempo limite (o padrão é 300 segundos / 5 minutos) após o qual as configurações de suspensão serão reativadas automaticamente e o laptop será forçado a entrar no modo de suspensão. Enquanto isso seria uma dor se você estiver usando seu laptop em uma reunião, será um salva-vidas se você esqueceu e colocar seu laptop em sua bolsa para ir para casa.
Os leitores astutos observarão que esses comandos exigem sudo
; Infelizmente, isso é inevitável AFAIK. O que eu fiz no meu sistema é fazer com que eu não precise digitar minha senha para executar pmset
como root. Para fazer isso, edite o arquivo sudoers
( sudo visudo
) e adicione esta linha:
joe ALL=(ALL) NOPASSWD: /usr/bin/pmset
substituindo "joe" pelo seu nome de usuário. Você provavelmente poderia obter o mesmo resultado (ou seja, executar o script sem precisar digitar sua senha) executando o script de shell SETUID, mas eu não gosto de fazer isso; abrir esse comando via sudo parece ser menos arriscado para mim.
Para executar o script, coloque-o em um diretório no seu PATH
e invoque-o como tal:
$ noz [<timeout in seconds>]
Quando você chegar onde você está indo, simplesmente pressione Enter ou Ctrl - C e você está pronto para ir. E se você esquecer, ele será automaticamente redefinido e suspenso.
Provavelmente, existe uma maneira de obter tudo isso via AppleScript, para que você possa atribuir uma tecla de acesso e o que não; Vou tentar isso se eu ficar cansado de rodar isso na linha de comando.