理想的ではありませんが、解決策があります。ふたを閉じてバッテリーで実行しているときにラップトップがスリープしないようにするには、次のコマンドを実行します。
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>]
あなたが行っているところへ行くときは、単にヒットEnterかCtrl- Cあなたがしている良い行くことに。それを忘れると、自動的にリセットされてスリープします。
AppleScriptを介してこれをすべて達成する方法がおそらくあるので、ホットキーとそうでないものを割り当てることができます。コマンドラインからこれを実行するのに飽きたなら、それを試してみます。