16.04'te düşük pil pop-up bildirimi yok


10

16.04'te Unity kullanıyorum. Nedense, düşük pil için pop-up bildirimleri almıyorum. Pilin "düşük pil" tarafında olup olmadığını görmek için üst paneldeki pil simgesine güvenmem gerekiyor. Varsayılan davranış 16.04'te mi? Yoksa düşük pil için pop up almıyorum?


indicator-power Paketi yeniden yüklemeyi deneyebilirsiniz want İsterseniz, size bildirimde bulunabilecek bir komut dosyası da sağlayabilirim
Sergiy Kolodyazhnyy

Teşekkürler @Serg, nazikçe bana aynı şeyi yapmak için komutlar verin.
user227495

tamam, birkaç dakika içinde cevap vereceğim.
Sergiy Kolodyazhnyy

yazımın altındaki yorumlar sohbete taşındı. Orada sorun gidermeye devam edebiliriz.
Sergiy Kolodyazhnyy

@SergiyKolodyazhnyy Bu düşük bir dizüstü bilgisayar pili veya anakart pili. Tartışılan çözüm aynı zamanda normalde saati canlı tutmak için kullanılan anakartın CMOS bataryasını da ifade ediyor mu?
simgineer

Yanıtlar:


5

indicator-powerBu komutla yeniden yüklemeyi deneyin :

sudo apt-get install --reinstall indicator-power

Bu sorunu çözmezse, önceki yanıtlarımdan birinin sağladığı pil izleme komut dosyasını kullanmayı düşünün: https://askubuntu.com/a/603322/295286

Aşağıda, pil şarjı belirli bir yüzdeyi aştığında sizi uyarabilecek ve% 10'u aştığında sistemi askıya alabilecek python betiği bulunmaktadır. Kullanımı basit:

python battery_monitor.py INT

INT, örneğin bildirim almanız gereken istediğiniz pil yüzdesinin tamsayı değeridir 30.

Unity oturumuna her girişte bu komut dosyasını başlatmak için yukarıdaki komutları Başlangıç ​​Uygulamalarına da ekleyebilirsiniz.

Kaynak kodu

Sohbet ve yorumlardaki OP isteklerine göre, betik şimdi önce taburcu bildirimi ve ikinci olarak ücret bildirimi için iki argüman alıyor.

Github Gitst olarak da mevcut

#!/usr/bin/env python
from gi.repository import Notify
import subprocess
from time import sleep, time
from sys import argv
import dbus


def send_notification(title, text):
    try:
        if Notify.init(argv[0]):
            n = Notify.Notification.new("Notify")
            n.update(title, text)
            n.set_urgency(2)
            if not n.show():
                raise SyntaxError("sending notification failed!")
        else:
            raise SyntaxError("can't initialize notification!")
    except SyntaxError as error:
        print(error)
        if error == "sending notification failed!":
            Notify.uninit()
    else:
        Notify.uninit()


def run_cmd(cmdlist):
    try:
        stdout = subprocess.check_output(cmdlist)
    except subprocess.CalledProcessError:
        pass
    else:
        if stdout:
            return stdout


def run_dbus_method(bus_type, obj, path, interface, method, arg):
    if bus_type == "session":
        bus = dbus.SessionBus()
    if bus_type == "system":
        bus = dbus.SystemBus()
    proxy = bus.get_object(obj, path)
    method = proxy.get_dbus_method(method, interface)
    if arg:
        return method(arg)
    else:
        return method()


def suspend_system():
    run_dbus_method('session',
                    'com.canonical.Unity',
                    '/com/canonical/Unity/Session',
                    'com.canonical.Unity.Session',
                    'Suspend', 'None')


def get_battery_percentage():
    output = run_cmd(['upower', '--dump']).decode().split('\n')
    found_battery = False
    for line in output:
        if 'BAT' in line:
            found_battery = True
        if found_battery and 'percentage' in line:
            return line.split()[1].split('%')[0]


