16.04 में कोई कम बैटरी पॉपअप सूचना नहीं


10

मैं 16.04 में एकता का उपयोग करता हूं। किसी कारण से, मुझे लो बैटरी के लिए पॉपअप नोटिफिकेशन नहीं मिल रहा है। मुझे यह देखने के लिए शीर्ष पैनल में बैटरी आइकन पर भरोसा करना होगा कि क्या बैटरी "कम बैटरी" की तरफ है। क्या 16.04 में डिफ़ॉल्ट व्यवहार है? या मुझे लो बैटरी के लिए पॉप अप नहीं मिल रहा है?


आप indicator-power पैकेज को पुनः स्थापित करने का प्रयास कर सकते हैं package यदि आप चाहें, तो मैं आपको एक स्क्रिप्ट भी प्रदान कर सकता हूं जो आपको सूचना दे सकती है
सर्गी कोलोडियाज़नी

धन्यवाद @ शेर, कृपया मुझे भी ऐसा ही करने की आज्ञा दीजिए।
user227495

ठीक है, मैं कुछ ही मिनटों में उत्तर पोस्ट करूंगा।
सर्गी कोलोडियाज़नी

मेरी पोस्ट के तहत टिप्पणियों को चैट में स्थानांतरित कर दिया गया है। हम वहां समस्या निवारण जारी रख सकते हैं।
सेर्गेई कोलोडियाज़नी

@SergiyKolodyazhnyy यह एक कम लैपटॉप बैटरी या मदरबोर्ड बैटरी है। क्या चर्चा किए गए समाधान मदरबोर्ड की सेमीोस बैटरी को संदर्भित करते हैं जो आमतौर पर घड़ी को जीवित रखने के लिए उपयोग की जाती है?
simgineer

जवाबों:


5

indicator-powerइस आदेश के साथ पुनः प्रयास करने का प्रयास करें:

sudo apt-get install --reinstall indicator-power

यदि वह समस्या हल नहीं करता है, तो बैटरी मॉनिटरिंग स्क्रिप्ट का उपयोग करने पर विचार करें जैसा कि मेरे पिछले उत्तरों में से एक द्वारा दिया गया है: https://askubuntu.com/a/603322/295286

नीचे पाइथन लिपि है जो बैटरी चार्ज के कुछ प्रतिशत पिछले होने पर आपको सूचित कर सकती है, और सिस्टम को 10% तक एक बार सस्पेंड कर सकती है। उपयोग सरल है:

python battery_monitor.py INT

जहां INT आपके वांछित बैटरी प्रतिशत का पूर्णांक मूल्य है जिस पर आपको अधिसूचना प्राप्त करनी चाहिए, उदाहरण के लिए 30

आप एकता सत्र में हर लॉगिन पर इस स्क्रिप्ट को शुरू करने के लिए स्टार्टअप एप्लिकेशन में उपरोक्त कमांड भी जोड़ सकते हैं

सोर्स कोड

चैट और टिप्पणियों में ओपी अनुरोध के अनुसार, स्क्रिप्ट अब दो तर्क लेती है, पहला डिस्चार्ज नोटिफिकेशन के लिए और दूसरा ओ एस नोटिफिकेशन के लिए।

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

टिप्पणियाँ विस्तारित चर्चा के लिए नहीं हैं। इस वार्तालाप को बातचीत में स्थानांतरित कर दिया गया है ।
टेराडॉन

9

यह सामान्य नहीं है, मेरे पास 16.04 चल रहा है और पॉपअप मिलता है, लेकिन मैं एक सुंदर शेल थियो का उपयोग कर रहा हूं।

आप एक स्क्रिप्ट बना सकते हैं जो आपको संदेश देती है।

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

फिर क्रोन जॉब करें और इसे हर कुछ मिनटों में चलाएं।


धन्यवाद @Arne N. मुझे नहीं पता कि मकई की नौकरियां कैसे चलेंगी। इसके अलावा, कोर फ़ाइलों को फाई करने का कोई तरीका ताकि हम स्क्रिप्ट को छोड़ सकें?
user227495

एक क्रोन जॉब बनाने के crontab -eलिए, नैनो एडिटर चुनने के लिए टर्मिनल टाइप खोलें (केवल अगर आपने कभी क्रोन जॉब नहीं की है) 2 दबाकर और एंटर करें, उसके बाद एक फाइल wil ओपन स्क्रोल को नीचे की ओर ले जाता है और एक नई लाइन जोड़ता है। /2 * * * * my-script.sh दबाएँ ctrl + xऔर फिर टाइप करें yऔर एंटर करें। वह काम करना चाहिए। माफ करना कोर फ़ाइलों के बारे में कोई विचार नहीं है।
साइबर_स्टार

करूँगा। मैं अभी भी इसे एक-एक करके आजमा रहा हूं। कोर फ़ाइलों के माध्यम से इसे ठीक करने की उम्मीद कर रहा था।
user227495

धन्यवाद! मैंने इस कमांड को स्टार्टअपप्सbash -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'
वेगनएईई

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

मेरे पास यह भी है और मेरे गीथूब खाते पर निर्देश । मुझे उम्मीद है कि यह मदद करता है और यह आपके लिए आसान बनाता है।


हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.