Никакое всплывающее уведомление о низком уровне заряда в 16,04

Я использую Единицу в 16,04. По некоторым причинам я не получаю раскрывающиеся уведомления для низкого уровня заряда. Я должен полагаться на значок батареи в верхней панели, чтобы видеть, находится ли батарея на стороне "низкого уровня заряда". Находится поведение по умолчанию в 16,04? Или я не получаю всплывающие окна для низкого уровня заряда?

9
задан 20 July 2016 в 06:32

4 ответа

Переустановка попытки indicator-power с этой командой:

sudo apt-get install --reinstall indicator-power

Если это не решает проблему, рассмотрите использование контрольного сценария батареи в соответствии с одним из моих предыдущих ответов: https://askubuntu.com/a/603322/295286

Ниже сценарий Python, который может уведомить Вас, когда заряд батареи заканчивает определенный процент, и приостановите систему, после того как это - рев 10%. Использование просто:

python battery_monitor.py INT

Где INT является целочисленным значением Вашего желаемого процента батареи, на уровне которого необходимо получить уведомление, например 30.

Можно также добавить вышеупомянутую команду для Запущения Приложений для запуска этого сценария на каждом входе в систему в сессию Единицы

Исходный код

Согласно запросам OP в чате и комментариях, сценарий теперь берет два аргумента, сначала для уведомления о выбросе и второй OS для уведомления о заряде.

Также доступный как 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()
5
ответ дан 23 November 2019 в 04:52

Это не нормально, я имею 16,04 выполнений и получаю всплывающие окна, но я использую оболочку гнома tho.

можно сделать сценарий, который дает Вам сообщение.

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

Затем делают задание крона и выполняют его каждые несколько минут.

8
ответ дан 23 November 2019 в 04:52

Я нашел превосходное приложение, которое делает это для низкого уровня заряда, полная батарея и так далее.

Read это

http://www.omgubuntu.co.uk/2016/07/ubuntu-battery-monitor-notifications

0
ответ дан 23 November 2019 в 04:52

Да, Это нормально. Я записал простой сценарий удара для установки уведомлений о батарее.

#!/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. Я надеюсь, что это помогает и помогает Вам.

3
ответ дан 23 November 2019 в 04:52

Другие вопросы по тегам:

Похожие вопросы: