ไม่มีการแจ้งเตือนป๊อปอัพแบตเตอรี่ต่ำใน 16.04


10

ฉันใช้ Unity ใน 16.04 ด้วยเหตุผลบางอย่างฉันไม่ได้รับการแจ้งเตือนป๊อปอัพสำหรับแบตเตอรี่อ่อน ฉันต้องพึ่งพาไอคอนแบตเตอรี่ในแผงด้านบนเพื่อดูว่าแบตเตอรี่อยู่ในด้าน "แบตเตอรี่ต่ำ" หรือไม่ พฤติกรรมเริ่มต้นคือ 16.04 หรือไม่ หรือฉันไม่ได้รับป๊อปอัปสำหรับแบตเตอรี่ต่ำ


คุณอาจลองติดตั้งindicator-power แพคเกจใหม่you หากคุณต้องการฉันสามารถให้สคริปต์ที่สามารถแจ้งเตือนคุณได้
Sergiy Kolodyazhnyy

ขอบคุณ @Serg กรุณาให้คำสั่งในการทำเช่นเดียวกัน
user227495

ตกลงฉันจะโพสต์คำตอบในไม่กี่นาที
Sergiy Kolodyazhnyy

ความคิดเห็นภายใต้โพสต์ของฉันถูกย้ายไปแชท เราสามารถแก้ไขปัญหาได้ที่นั่น
Sergiy Kolodyazhnyy

@SergiyKolodyazhnyy นี่คือแบตเตอรี่แล็ปท็อปต่ำหรือแบตเตอรี่เมนบอร์ด วิธีการแก้ปัญหาที่กล่าวถึงนี้อ้างถึงแบตเตอรี่ cmos ของเมนบอร์ดโดยปกติแล้วจะใช้เพื่อรักษานาฬิกาให้มีชีวิตอยู่หรือไม่?
simgineer

คำตอบ:


5

ลองติดตั้งใหม่indicator-powerด้วยคำสั่งนี้:

sudo apt-get install --reinstall indicator-power

หากวิธีนี้ไม่ช่วยแก้ปัญหาให้ลองใช้สคริปต์การตรวจสอบแบตเตอรี่ตามคำตอบก่อนหน้านี้ของฉัน: https://askubuntu.com/a/603322/295286

ด้านล่างนี้เป็นสคริปต์ python ที่สามารถแจ้งเตือนคุณเมื่อประจุแบตเตอรี่ถึงเปอร์เซ็นต์ที่กำหนดและหยุดระบบทันทีที่ร้อง 10% การใช้งานง่าย:

python battery_monitor.py INT

ที่ไหน INT 30เป็นจำนวนเต็มค่าร้อยละของแบตเตอรี่ของคุณต้องการที่คุณควรจะได้รับการแจ้งเตือนเช่น

นอกจากนี้คุณยังสามารถเพิ่มคำสั่งข้างต้นลงในแอปพลิเคชันเริ่มต้นเพื่อเริ่มต้นสคริปต์นี้ในทุกการเข้าสู่เซสชัน Unity

รหัสแหล่งที่มา

ตามคำขอ OP ในการแชทและความคิดเห็นตอนนี้สคริปต์จะมีสองข้อโต้แย้งก่อนอื่นสำหรับการแจ้งเตือนการปล่อยและระบบปฏิบัติการที่สองสำหรับการแจ้งเตือนการเรียกเก็บเงิน

นอกจากนี้ยังมีGithub Gitst

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

ความคิดเห็นไม่ได้มีไว้สำหรับการอภิปรายเพิ่มเติม การสนทนานี้ที่ได้รับการย้ายไปแชท
terdon

9

นี่ไม่ใช่เรื่องปกติที่ฉันมี 16.04 ที่ทำงานและรับป๊อปอัป แต่ฉันใช้คำว่า shell gnome

คุณสามารถสร้างสคริปต์ที่ให้ข้อความ

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

จากนั้นสร้างงาน cron และเรียกใช้ทุกสองสามนาที


ขอบคุณ @Arne N. ฉันไม่ทราบวิธีการเรียกใช้งานข้าวโพดแม้ว่า นอกจากนี้ยังมีวิธีการ fi ไฟล์หลักเพื่อให้เราสามารถข้ามสคริปต์ได้หรือไม่
user227495

ในการทำให้งาน cron เปิดชนิดเทอร์มินัลให้crontab -eเลือกตัวแก้ไขนาโน (เฉพาะในกรณีที่คุณไม่เคยทำงาน cron) โดยการกด 2 และป้อนหลังจากนั้นไฟล์จะเปิดเลื่อนลงไปด้านล่างและเพิ่มบรรทัดใหม่ /2 * * * * my-script.sh กดctrl + xจากนั้นพิมพ์yและป้อน ว่าควรจะทำงาน ไม่มีความคิดเกี่ยวกับไฟล์หลักขออภัย
Cyber_Star

จะทำ. ฉันยังคงลองทีละตัว หวังว่าจะแก้ไขผ่านไฟล์หลัก
user227495

ขอบคุณ! ฉันสั่งคำสั่งนี้ที่ startupappsbash -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

ใช่มันเป็นเรื่องปกติ ฉันได้เขียนสคริปต์ทุบตีง่ายๆสำหรับการตั้งค่าการแจ้งเตือนแบตเตอรี่

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

ฉันมีสิ่งนี้และคำแนะนำในบัญชี GitHubของฉันด้วย ฉันหวังว่าสิ่งนี้จะช่วยและทำให้คุณง่ายขึ้น


โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.