Regra personalizada baixa bateria (hibernação)

3

Adoro abusar da bateria do meu laptop usando meu laptop por um bom tempo (até 25 minutos) mesmo depois que o medidor de bateria atinge 0%.

No entanto, às vezes eu esqueço disso ou simplesmente estou fora. Isso causa um desligamento difícil, que tem o potencial de corromper o sistema de arquivos.

Qual é a melhor maneira de dizer ao computador para hibernar automaticamente 15 minutos após o relatório da bateria estar vazio? Minha ideia é escrever um script Ruby ou Bash que periodicamente iria pesquisar o sub-sistema /proc/ apropriado, mas eu estou querendo saber se existe alguma coisa embutida.

    
por Rok Kralj 18.09.2013 / 20:24

2 respostas

1

Para quem quiser uma funcionalidade semelhante, aqui está um script Ruby.

Suporta múltiplas suspensões consecutivas (depleção, suspensão, carga, depleção, suspensão, ...) e é o mais robusto possível.

Agora ele também suporta libnotify , então você recebe uma notificação a cada minuto.

#!/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
        }
    }
    
por 19.09.2013 / 09:21
2

Eu não vou te dar uma palestra sobre sua bateria, já que você mesmo usou a palavra 'abuse':).

Uma maneira de fazer isso seria algo assim:

#!/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

Você pode adicionar isso a /etc/crontab para ser executado por root.

    
por 18.09.2013 / 20:40