问题: 低电量模式下笔记本不会按照系统提示自动进入睡眠或者休眠.
解决方法: 检测电量是否处于临界状态, 如果是, 则利用系统内建的函数向系统传递睡眠/休眠/关机的信息以实现睡眠.
概述
这个问题来源已久, 不仅黑苹果的笔记本上面存在, MacBook上面也有这样的问题. 简单的解决方法是利用脚本时时刻刻抓取系统的电量, 然后判断是否在临界状态来实现的. 脚本简单高效, 确实是不错的选择. 然而这次我想试着提高程序本身效率和判断的精确度, 所以选择了采用Objective-C, 通过Objective-C, 我可以轻松的通过syscall更精确更高效的调用系统中的电量信息, 以此来完成整个修复的过程.
安装了这个程序/驱动之后, 系统会没有插入电源同时电量低于临界百分比(<7%)或者续航时间不足10分钟的时候自动让系统进入睡眠/休眠/关机状态, 以保证数据不会丢失. 希望你们喜欢, 如果觉得有用, 别忘了在https://github.com/syscl/IOPowerManagement 中点赞(Star)哦;)
安装方法
1. 打开终端, 下载IOPowerManagement/ - git clone https://github.com/syscl/IOPowerManagement
复制代码
2. 将所需要的文件复制到相应目录 - cd IOPowerManagement/
- sudo cp -RX IOPowerManagement /etc
- sudo cp -RX com.syscl.iopm.plist /Library/LaunchDameons/
复制代码
3. 向系统注册相应的服务 - sudo launchctl load /Library/LaunchDameons/com.syscl.iopm.plist
复制代码
4. 重启即可
个性化配置 1) 如果你的计算机无法正确的睡眠, 可修改IOPowerManagement.m当中的: ret = TransportEventSystemCall(kAESleep); —-> ret = TransportEventSystemCall(kAEShutDown); 这样,便可以在低电量的时候自动关闭计算机而不是睡眠.
2) 如果你觉得睡眠/关机的临界条件太苛刻, 可以修改IOPowerManagement.h中的: int lowBatPercentage = 6; // system default percentage |
数值成为你想要的数值, 例如在电量低于3%的时候让系统进行休眠, 则将上面的内容修改为: int lowBatPercentage = 3; // system default percentage |
同样的, 如果你电脑的睡眠/关机速度相当快, 可以适当的降低续航时间限制, 例如把默认的续航小于10分钟(= 600秒)即睡眠修改为续航小于3分钟(= 180秒): int timeToSleep_seconds = 600; --> int timeToSleep_seconds = 180;
|
3) 在完成上述修改之后, 需要对上述的内容保存, 然后编译以产生预期的程序, 请使用下述的命令来进行编译: - clang IOPowerManagement.m -fobjc-arc -fmodules -mmacosx-version-min=10.6 -o IOPowerManagement
复制代码然后按照安装方法来进行安装即可.
注意
1. 上述个性化配置会在后期完善成可以自动配置的版本(无需再次编译), 但是最近因为我临近期末考试, 加上每周作业都比较多, 所以更新会比较慢, 请大家耐心等待. 2. Kext的版本我也在开发, 但是, 目前开来并非必要的, 因为还要考虑白苹果用户的使用情况(SIP限制). 3. 有任何好的建议请大家不要吝啬到https://github.com/syscl/IOPowerManagement 点issue给我, 有你们的建议和反馈才会让这个项目更好:) 4. 代码开源, 以防大家担心我的代码中加入了恶意代码 5. 祝你们好运!
syscl
|