我还没有发现任何东西,所以我希望也许有人在这里有了一个主意。
我想在苹果笔记本电脑上达到一定电量或电池充满电的情况下,开始使用基于电池的电池。
我知道我可以定期运行一些东西,检查电池电量,并决定要怎么做,但是如果可能的话,我更喜欢事件驱动。
我还没有发现任何东西,所以我希望也许有人在这里有了一个主意。
我想在苹果笔记本电脑上达到一定电量或电池充满电的情况下,开始使用基于电池的电池。
我知道我可以定期运行一些东西,检查电池电量,并决定要怎么做,但是如果可能的话,我更喜欢事件驱动。
Answers:
Power Manager不是免费的,但支持根据电池电量(内部或UPS)触发事件。事件可以运行脚本,启动应用程序或执行诸如关闭之类的任务。
Power Manager是事件驱动的,不会轮询电池更改。
相反,Power Manager挂接到OS X的IOKit层,并等待来自硬件的更新。没有人登录时可以触发事件。它不依赖于活动用户。
内置的Schedule Assistant任务专注于在电池电量下降到特定水平时执行,但是可以对其进行调整以检查电池百分比或剩余时间的增加。
这两篇文章讨论了UPS电源,但它们很容易适应MacBook的内部电池:
披露:我是Power Manager的软件工程师。
我希望这是基于OS的,因此不需要Internet连接或打开浏览器等。只是在后台可能发生的事情
最简单的方法是使用应用程序,但这只是使用内置OS命令的方法。我知道您希望它是事件驱动的,但是我不确定如何做到这一点,因此这是一种检查电池电量的方法,如果电池电量高于或低于阈值,则可以执行其他操作。
您可以考虑一个launchd
过程,这基本上是一个计划的任务,每x
分钟运行一次。它们通常由高级用户使用,但是设置起来并不难。您使用放置在此目录中的.plist文件配置启动的计划任务: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
(用创建的.plist的实际文件名替换yourtask.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
分钟启动一次(如果您的电池已充电)
即使没有人登录,此任务也将运行。
我知道您前一阵子问过这个问题,但是希望对您有所帮助。