私はまだ何も見つけていないので、ここの誰かがアイデアを持っているかもしれないと思っていました。
Appleラップトップのバッテリーが一定の充電レベルに達したとき、またはバッテリーが完全に充電されたときに、バッテリーに基づいて均等にキックオフしたい。
定期的に何かを実行し、バッテリーレベルをチェックし、何をすべきかを決定できることは知っていますが、可能であればイベントドリブンの方が好きです。
私はまだ何も見つけていないので、ここの誰かがアイデアを持っているかもしれないと思っていました。
Appleラップトップのバッテリーが一定の充電レベルに達したとき、またはバッテリーが完全に充電されたときに、バッテリーに基づいて均等にキックオフしたい。
定期的に何かを実行し、バッテリーレベルをチェックし、何をすべきかを決定できることは知っていますが、可能であればイベントドリブンの方が好きです。
回答:
Power Managerは無料ではありませんが、バッテリーレベル(内部またはUPS)に基づいてイベントをトリガーできます。イベントは、スクリプトを実行したり、アプリケーションを起動したり、シャットダウンなどのタスクを実行したりできます。
Power Managerはイベント駆動型であり、バッテリーの変更をポーリングしません。
代わりに、Power ManagerはOS XのIOKitレイヤーにフックし、ハードウェアからの更新を待ちます。誰もログインしていないときにイベントをトリガーできます。アクティブなユーザーに依存しません。
組み込みのスケジュールアシスタントタスクは、バッテリーが特定のレベルまで低下したときに実行することに焦点を合わせていますが、バッテリーの割合や残り時間の増加をチェックするために調整できます。
次の2つの投稿ではUPS電源について説明していますが、MacBookの内蔵バッテリーに簡単に適合できます。
開示:私はPower Managerの背後にいるソフトウェアエンジニアです。
私はこれをOSベースにしたいので、インターネット接続やブラウザを開くなどは必要ありません。バックグラウンドで発生する可能性のあることだけです
最も簡単な方法はアプリケーションを使用することですが、組み込みのOSコマンドのみを使用して行う方法があります。イベントドリブンにしたいのですが、それを実現する方法がわからないので、ここでバッテリーレベルをチェックし、しきい値を上回ったり下回ったりした場合に何か他のことを行う方法を紹介します。
あなたはlaunchd
プロセスを考えるかもしれません、これは基本的に毎x
分実行されるスケジュールされたタスクです。多くの場合、上級ユーザーが使用しますが、セットアップするのはそれほど難しくありません。このディレクトリに配置する.plistファイルを使用して、launchdスケジュール済みタスクをMacintosh HD\Library\LaunchDaemons
構成します。これが.plistファイルの構造です。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Debug</key>
<true/>
<key>ExitTimeOut</key>
<integer>120</integer>
<key>Label</key>
<string>com.me.BatteryInfo</string>
<key>ProgramArguments</key>
<array>
<string>/Users/yourusername/batt.sh</string>
</array>
<key>RunAtLoad</key>
<true/>
<key>StartInterval</key>
<integer>1800</integer>
</dict>
</plist>
上記com.me.BatteryInfo
のLaunchDaemons
フォルダーにそのファイルを保存すると、30分ごとに実行されるスケジュールされたタスクが作成されます。1800
真上の数値は、</dict>
タスクを実行する頻度の秒単位の時間です。それが言うところ<string>/Users/yourusername/batt.sh</string>
は、スケジュールで実行するスクリプトを指定する場所です。<string>
その</sting>
ままにしておく必要があります。
行<string>com.me.BatteryInfo</string>
は、スケジュールされたタスクの一意の名前です。複数作成する場合は、各.plistに一意の名前を付けてください。
次に行う必要があるのは、.plistの所有権をに変更することroot
です。これはセキュリティ機能として必要です(スケジュールされた悪意のあるタスクを作成するソフトウェア/ユーザーを停止するために、私は推測します)。ファイルの所有権を変更するには、実行しますsudo chown root \Library\LaunchDaemons\yourtask.plist
(yourtask.plistを、作成した.plistの実際のファイル名に置き換えます)。このタスクでは、パスワードの入力を求められます。
ここで、定期的に実行するスクリプトを作成する必要があります。.shファイル(bashスクリプト)を作成して、コンピューターに何をするかを指示する必要があります。.shファイルを作成するには、Sublime TextやKomodo Editなどのプログラマーテキストエディターを開きます。多くの場合、スクリプトに干渉するテキストをファイルに追加するため、テキスト編集は使用しないでください。テキスト編集は実際にはコードに使用しないでください。
次のコードを使用してスクリプト(.shファイル)を作成します。
#!/bin/sh
percent=$(ioreg -l | awk '$3~/Capacity/{c[$3]=$5}END{OFMT="%.3f";max=c["\"MaxCapacity\""];print(max>0?100*c["\"CurrentCapacity\""]/max:"?")}')
if [ $percent > 95 ]
then
echo 'charged.'
fi
exit 0
echo 'charged.'
バッテリーが充電されたときに実行したいターミナルコマンドに置き換えます。open /Applications/Notes.app
Notesアプリケーションを開きます。ディレクトリを変更して別のアプリケーションを開くことができます。
$percent > 95
これにより、次の行は、バッテリーが95
充電されたときにのみ実行されるようになります。これは任意に変更できます。ここのバッテリーレベルは、多くの場合、上部のメニューバーに表示されるものとわずかに異なります。「バッテリーが完全に充電されたときに実行する」場合は、これを> 95のままにしておくことをお勧めします。たとえば、バッテリーが20%を下回ったときにタスクを実行したい場合は、それを$percent < 20
注:これはスケジュールされたタスクであるため、スクリプトはx
分単位で実行されます。これはopen \Applications\Notes.app
、スクリプト内に配置すると、Notesアプリケーションがx
数分ごとに起動することを意味します(バッテリーが充電されている場合)
このタスクは、誰もログインしていない場合でも実行されます。
しばらく前にこの質問をしたことは知っていますが、うまくいけば誰かの助けになるでしょう。