Usa caffeinato per evitare di dormire sul coperchio vicino alla batteria


41

L' caffeinateutilità nativa non funziona per impedire la sospensione del mio macbook quando chiudo il display. Invece, il sistema dorme e vari servizi di rete (VPN, schermate, chiamate VOIP, client di messaggistica, trasferimenti di file) falliscono mentre cammino dalla mia scrivania alla riunione in <5 minuti.

Camminare con il coperchio del computer portatile semiaperto rende difficile portare con sé il mio caffè in sicurezza ed è decisamente non freddo.

L' caffeinateutilità nativa è progettata per gestirla come una sostituzione user-friendly per pmset, ma sembra progettata per non funzionare quando è scollegata dall'alimentazione CA.

Documenti via man caffeinate

-s Crea un'asserzione per impedire al sistema di dormire. Questa affermazione è valida solo quando il sistema è alimentato a corrente alternata .

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

Una funzione di timeout è essenziale in modo da evitare di inserire accidentalmente il mio macbook non morti in una borsa, causando un disastro caldo. ( caffeinate -t, specifica il valore di timeout in secondi)


Temo che non ci siano alternative native , dato che un MacBook dovrebbe andare a dormire quando lo chiudi. : - /
Asmus

2
Andare in giro con MacBook è esattamente il motivo per cui voglio anche una soluzione per prevenire il sonno quando il coperchio è chiuso.
theonlygusti,

Hai provato l'opzione -t, come caffeinate -t 3600? Secondo la mia esperienza, funziona anche se il macbook funziona a batteria.
Qiang Xu

Grazie per il suggerimento, non ha funzionato sui tentativi iniziali. Mi sto perdendo qualcosa? Testato 1) caffeinate -t 36002) Chiudi laptop 3) Attendi 5 secondi 4) Apri laptop per trovare la schermata di accesso e i servizi di rete disconnessi.
qui

@qui, però, non ho provato a chiudere il coperchio. Ho appena eseguito il comando con l' -topzione quando il mio macbook è a batteria e non è andato a dormire. Non ho provato con il coperchio chiuso, ma sembra che il macbook sarà costretto a dormire non appena si chiude il coperchio. Ci scusiamo per il mio malinteso. Stavo pensando che stavi cercando un modo per farlo funzionare solo a batteria, senza il coperchio chiuso.
Qiang Xu

Risposte:


37

Non è l'ideale, ma ecco una soluzione. Per evitare che il laptop dorma quando il coperchio è chiuso e si utilizza la batteria, eseguire i comandi seguenti:

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

Per riattivare la sospensione del laptop quando il coperchio è chiuso e la batteria è in esecuzione, eseguire i comandi seguenti:

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 è a batteria; regolare come desiderato per il tuo laptop.

Questo è un po 'pericoloso, poiché se si dimentica di riattivare le impostazioni, il laptop non dormirà mai quando è a 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 Enterpreme il tasto, a quel punto riattiverà le impostazioni di sospensione (in alternativa, è possibile premere Ctrl- Ce ottenere la stessa cosa). Inoltre imposterà un timeout (il valore predefinito è 300 secondi / 5 minuti) dopo il quale le impostazioni di sospensione verranno automaticamente riattivate e il laptop sarà costretto a dormire. Anche se questo sarebbe un dolore se stai usando il tuo laptop in una riunione, sarà un vero toccasana se ti dimenticassi e mettessi il laptop nella borsa per tornare a casa.

I lettori astuti noteranno che questi comandi richiedono sudo; purtroppo, è inevitabile AFAIK. Quello che ho fatto sul mio sistema è farlo in modo da non dover inserire la mia password per funzionare pmsetcome root. Per fare ciò, modifica il sudoersfile ( 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 (ovvero eseguire lo script senza inserire la password) eseguendo lo script shell SETUID, ma non mi piace farlo; l'apertura di questo comando tramite sudoer mi sembra meno rischiosa.

Per eseguire lo script, incollalo in una directory sul tuo PATHe invocalo come tale:

noz [<timeout in seconds>]

Quando arrivi a dove stai andando, premi semplicemente Entero Ctrl- Ce sei a posto. E se te ne dimentichi, si ripristinerà e dormirà automaticamente.

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


6
Freddo! Molte grazie! Un suggerimento / semplificazione: non credo che sia necessario modificare l' sleepimpostazione. Basta accendere disablesleepe spegnere. pmset -a disablesleep 1e pmset -a disablesleep 0funziona bene per me. Il mio MacBook non riesce a dormire quando chiudo il coperchio. Tutte le altre impostazioni rimangono le stesse.
jcsahnwaldt dice GoFundMonica

L'utente di Github iccir ha realizzato un'app gratuita chiamata Fermata che utilizza questo trucco sotto il cofano e lo avvolge bene con un'icona della barra dei menu e un timer, ecc. L'ho appena provato su Mojave (10.14.2) e ha funzionato benissimo per me. github.com/iccir/Fermata
Alex Ryan,

5

L'utente di Github iccir ha creato una piccola e gratuita app per la barra dei menu chiamata Fermata che fa esattamente quello che vuoi: tiene sveglio un MacBook 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. https://github.com/iccir/Fermata


5

Non esiste un modo nativo per farlo. Ecco cosa ho ottenuto dopo alcune ricerche e prove:

inserisci qui la descrizione dell'immagine

Nota:

  • L'estensione del kernel di Nosleep non è stata caricata su High Sierra
  • La SPI privata NON è supportata da Apple dopo High Sierra. Fermata è passata al pmsetmetodo dopo la versione 1.1
  • Potrebbe essere necessario disabilitare Gatekeeper per consentire a Insomnia di funzionare come previsto.
  • Le altre app che ho provato non funzionano con il coperchio chiuso

1

Hai provato questa applicazione ? Lo trovo molto utile esattamente per quello che stai cercando.

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


6
Grazie @ mitchell-d. La domanda è in particolare quella di chiedere una soluzione nativa, come il caffeinato. Ci sono altre app suggerite in -c'è-un-modo-di-impostare-un-macbook-pro-per-non-dormire-quando-chiudi-il-coperchio Tuttavia, ho provato l' app di caffeina che mi consiglia di fare non impedire al mio macbook di dormire quando chiudo il coperchio.
qui il
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.