나는 노트북 배터리를 남용하는 것을 좋아하며 배터리가 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
루트로 실행되도록 추가할 수 있습니다 .
답변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
}
}