Mantenha o MacBook rodando com a tampa fechada por um período especificado

2

Ocasionalmente, é útil deixar um MacBook funcionando por uma hora ou mais para concluir atualizações ou fazer uma análise demorada de dados no final do dia. Gostaria de poder fechar a tampa do MacBook ou desligar a tela para evitar a poluição luminosa desnecessária.

Já usei anteriormente dois aplicativos, Caffeine e NoSleep, para manter um MacBook acordado.

  • A cafeína permite que você especifique uma duração para manter o MacBook acordado, mas fechar a tampa coloca o laptop em suspensão.
  • NoSleep permite fechar a tampa do laptop (que desliga a tela, mantendo qualquer processo em execução), mas não é possível especificar uma duração de tempo limite.

Estou procurando uma solução que permita ao usuário fechar a tampa e especificar uma duração de tempo limite. Eu não quero deixar o laptop funcionando a noite toda; geralmente apenas 30 minutos a uma hora.

Alguma solução?

    
por CaptainProg 26.12.2015 / 11:56

3 respostas

5

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.

    
por 29.01.2017 / 21:04
0

O NoSleep foi, supostamente, projetado para funcionar com as configurações de suspensão padrão do OSX (encontradas aqui . O NoSleep é apenas deveria evitar que o sono ocorra ao fechar a tampa (pelo menos, isso é como foi projetado ).

Se esse comportamento não estiver ocorrendo, a única maneira oficial de fechar a tampa sem dormir é conectar um dispositivo externo mouse, teclado e monitor .

    
por 26.12.2015 / 12:39
-1

O aplicativo Amphetamine pode fazer isso agora. Ele inclui todos os tipos de acionadores, incluindo aplicativos em execução ou quantidades de tempo especificadas, portanto, ele deve cobrir o caso de uso original.

    
por 30.09.2016 / 14:13