Use cafeína para evitar dormir en la tapa cerca de la batería

34

La utilidad caffeinate nativa no funciona para evitar que mi macbook esté inactiva cuando cierro la pantalla. En cambio, el sistema está inactivo y varios servicios de red (VPN, recursos compartidos de pantalla, llamadas de VOIP, clientes de mensajería, transferencias de archivos) fallan mientras yo camine desde mi escritorio hasta mi reunión en < 5 minutos.

Caminar con la tapa de la computadora portátil hasta la mitad abierta hace que sea difícil de transportar con seguridad con mi café, y es claramente uncool.

La utilidad nativa caffeinate está diseñada para manejar esto como un reemplazo fácil de usar para pmset , pero parece estar diseñado para no funcionar cuando está desconectado de la alimentación de CA.

Docs a través de man caffeinate

  

-s Crea una aserción para evitar que el sistema se duerma. Esta afirmación es válida solo cuando el sistema está ejecutándose con alimentación de CA .

Buscando una alternativa nativa a InsomniaX o dormimos .

Una función de tiempo de espera es esencial para evitar el relleno accidental de mi macbook no-muerto en una bolsa, lo que resulta en un desastre. ( caffeinate -t , especifica el valor de tiempo de espera en segundos)

    
pregunta here 16.12.2015 - 21:59

2 respuestas

30

No es ideal, pero aquí hay una solución. Para evitar que la computadora portátil entre en reposo cuando la tapa está cerrada y está funcionando con batería, ejecute los siguientes comandos:

sudo pmset -b sleep 0; sudo pmset -b disablesleep 1

Para volver a habilitar la computadora portátil cuando la tapa está cerrada y está funcionando con batería, ejecute los siguientes comandos:

sudo pmset -b sleep 5; sudo pmset -b disablesleep 0

El "5" en el segundo conjunto de comandos representa la cantidad de minutos antes de dormir cuando está en la batería; Ajústelo como desee para su computadora portátil.

Esto es un poco peligroso, ya que si olvida volver a habilitar la configuración, la computadora portátil nunca se apagará cuando esté en la batería. Debido a esto, he escrito un script de shell para volver a habilitar automáticamente la configuración:

#!/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

El script de shell deshabilitará el modo de espera hasta que presione la tecla Ingresar , momento en el que volverá a habilitar la configuración de suspensión (alternativamente, puede presionar Ctrl - < kbd> C y lograr lo mismo). También establecerá un tiempo de espera (predeterminado en 300 segundos / 5 minutos) después de lo cual los ajustes de suspensión se volverán a habilitar automáticamente y la computadora portátil se verá obligada a ir a la suspensión. Si bien esto sería una molestia si utilizas tu computadora portátil en una reunión, será un salvavidas si te olvidas y guardas tu computadora portátil en tu bolsa para ir a casa.

Los lectores astutos notarán que estos comandos requieren sudo ; Lamentablemente, eso es inevitable AFAIK. Lo que he hecho en mi sistema es hacer que no tenga que ingresar mi contraseña para ejecutar pmset como root. Para hacerlo, edite el archivo sudoers ( sudo visudo ) y agregue esta línea:

joe ALL=(ALL) NOPASSWD: /usr/bin/pmset

reemplazando "joe" con tu nombre de usuario. Probablemente podría lograr el mismo resultado (es decir, ejecutar el script sin tener que ingresar su contraseña) ejecutando el script de shell SETUID, pero no me gusta hacerlo; abrir este comando a través de sudoers me parece menos riesgoso.

Para ejecutar el script, péguelo en un directorio en su PATH e invóquelo como tal:

noz [<timeout in seconds>]

Cuando llegues a donde vas, simplemente presiona Ingresar o Ctrl - C y listo. Y si lo olvidas, se restablecerá y se suspenderá automáticamente.

Probablemente haya una forma de lograr todo esto a través de AppleScript, de modo que luego pueda asignarle una tecla de acceso rápido y cuáles no; Intentaré eso si alguna vez me canso de ejecutar esto desde la línea de comandos.

    
respondido por el Joe Casadonte 29.01.2017 - 21:03
1

¿Has probado esta aplicación ? Me parece muy útil para lo que buscas.

Estoy bastante seguro de que tiene una función de tiempo de espera que establece dentro de la configuración de la aplicación.

    
respondido por el Mitchell D 16.12.2015 - 22:45

Lea otras preguntas en las etiquetas