배터리 부족 맞춤 규칙(최대 절전 모드)

배터리 부족 맞춤 규칙(최대 절전 모드)

나는 배터리 측정기가 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
        }
    }

관련 정보