Verwenden Sie Koffein, um zu verhindern, dass die Batterie im geschlossenen Zustand schläft

41

Das native caffeinateDienstprogramm verhindert nicht, dass mein MacBook beim Schließen des Bildschirms in den Ruhezustand wechselt. Stattdessen wird das System in den Energiesparmodus versetzt und verschiedene Netzwerkdienste (VPN, Bildschirmfreigaben, VOIP-Anrufe, Messaging-Clients, Dateiübertragungen) schlagen fehl, während ich in weniger als 5 Minuten vom Schreibtisch zu meinem Meeting gehe .

Das Herumlaufen mit halb geöffnetem Laptopdeckel erschwert das sichere Tragen mit meinem Kaffee und ist ausgesprochen ungekühlt.

Das native caffeinateDienstprogramm wurde entwickelt, um dies als benutzerfreundlichen Ersatz für zu behandeln pmset, scheint jedoch so zu funktionieren, dass es nicht funktioniert, wenn es vom Stromnetz getrennt wird.

Dokumente über man caffeinate

-s Erstellt eine Assertion, um den Ruhezustand des Systems zu verhindern. Diese Behauptung ist nur gültig, wenn das System mit Wechselstrom betrieben wird .

Auf der Suche nach einer nativen Alternative zu InsomniaX oder Nosleep .

Eine Timeout-Funktion ist unerlässlich, damit ich mein untotes Macbook nicht versehentlich in eine Tasche stopfe, was zu einem heißen Durcheinander führt. ( caffeinate -tGibt das Zeitlimit in Sekunden an.)

Hier
quelle
Ich fürchte, es gibt keine native Alternative, da ein MacBook in den Ruhezustand versetzt werden soll, wenn Sie es schließen. : - /
Asmus
2
Genau aus diesem Grund möchte ich mit dem MacBook eine Lösung finden, um den Schlaf bei geschlossenem Deckel zu verhindern.
theonlygusti
Hast du die Option probiert -t, wie caffeinate -t 3600? Nach meiner Erfahrung funktioniert es auch, wenn das MacBook mit Akku betrieben wird.
Qiang Xu
Danke für den Vorschlag, hat bei ersten Versuchen nicht funktioniert. Vermisse ich etwas? Getestet 1) caffeinate -t 36002) Laptop schließen 3) 5s warten 4) Laptop öffnen, um Anmeldebildschirm und getrennte Netzwerkdienste zu finden.
hier
@hier habe ich aber nicht versucht den deckel zu schliessen. Ich habe den Befehl nur mit der -tOption ausgeführt, wenn mein MacBook über eine Batterie verfügt und nicht in den Ruhezustand gegangen ist. Ich habe es nicht mit geschlossenem Deckel versucht, aber es sieht so aus, als ob das MacBook zum Einschlafen gezwungen wird, sobald Sie den Deckel schließen. Entschuldigung für mein Missverständnis. Ich dachte, Sie suchen nach einer Möglichkeit, dies zu erreichen, wenn es nur mit Batterie betrieben wird, ohne dass der Deckel geschlossen ist.
Qiang Xu

Antworten:

37

Es ist nicht ideal, aber hier ist eine Lösung. Führen Sie die folgenden Befehle aus, um zu verhindern, dass der Laptop bei geschlossenem Deckel und Akkubetrieb in den Ruhezustand wechselt:

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

Führen Sie die folgenden Befehle aus, um den Ruhezustand des Laptops bei geschlossenem Deckel und Akkubetrieb wieder zu aktivieren:

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

Die "5" im zweiten Befehlssatz gibt die Anzahl der Minuten vor dem Einschlafen im Akkubetrieb an. Passen Sie die Einstellungen für Ihren Laptop an.

Dies ist etwas gefährlich, da der Laptop im Akkubetrieb niemals in den Ruhezustand versetzt wird, wenn Sie vergessen, die Einstellungen erneut zu aktivieren. Aus diesem Grund habe ich ein Shell-Skript geschrieben, um die Einstellungen automatisch wieder zu aktivieren:

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

Das Shell-Skript deaktiviert den Energiesparmodus, bis Sie die EnterTaste drücken. An diesem Punkt werden die Energiesparmodus-Einstellungen wieder aktiviert (alternativ können Sie auch drücken Ctrl- Cund dasselbe erreichen). Außerdem wird eine Zeitüberschreitung festgelegt (standardmäßig 300 Sekunden / 5 Minuten), nach deren Ablauf die Einstellungen für den Ruhezustand automatisch wieder aktiviert werden und der Laptop gezwungen wird, in den Ruhezustand zu wechseln. Wenn Sie Ihren Laptop in einer Besprechung verwenden, ist dies zwar schmerzhaft, aber es ist lebensrettend, wenn Sie vergessen haben, Ihren Laptop nach Hause mitzunehmen, und ihn in Ihre Tasche stecken.

