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.