def main():
    end = time()
    battery_path = ""
    for line in run_cmd(['upower', '-e']).decode().split('\n'):
        if 'battery_BAT' in line:
            battery_path = line
            break
    while True:
        notified = False
        while subprocess.call(['on_ac_power']) == 0:

            sleep(0.25)
            run_dbus_method('system', 'org.freedesktop.UPower',
                            battery_path, 'org.freedesktop.UPower.Device',
                            'Refresh', 'None')
            battery_percentage = int(get_battery_percentage())
            if battery_percentage == int(argv[2]) and not notified:
               subprocess.call( ['zenity', '--info','--text', 'Battery reached' + argv[2] + '%'  ]  ) 
               notified = True
        while subprocess.call(['on_ac_power']) == 1:

            sleep(0.25)
            run_dbus_method('system', 'org.freedesktop.UPower',
                            battery_path, 'org.freedesktop.UPower.Device',
                            'Refresh', 'None')
            battery_percentage = int(get_battery_percentage())

            if battery_percentage <= int(argv[1]):
                if battery_percentage <= 10:
                    send_notification('Low Battery',
                                      'Will suspend in 60 seconds')
                    sleep(60)
                    suspend_system()
                    continue
                if end < time():
                    end = time() + 600
                    send_notification('Low Battery', 'Plug in your charger')

if __name__ == '__main__':
    main()

Yorumlar uzun tartışmalar için değildir. Bu sohbet sohbete taşındı .
terdon

9

Bu normal bir 16.04 çalışan var ve pop-up olsun ama ben bir gnome kabuk tho kullanıyorum.

Size bir mesaj veren bir komut dosyası oluşturabilirsiniz.

battery_level=`acpi -b | grep -P -o '[0-9]+(?=%)'`
if [ $battery_level -le 10 ]
then
    notify-send "Battery low" "Battery level is ${battery_level}%!"
fi

Sonra bir cron işi yapın ve birkaç dakikada bir çalıştırın.


Arne N. Mısır işlerini nasıl yapacağımı bilmiyorum. Ayrıca, herhangi bir şekilde fi dosyaları fi böylece atlamak betiği atlamak için?
user227495

Bir cron işini açmak için terminal türünü açın crontab -eve 2'ye basarak nano düzenleyiciyi seçin (yalnızca hiç bir cron işi yapmadıysanız) ve Enter tuşuna basın, bundan sonra bir dosya aşağıya doğru kaydırın ve yeni bir satır ekleyin. /2 * * * * my-script.sh Tuşuna basıp ctrl + xyazın yve girin. Bu işe yaramalı. Çekirdek dosyalar hakkında hiçbir fikrim yok üzgünüm.
Cyber_Star

Yapacağım. Hala teker teker deniyorum. Temel dosyalar aracılığıyla düzeltmeyi umuyordum.
user227495

Teşekkür! Startupps'ta bu komutu koydumbash -c 'while true;do n="$(acpi -b |egrep "[[:digit:]]*%" -o |tr -d "%")";declare -p n;if((n<30));then notify-send "Low battery warning!" "$n%";fi;sleep $((5*60));done'
VeganEye

3

Evet, bu normal. Pil bildirimlerini ayarlamak için basit bir bash betiği yazdım.

#!/usr/bin/env bash
# check if acpi is installed.
if [ `dpkg -l | grep acpi | grep -v acpi-support | grep -v acpid | grep -c acpi` -ne 1 ]; then
    echo "run 'sudo apt install acpi' then run '$0' again."
    exit
fi

if [ $# -eq 1 ] && [ "$1" == "--install" ]; then
    echo "installing battery notifier..."

    if [ ! -e "$HOME/bin" ]; then
        mkdir $HOME/bin
    fi  

    cp $0 $HOME/bin/bn.sh
    (crontab -l 2>/dev/null; echo "*/2 * * * * $HOME/bin/bn.sh") | crontab -

else
    # check if power adapter is plugged in, if not, check battery status.
    if [ -z "`acpi -a | grep on-line`" ]; then
        batlvl=`acpi -b | grep -P -o '[0-9]+(?=%)'`

        if [ $batlvl -le 15 ] && [ $batlvl -ge 11 ]; then
            notify-send "Battery is at $batlvl%. Please plug your computer in."
        elif [ $batlvl -le 10 ] && [ $batlvl -ge 6 ]; then
            notify-send "Battery is at $batlvl%. Computer will shutdown at 5%."
        elif [ $batlvl -le 5 ]; then
            notify-send "BATTERY CRITICALLY LOW, SHUTTING DOWN IN 3 SECONDS!"
            sleep 3
            shutdown -h now
        fi
    fi  
fi

Ayrıca bu ve github hesabımda talimatlar var . Umarım bu sizin için yardımcı olur ve kolaylaştırır.


Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.