Erfahrene Leser werden feststellen, dass diese Befehle erforderlich sind sudo. Leider ist das unvermeidlich, AFAIK. Was ich auf meinem System getan habe, ist, es so zu machen, dass ich mein Passwort nicht eingeben muss, um pmsetals root zu laufen . Bearbeiten Sie dazu die sudoersDatei ( sudo visudo) und fügen Sie diese Zeile hinzu:

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

Ersetzen Sie "Joe" durch Ihren Benutzernamen. Sie könnten wahrscheinlich dasselbe Ergebnis erzielen (dh das Skript ausführen, ohne dass Sie Ihr Kennwort eingeben müssen), indem Sie das Shell-Skript SETUID ausführen, aber das gefällt mir nicht. Das Öffnen dieses einen Befehls über Sudoer scheint mir weniger riskant zu sein.

Um das Skript auszuführen, kleben Sie es in ein Verzeichnis auf Ihrem PATHComputer und rufen es als solches auf:

noz [<timeout in seconds>]

Wenn Sie dort ankommen, wo Sie hin wollen, drücken Sie einfach Enteroder Ctrl- Cund schon können Sie loslegen. Und wenn Sie es vergessen, wird es automatisch zurückgesetzt und in den Ruhezustand versetzt.

Es gibt wahrscheinlich eine Möglichkeit, dies alles über AppleScript zu erreichen, sodass Sie ihm einen Hotkey zuweisen können und was nicht. Ich werde es versuchen, wenn ich es jemals müde werde, dies von der Kommandozeile aus auszuführen.

Joe Casadonte
quelle
6
Cool! Vielen Dank! Ein Vorschlag / eine Vereinfachung: Ich glaube nicht, dass Sie die sleepEinstellung ändern müssen . Einfach ein- disablesleepund ausschalten. pmset -a disablesleep 1und pmset -a disablesleep 0gut für mich arbeiten. Mein MacBook muss nicht schlafen, wenn ich den Deckel schließe. Alle anderen Einstellungen bleiben unverändert.
jcsahnwaldt
Github-Benutzer iccir hat eine kostenlose App namens Fermata erstellt, die diesen Trick unter der Haube ausführt und mit einem Menüleisten-Symbol, einem Timer usw. kombiniert. github.com/iccir/Fermata
Alex Ryan
5

Github-Benutzer iccir hat eine sehr praktische kleine kostenlose Menüleisten-App namens Fermata erstellt, die genau das tut, was Sie möchten: Sie können ein MacBook bei geschlossenem Deckel wach halten und eine Zeitüberschreitungsdauer festlegen.

Ich habe es gerade auf Mojave (10.14.2) ausprobiert und es hat für mich großartig funktioniert. https://github.com/iccir/Fermata

Alex Ryan
quelle
5

Es gibt keine native Möglichkeit, dies zu tun. Folgendes habe ich nach einigen Recherchen und Versuchen erhalten:

Bildbeschreibung hier eingeben

Hinweis:

  • Nosleeps Kernel-Erweiterung konnte in High Sierra nicht geladen werden
  • Das private SPI wird von Apple nach High Sierra NICHT unterstützt. Fermata hatpmset nach Version 1.1 auf die Methode umgestellt
  • Möglicherweise müssen Sie Gatekeeper deaktivieren, damit Insomnia wie erwartet funktioniert.
  • Die anderen Apps, die ich ausprobiert habe, funktionieren nicht mit geschlossenem Deckel
Simba
quelle
1

Hast du diese App ausprobiert ? Ich finde es sehr nützlich für genau das, was Sie suchen.

Ich bin mir ziemlich sicher, dass es eine Timeout-Funktion gibt, die Sie in den Einstellungen der App festgelegt haben.

Mitchell D
quelle
6
Danke @ Mitchell-d. Die Frage ist speziell nach einer nativen Lösung wie Koffein gefragt. Es gibt noch andere Apps, die in " Gibt es eine Möglichkeit, ein MacBook-Pro so einzustellen, dass es nicht schläft, wenn Sie den Deckel schließen" vorgeschlagen werden. Trotzdem habe ich die Koffein- App ausprobiert, die Sie empfehlen nicht verhindern, dass mein MacBook beim Schließen des Deckels schläft.
hier