16.04에 배터리 부족 팝업 알림 없음 부족”쪽에 있는지 확인하려면 상단 패널의 배터리 아이콘을

16.04에서 Unity를 사용합니다. 어떤 이유로 배터리 부족에 대한 팝업 알림이 표시되지 않습니다. 배터리가 “배터리 부족”쪽에 있는지 확인하려면 상단 패널의 배터리 아이콘을 사용해야합니다. 16.04의 기본 동작입니까? 또는 배터리 부족으로 팝업이 나타나지 않습니까?



답변

indicator-power이 명령으로 다시 설치 하십시오 :

sudo apt-get install --reinstall indicator-power

그래도 문제가 해결되지 않으면 이전 답변 중 하나에서 제공 한 배터리 모니터링 스크립트를 사용하는 것이 좋습니다 : https://askubuntu.com/a/603322/295286

아래는 배터리 충전량이 일정 비율을 초과했을 때 알려주고 10 %가되면 시스템을 일시 중단시키는 python 스크립트입니다. 사용법은 간단합니다.

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()


답변

이것은 정상이 아니며 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

그런 다음 크론 작업을 수행하고 몇 분마다 실행하십시오.


답변

예, 이것은 정상입니다. 배터리 알림 설정을위한 간단한 bash 스크립트를 작성했습니다.

#!/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 계정 에 이것을 가지고 있습니다 . 도움이 되었으면 좋겠습니다.


답변

나는 배터리 부족, 전체 배터리 등을 위해 훌륭한 앱을 발견했습니다.

이것을 읽으십시오

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


답변