.png)
私は、バッテリーメーターが 0% になった後でも、ノートパソコンをかなり長時間 (最大 25 分) 使用して、ノートパソコンのバッテリーを酷使するのが好きです。
しかし、時々それを忘れたり、単に離れたりすることがあります。これによりハードシャットダウンが発生し、ファイルシステムが破損する可能性があります。
バッテリーが空になったと報告されてから 15 分後にコンピューターを自動的に休止状態にするように指示する最適な方法は何ですか? 私のアイデアは、適切なサブシステムを定期的にポーリングする Ruby または Bash スクリプトを作成することです/proc/
が、組み込みのものがあるかどうか疑問に思っています。
答え1
あなた自身が「乱用」という言葉を使ったので、私はあなたのバッテリーについて説教するつもりはありません :)。
これを行う 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
なったため、1 分ごとに通知が届きます。
#!/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
}
}