Não é o ideal, mas aqui está uma solução. Para impedir que o laptop durma quando a tampa estiver fechada e você estiver usando a bateria, execute os seguintes comandos:
sudo pmset -b sleep 0; sudo pmset -b disablesleep 1
Para reativar o laptop em suspensão quando a tampa estiver fechada e você estiver usando a 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 estiver 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 com a bateria. Por isso, 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 script do shell desativará Entero modo de suspensão até que você pressione a tecla; nesse momento, ele reativará as configurações de suspensão (como alternativa, você pode pressionar Ctrl- Ce 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 dormir. Embora isso seja doloroso se você estiver usando o laptop em uma reunião, será um salva-vidas se você esquecer e colocar o laptop na bolsa para ir para casa.
Os leitores astutos notarão que esses comandos exigem sudo
; infelizmente, isso é inevitável AFAIK. O que fiz no meu sistema é torná-lo para que não precise digitar minha senha para executar pmset
como root. Para fazer isso, edite o sudoers
arquivo ( sudo visudo
) e adicione esta linha:
joe ALL=(ALL) NOPASSWD: /usr/bin/pmset
substituindo "joe" pelo seu nome de usuário. Você provavelmente poderia alcançar o mesmo resultado (ou seja, executando o script sem precisar digitar sua senha) executando o shell script SETUID, mas não gosto disso; abrir esse comando por meio de sudoers parece menos arriscado para mim.
Para executar o script, cole-o em um diretório no seu PATH
e chame-o da seguinte maneira:
noz [<timeout in seconds>]
Quando você chegar aonde está indo, basta pressionar Enterou Ctrl- Ce você está pronto para ir. E se você esquecer, ele será redefinido automaticamente e entrará em suspensão.
Provavelmente existe uma maneira de conseguir tudo isso via AppleScript, para que você possa atribuir uma tecla de atalho e o que não; Vou tentar isso se me cansar de executar isso na linha de comando.