Use cafeína para evitar que duerma con la tapa cerrada con la batería

41

La caffeinateutilidad nativa no funciona para evitar que mi Macbook se duerma cuando cierro la pantalla. En cambio, el sistema duerme y varios servicios de red (VPN, pantalla compartida, llamadas VOIP, clientes de mensajería, transferencias de archivos) fallan mientras camino desde mi escritorio a mi reunión en <5 minutos.

Caminar con la tapa de la computadora portátil entreabierta hace que sea difícil llevarla con seguridad con mi café, y es claramente poco cool.

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

Documentos vía man caffeinate

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

Buscando una alternativa nativa a InsomniaX o nosleep .

Una función de tiempo de espera es esencial para que evite meter accidentalmente mi MacBook No Muerto en una bolsa, lo que resulta en un desastre. ( caffeinate -t, especifica el valor de tiempo de espera en segundos)

aquí
fuente
Me temo que no hay una alternativa nativa , ya que se supone que un MacBook se va a dormir cuando lo cierras. : - /
Asmus
2
Caminar con MacBook es exactamente la razón por la que también quiero una solución para evitar dormir cuando la tapa está cerrada.
theonlygusti
¿Intentaste la opción -t, como caffeinate -t 3600? Según mi experiencia, funciona incluso si el macbook funciona con batería.
Qiang Xu
Gracias por la sugerencia, no funcionó en los intentos iniciales. ¿Me estoy perdiendo de algo? Probado 1) caffeinate -t 36002) Cerrar laptop 3) Esperar 5s 4) Abrir laptop para encontrar la pantalla de inicio de sesión y los servicios de red desconectados.
aquí el
@Aunque no intenté cerrar la tapa. Acabo de ejecutar el comando con -topción cuando mi macbook está con batería, y no se fue a dormir. No lo he intentado con la tapa cerrada, pero parece que el macbook se verá obligado a dormir tan pronto como cierre la tapa. Lo siento por mi mala interpretación. Estaba pensando que estabas buscando una manera de hacerlo funcionar solo con batería, sin la tapa cerrada.
Qiang Xu

Respuestas:

37

No es ideal, pero aquí hay una solución. Para evitar que la computadora portátil duerma cuando la tapa está cerrada y funciona 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 mientras 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 con batería; ajustar según lo deseado para su computadora portátil.

Esto es un poco peligroso, ya que si olvida volver a habilitar su configuración, la computadora portátil nunca dormirá cuando esté con 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

La secuencia de comandos shell desactivará dormir hasta llegar a la Enterllave, en cuyo punto se volverá a habilitar la configuración del sueño (alternativamente, se puede golpear Ctrl- Cy lograr la misma cosa). También establecerá un tiempo de espera (predeterminado en 300 segundos / 5 minutos) después del cual la configuración de suspensión se volverá a habilitar automáticamente y la computadora portátil se verá obligada a ir a dormir. Si bien esto sería una molestia si usa su computadora portátil en una reunión, será un salvavidas si olvida y guarda su computadora portátil en su bolso para irse 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 hacerlo para que no tenga que ingresar mi contraseña para ejecutar pmsetcomo root. Para hacer eso, edite el sudoersarchivo ( sudo visudo) y agregue esta línea:

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

reemplazando "joe" con su 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 arriesgado.

Para ejecutar el script, péguelo en un directorio en su PATHe invoque como tal:

noz [<timeout in seconds>]

Cuando llegues a donde vas, simplemente presiona Entero Ctrl, Cy estás listo para ir. Y si lo olvida, se reiniciará automáticamente y se suspenderá.

Probablemente haya una manera de lograr todo esto a través de AppleScript, para que luego pueda asignarle una tecla de acceso rápido y lo que no; Lo intentaré si alguna vez me canso de ejecutar esto desde la línea de comandos.

Joe Casadonte
fuente
66
¡Guay! ¡Muchas gracias! Una sugerencia / simplificación: no creo que necesite cambiar la sleepconfiguración. Solo enciende disablesleepy apaga. pmset -a disablesleep 1y pmset -a disablesleep 0funciona bien para mí Mi MacBook no se duerme cuando cierro la tapa. Todos los demás ajustes siguen siendo los mismos.
jcsahnwaldt dice GoFundMonica el
El usuario de Github iccir ha creado una aplicación gratuita llamada Fermata que utiliza este truco bajo el capó y lo envuelve muy bien con un icono de barra de menú y un temporizador, etc. Lo probé en Mojave (10.14.2) y funcionó muy bien para mí. github.com/iccir/Fermata
Alex Ryan
5

El usuario de Github iccir ha creado una pequeña y útil aplicación de barra de menú gratuita llamada Fermata que hace exactamente lo que desea: mantiene un MacBook despierto con la tapa cerrada y le permite establecer una duración de tiempo de espera.

Lo probé en Mojave (10.14.2) y funcionó muy bien para mí. https://github.com/iccir/Fermata

Alex Ryan
fuente
5

No hay una forma nativa de hacerlo. Esto es lo que obtuve después de algunas búsquedas y pruebas:

ingrese la descripción de la imagen aquí

Nota:

  • La extensión del núcleo de Nosleep no se pudo cargar en High Sierra
  • El SPI privado NO es compatible con Apple después de High Sierra. Fermata cambió al pmsetmétodo después de la versión 1.1
  • Es posible que deba desactivar Gatekeeper para permitir que Insomnia funcione como se espera.
  • Las otras aplicaciones que probé no funcionan con la tapa cerrada
Simba
fuente
1

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

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

Mitchell D
fuente
66
Gracias @ mitchell-d. La pregunta es específicamente pedir una solución nativa, como el cafeína. Hay otras aplicaciones sugeridas en is-there-any-way-to-set-a-macbook-pro-to-not-sleep-when-close-the-lid Sin embargo, probé la aplicación de cafeína que me recomiendan. No evite que mi MacBook duerma cuando cierre la tapa.
aquí el