Không có thông báo bật lên pin thấp trong 16.04


9

Tôi sử dụng Unity trong 16.04. Vì một số lý do, tôi không nhận được thông báo bật lên cho pin yếu. Tôi phải dựa vào biểu tượng pin ở bảng trên cùng để xem pin có ở phía "pin yếu" không. Là hành vi mặc định trong 16.04? Hoặc tôi không nhận được pop up cho pin yếu?


Bạn có thể thử cài đặt lại indicator-power gói Nếu bạn muốn, tôi cũng có thể cung cấp một tập lệnh có thể thông báo cho bạn
Sergiy Kolodyazhnyy

Cảm ơn @Serg, vui lòng cho tôi các lệnh để làm tương tự.
227495

ok, tôi sẽ đăng một câu trả lời trong vài phút nữa
Sergiy Kolodyazhnyy

bình luận dưới bài viết của tôi đã được chuyển đến trò chuyện. Chúng tôi có thể tiếp tục xử lý sự cố ở đó.
Sergiy Kolodyazhnyy

@SergiyKolodyazhnyy Đây là pin máy tính xách tay thấp hay pin bo mạch chủ. Có phải giải pháp được thảo luận cũng đề cập đến pin cmos của bo mạch chủ thường được sử dụng để giữ cho đồng hồ sống?
simgineer

Câu trả lời:


5

Cố gắng cài đặt lại indicator-powerbằng lệnh này:

sudo apt-get install --reinstall indicator-power

Nếu điều đó không giải quyết được vấn đề, hãy xem xét sử dụng tập lệnh theo dõi pin như được cung cấp bởi một trong những câu trả lời trước của tôi: https://askubfox.com/a/603322/295286

Dưới đây là tập lệnh python có thể thông báo cho bạn khi sạc pin vượt quá tỷ lệ phần trăm nhất định và tạm dừng hệ thống sau khi nó ở dưới mức 10%. Cách sử dụng rất đơn giản:

python battery_monitor.py INT

Ví dụ, trong đó INT là giá trị nguyên của tỷ lệ phần trăm pin mong muốn mà bạn sẽ nhận được thông báo 30.

Bạn cũng có thể thêm lệnh trên vào Ứng dụng khởi động để bắt đầu tập lệnh này mỗi lần đăng nhập vào phiên Unity

Mã nguồn

Theo yêu cầu của OP trong trò chuyện và nhận xét, tập lệnh hiện có hai đối số, đầu tiên là thông báo xả và os thứ hai để thông báo tính phí.

Cũng có sẵn như 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()

Bình luận không dành cho thảo luận mở rộng. Cuộc trò chuyện này đã được chuyển sang trò chuyện .
terdon

8

Điều này không bình thường, tôi có 16.04 đang chạy và nhận được các cửa sổ bật lên nhưng tôi đang sử dụng một vỏ gnome tho.

Bạn có thể tạo một kịch bản cung cấp cho bạn một thông điệp.

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

Sau đó thực hiện một công việc định kỳ và chạy nó cứ sau vài phút.


Cảm ơn @Arne N. Tôi không biết cách điều hành công việc ngô. Ngoài ra, có cách nào để fi các tập tin cốt lõi để chúng ta có thể bỏ qua tập lệnh không?
227495

Để tạo một công việc định kỳ mở loại thiết bị đầu cuối, crontab -ehãy chọn trình soạn thảo nano (chỉ khi bạn chưa bao giờ thực hiện công việc định kỳ) bằng cách nhấn 2 và nhập, sau đó, một tệp sẽ mở cuộn xuống phía dưới và thêm một dòng mới. /2 * * * * my-script.sh Nhấn ctrl + xvà sau đó nhập yvà nhập. Cần làm việc. Không có ý tưởng về các tập tin cốt lõi xin lỗi.
Cyber_Star

Sẽ làm. Tôi vẫn đang thử từng cái một. Hy vọng sẽ sửa nó thông qua các tập tin cốt lõi.
227495

3

Vâng, điều này là bình thường. Tôi đã viết một tập lệnh bash đơn giản để thiết lập thông báo pin.

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

Tôi cũng có cái này và hướng dẫn trên tài khoản github của tôi . Tôi hy vọng điều này sẽ giúp và làm cho nó dễ dàng hơn cho bạn.


Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.