Usa caffeinato per evitare di dormire sul coperchio vicino alla batteria

37

L'utility caffeinate nativa non funziona per impedire che il mio macbook si blocchi quando chiudo il display. Invece, il sistema dorme e vari servizi di rete (VPN, schermate, chiamate VOIP, client di messaggistica, trasferimenti di file) per fallire mentre I dalla mia scrivania alla riunione in < 5 minuti.

Camminare in giro con il coperchio del laptop semiaperto rende difficile il trasporto sicuro con il caffè, ed è decisamente non cool.

L'utility caffeinate nativa è progettata per gestire questo come sostituto user-friendly per pmset , ma sembra progettato per non funzionare quando disconnesso dall'alimentazione CA.

Documenti tramite man caffeinate

-s Create an assertion to prevent the system from sleeping. This assertion is valid only when system is running on AC power.

Alla ricerca di un'alternativa nativa a InsomniaX o nosleep .

Una funzionalità di timeout è essenziale per evitare di inserire accidentalmente il mio macbook non morto in un sacchetto, causando un pasticcio caldo. ( caffeinate -t , specifica il valore di timeout in secondi)

    
posta here 16.12.2015 - 21:59
fonte

3 risposte

32

Non è l'ideale, ma ecco una soluzione. Per evitare che il portatile dorme quando il coperchio è chiuso e stai utilizzando la batteria, esegui i seguenti comandi:

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

Per riattivare il laptop che dorme quando il coperchio è chiuso e stai utilizzando la batteria, esegui i seguenti comandi:

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

Il "5" nel secondo set di comandi rappresenta il numero di minuti prima di dormire quando è in batteria; regolare come desiderato per il laptop.

Questo è un po 'pericoloso, dal momento che se ti dimentichi di riattivare le tue impostazioni, il portatile non dormirà mai quando è in batteria. Per questo motivo, ho scritto uno script di shell per riattivare automaticamente le impostazioni:

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

Lo script della shell disabiliterà la sospensione fino a quando non si preme il tasto Invio , a quel punto riattiverà le impostazioni di sospensione (alternativamente, puoi premere Ctrl - < kbd> C e ottenere la stessa cosa). Inoltre, imposterà un timeout (predefinito a 300 secondi / 5 minuti) dopo il quale le impostazioni di sospensione verranno riabilitate automaticamente e il laptop sarà costretto ad andare a dormire. Anche se questo sarebbe un problema se utilizzi il tuo portatile in una riunione, sarà un vero toccasana se ti dimentichi e metti il tuo laptop nella borsa per andare a casa.

I lettori di Astute noteranno che questi comandi richiedono sudo ; purtroppo, questo è inevitabile AFAIK. Quello che ho fatto sul mio sistema è di farlo in modo che non debba inserire la mia password per eseguire pmset come root. Per farlo, modifica il file sudoers ( sudo visudo ) e aggiungi questa riga:

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

sostituendo "joe" con il tuo nome utente. Probabilmente potresti ottenere lo stesso risultato (cioè eseguire lo script senza dover inserire la tua password) eseguendo lo script di shell SETUID, ma non mi piace farlo; aprire questo comando tramite sudoers mi sembra meno rischioso.

Per eseguire lo script, incollalo in una directory su PATH e invocalo come tale:

noz [<timeout in seconds>]

Quando arrivi a dove stai andando, premi semplicemente Invio o Ctrl - C e sei a posto. E se te ne dimentichi, si resetterà e dormirà automaticamente.

Probabilmente c'è un modo per ottenere tutto questo tramite AppleScript, in modo che tu possa quindi assegnargli un tasto di scelta rapida e cosa no; Ci proverò se mai mi stanco di eseguirlo dalla riga di comando.

    
risposta data 29.01.2017 - 21:03
fonte
1

Hai provato questa app ? Trovo molto utile esattamente quello che stai cercando.

Sono abbastanza sicuro che abbia una funzione di timeout che imposti nelle impostazioni dell'app.

    
risposta data 16.12.2015 - 22:45
fonte
1

L'utente di Github iccir ha creato una piccola e utile app gratuita per menubarti chiamata Fermata che fa esattamente ciò che desideri: tieni un MacBook sveglio con il coperchio chiuso e ti consente di impostare una durata di timeout.

L'ho appena provato su Mojave (10.14.2) e ha funzionato benissimo per me. link

    
risposta data 31.12.2018 - 09:06
fonte

Leggi altre domande sui tag