我喜欢滥用笔记本电脑电池,即使电池电量显示为 0% 后,我仍会长时间使用笔记本电脑(最多 25 分钟)。
然而,有时我会忘记这一点,或者我只是离开了。这会导致硬关闭,从而有可能损坏文件系统。
让计算机在电池报告电量耗尽 15 分钟后自动休眠的最佳方法是什么?我的想法是编写一个 Ruby 或 Bash 脚本来定期轮询适当的/proc/
子系统,但我想知道是否有任何内置的东西。
答案1
我不会给你一个关于电池的讲座,因为你自己使用了“滥用”这个词:)。
这样做的一种方法是这样的:
#!/usr/bin/env bash
while [ $(acpi | awk '{print $NF}' | sed 's/%//') -gt 0 ]; do
## Wait for a minute
sleep 60s
done
## The loop above will exit when the battery level hits 0.
## When that happens, issue the shitdown command to be run in 15 minutes
shutdown -h +15
您可以将其添加/etc/crontab
为由 root 运行。
答案2
对于任何想要类似功能的人,这里有一个 Ruby 脚本。
它支持连续多次挂起(耗尽、挂起、充电、耗尽、挂起……),并且尽可能稳健。
现在它还支持libnotify
,因此您每分钟都会收到通知。
#!/usr/bin/ruby
require 'eventmachine'
require 'libnotify'
period = 40 # poll evey N seconds
limit = (ARGV[0] || 20).to_i # allow usage N minutes after depletion
def get(prop)
File.read("/sys/class/power_supply/BAT0/#{prop}").chomp
end
def capacity
get(:charge_now).to_i
end
def onBattery?
get(:status) != 'Charging'
end
def action!
`sync`
`systemctl suspend`
end
puts 'Starting battery abuse agent.'
EM.run {
ticks = 0
EM.add_periodic_timer(period) {
if capacity == 0 && onBattery?
ticks += 1
if ticks % 5 == 0
Libnotify.show summary: 'Baterry being abused',
body: "for #{period*ticks} seconds.", timeout: 7.5
end
else
ticks = [ticks-1, 0].max
end
if ticks*period > limit*60
action!
end
}
}