I use Unity in 16.04. For some reason, I am not getting popup notifications for low battery. I have to rely on battery icon in top panel to see if battery is on the " low battery " side. Is the default behaviour in 16.04 ? Or I am not getting pop ups for low battery ?
-
You might try reinstalling`indicator-power ` package。 If you want, i could also provide a script that can give you notification – Sergiy Kolodyazhnyy Jul 20 '16 at 13:37
-
Thanks @Serg , kindly give me the commands to do the same. – user227495 Jul 20 '16 at 13:39
-
ok, i will post an answer in a few minutes. – Sergiy Kolodyazhnyy Jul 20 '16 at 13:40
-
comments under my post have been moved to chat. We can continue troubleshooting there. – Sergiy Kolodyazhnyy Jul 22 '16 at 10:08
-
@SergiyKolodyazhnyy Is this a low laptop battery or the motherboard battery. Does the solution discussed also refer to the motherboard's cmos battery normally used for keeping the clock alive? – simgineer Feb 04 '19 at 19:46
-
@simgineer This involves laptop battery, which typically has required sensors to provide necessary information. I'm not aware what method, if any, exist to check CMOS battery voltage. – Sergiy Kolodyazhnyy Feb 04 '19 at 19:51
-
same problem on 18.04, I saw a tiny red dot on top left inside battery icon and found out power was disconnected! good I wasn't too long away from it... – VeganEye Apr 28 '20 at 15:43
4 Answers
This is not normal i have a 16.04 running and get popups but i'm using a gnome shell tho.
You can make a script that gives you a message.
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
Then make a cron job and run it every few minutes.
- 913
- 1
- 9
- 27
-
Thanks @Arne N. I do not know how to run corn jobs though. Also, any way to fi the core files so that we can skip the script ? – user227495 Jul 20 '16 at 13:39
-
To make a cron job open up the terminal type in `crontab -e` choose the nano editor (only if you never made a cron job) by pressing 2 and enter, after that a file wil open scroll down to the bottom and add a new line. `/2 * * * * my-script.sh` Press `ctrl + x` and then type `y`and enter. That should work. No idea about the core files sorry. – Cyber_Star Jul 20 '16 at 13:49
-
Will do. I am still trying it one by one. Was hoping to fix it through core files. – user227495 Jul 21 '16 at 02:55
-
thx! I put this command at startupapps `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'` – VeganEye Apr 28 '20 at 16:00
Attempt reinstalling indicator-power with this command:
sudo apt-get install --reinstall indicator-power
If that doesn't solve the issue, consider using the battery monitoring script as provided by one of my previous answers : https://askubuntu.com/a/603322/295286
Below is python script that can notify you when battery charge gets past certain percentage, and suspend system once it is bellow 10 %. Usage is simple:
python battery_monitor.py INT
Where INT is integer value of your desired battery percentage at which you should receive notification, for example 30.
You can also add the above command to Startup Applications to start this script on every login into Unity session
Source code
As per OP requests in chat and comments , the script now takes two arguments, first for discharge notification and second os for charge notification.
Also available as 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()
- 103,293
- 19
- 273
- 492
-
Comments are not for extended discussion. This conversation has been [moved to chat](http://chat.stackexchange.com/rooms/42862/discussion-between-serg-and-user227495). – terdon Jul 22 '16 at 10:06
Yes, This is normal. I have written a simple bash script for setting up battery notifications.
#!/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
I also Have this and instructions on my github account. I hope this helps and makes it easier for you.
- 3,306
- 5
- 30
- 49
- 284
- 1
- 6
I found an excellent app that does it for low battery, full battery and so on.
Read this
http://www.omgubuntu.co.uk/2016/07/ubuntu-battery-monitor-notifications
- 3,951
- 16
- 52
- 98