カフェインを使用して、バッテリーの蓋を閉めたときの睡眠を防ぎます


41

ネイティブcaffeinateユーティリティは、ディスプレイを閉じたときにMacbookがスリープしないように機能しません。代わりに、システムがスリープ状態になり、さまざまなネットワークサービス(VPN、スクリーン共有、VOIP呼び出し、メッセージングクライアント、ファイル転送)が失敗し、デスクから会議まで 5分以内に歩きます。

ラップトップの蓋を半分開いた状態で歩き回ると、コーヒーを安全に持ち運ぶことが難しくなり、明らかに冷たくなります。

ネイティブcaffeinateユーティリティは、これをユーザーフレンドリーな代替として処理pmsetするように設計されていますが、AC電源から切断すると動作しないように設計されているようです。

経由のドキュメント man caffeinate

-sシステムがスリープしないようにアサーションを作成します。このアサーションは、システムがAC電源で実行されている場合にのみ有効です。

InsomniaXまたはnosleepのネイティブの代替を探しています。

タイムアウト機能は、アンデッドのMacBookを誤ってバッグに詰め込んで混乱を招くのを防ぐために不可欠です。(caffeinate -t、タイムアウト値を秒単位で指定します)


MacBookは閉じるとスリープ状態になるので、ネイティブの代替手段がないのではないかと心配しています。:-/
Asmus

2
MacBookを歩き回るのはまさに、蓋が閉じられているときの睡眠を防ぐための解決策が欲しい理由です。
theonlygusti

次の-tようなオプションを試しましたcaffeinate -t 3600か?私の経験によると、Macbookがバッテリーで動作していても動作します。
強徐

提案をありがとう、最初の試みで動作しませんでした。何か不足していますか?テスト済み1)caffeinate -t 36002)ラップトップを閉じます3)5秒待機します4)ラップトップを開いてログイン画面と切断されたネットワークサービスを見つけます。
ここで

しかし、ここでは蓋を閉めようとしませんでした。-tMacbookのバッテリーがオンのときにオプションを指定してコマンドを実行しただけで、スリープ状態になりませんでした。蓋を閉じた状態では試していませんが、蓋を閉じるとすぐにMacbookが強制的にスリープ状態になるようです。誤解して申し訳ありません。私はあなたがそれが蓋だけを閉じずにバッテリーのみで動作するときにそれを動作させる方法を探していたと思っていました。
強徐

回答:


37

理想的ではありませんが、解決策があります。ふたを閉じてバッテリーで実行しているときにラップトップがスリープしないようにするには、次のコマンドを実行します。

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

ふたを閉じてバッテリーで実行しているときにラップトップをスリープ状態に戻すには、次のコマンドを実行します。

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

2番目のコマンドセットの「5」は、バッテリーがオンのときにスリープするまでの分数を表します。ラップトップに合わせて調整してください。

これは少し危険です。設定を再度有効にするのを忘れると、ラップトップはバッテリーに接続してもスリープしません。このため、設定を自動的に再度有効にするシェルスクリプトを作成しました。

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

あなたがヒットするまで、シェルスクリプトが寝無効になりEnter、それが再び有効になり、その時点でのキー、スリープ設定を(交互に、あなたがヒットすることができますCtrl- Cと同じことを達成します)。また、タイムアウト(デフォルトは300秒/ 5分)が設定され、その後スリープ設定が自動的に再度有効になり、ラップトップは強制的にスリープ状態になります。ラップトップを会議で使用している場合はこれは苦痛ですが、ラップトップを忘れてバッグに入れて家に帰る場合は命の恩人になります。

率直な読者は、これらのコマンドが必要とすることに気付くでしょうsudo; 悲しいことに、それは避けられないことです。私のシステムで行ったことはpmset、rootとして実行するためにパスワードを入力する必要がないようにすることです。それを行うには、sudoersファイル(sudo visudo)を編集して次の行を追加します。

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

「joe」をユーザー名に置き換えます。シェルスクリプトSETUIDを実行することで、おそらく同じ結果を得ることができます(つまり、パスワードを入力せずにスクリプトを実行できます)が、私はそれが好きではありません。sudoersを介してこの1つのコマンドを開くことは、私にとってそれほど危険ではないようです。

スクリプトを実行するには、それをあなたのディレクトリに固定し、次のPATHように呼び出します:

noz [<timeout in seconds>]

あなたが行っているところへ行くときは、単にヒットEnterCtrl- Cあなたがしている良い行くことに。それを忘れると、自動的にリセットされてスリープします。

AppleScriptを介してこれをすべて達成する方法がおそらくあるので、ホットキーとそうでないものを割り当てることができます。コマンドラインからこれを実行するのに飽きたなら、それを試してみます。


6
クール!どうもありがとう!提案/簡素化:sleep設定を変更する必要はないと思います。disablesleepオンとオフを切り替えるだけです。pmset -a disablesleep 1そしてpmset -a disablesleep 0私のためにうまく働きます。蓋を閉じても、MacBookがスリープ状態になりません。他のすべての設定は同じままです。
jcsahnwaldtによるとGoFundMonica

Githubユーザーiccirは、Fermataと呼ばれる無料アプリを作成しました。このアプリは、フードの下でこのトリックを使用し、メニューバーアイコンやタイマーなどでうまくラップします。Mojave(10.14.2)で試してみました github.com/iccir/Fermata
アレックスライアン


5

ネイティブな方法はありません。いくつかの検索と試行の後に得たものは次のとおりです。

ここに画像の説明を入力してください

注意:

  • Nosleepのカーネル拡張機能をHigh Sierraにロードできませんでした
  • High Sierra以降のAppleは、プライベートSPIをサポートしていません。Fermatapmsetバージョン1.1以降のメソッドに切り替えました
  • Insomniaが期待どおりに動作するようにするには、Gatekeeperを無効にする必要があります。
  • 私が試した他のアプリは、ふたを閉じた状態では動作しません

1

このアプリを試しましたか?私はそれがまさにあなたが求めているものに非常に役立つと思います。

アプリの設定内で設定するタイムアウト機能があると確信しています。


6
@ mitchell-dに感謝します。質問は、カフェインなどのネイティブソリューションを具体的に求めています。で提案されている他のアプリがありますされ、そこ-任意のウェイ・ツー・セット-のMacBookプロツーない-睡眠-あなた-クローズ蓋 それでも、私が試したカフェインのあなたはそれをお勧めアプリがありません蓋を閉じたときにMacbookがスリープしないようにしません
ここで
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.