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 pmset
como root. Para hacer eso, edite el sudoers
archivo ( 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 PATH
e 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.