Disable "Mouse battery low" spam notification
Countless times over the past few weeks I have been notified about the low battery in my wireless mouse. Every time it wakes up from sleeping mode and reconnects over Bluetooth I get a notification. I have gotten hundreds of notifications. I do not want them and I do not need them. Yes, battery is low, but at 0% (as reported) it will go on for another week at least. The notification has no timer and will stay visible until I close it.
How do I disable this torture?
Realizing I might sound like a grumpy old man I am not going to replace my batteries that are good for another month as a workaround. I am running Ubuntu 17.10 with GNOME Shell. I have no clue what is causing this. Pointers and suggestions will be greatly appreciated!
UPDATE: It turns out the mouse ran for another ten days or so after the initial notification. With the OS constantly reminding me that it will soon stop working. Wasting fine batteries is not a very good design. People should care about that and have an option to turn the notifications off.
UPDATE 2018-10-22: I asked some time ago. The marked correct answer might not apply anymore. It appears to be a bug in the gnome-settings-daemon
. See the report for updates revolving this issue.
for Ubuntu 20: settings -> notifications -> power and then toggle off the notifiction-button .
OK, I hit the same issue. Reasons are similar; my Logitech M570 is fed on "dead" batteries as it lasts MONTHS on a very low voltage alkaline. So I use batteries in other things and keep the dead ones for my M570.
The best answer I've found was to lower the Power Plugins critical level warning. This way you can customise when it nags.
You need dconf for command line or dconf-editor for the GUI version (for GUI you'll need to do sudo apt-get install dconf-tools
, although that package may not be available for newer versions, so just get dconf-editor
and its dependencies).
Setting is generically for batteries though, so if you're on a laptop or a UPS then you will be altering the warning levels for those, which may be non ideal.
For Ubuntu 17.10 (Artful Aardvark) go to org → gnome → settings-daemon → plugins → power. Alter the "percentage-low" setting to what you want. I changed from 10% to 4%.
It is not a perfect answer if you have a laptop, but it is fine for a desktop computer and better than filling landfill with batteries or being nagged.
Ubuntu 18.04 on a desktop computer here, so I'm not having issues that laptop could potentially have with that solution.
-
You can test whether what you made is working by restarting upower service:
sudo systemctl restart upower
-
I managed to solve it by altering upower's config file:
sudo nano /etc/dbus-1/system.d/org.freedesktop.UPower.conf
I simply commented out whole config, leaving empty
<busconfig></busconfig>
tag.
You could use a script that closes the message as soon as it opens (with the delay of 0.5 seconds, it takes time for the message window to open). This is not perfect, because it closes the last notification window in the window stack. Therefore there is a small chance to close the wrong notification if it appears at almost the same time as the one with the message summary "Mouse battery low".
Dependancies:
sudo apt install python-dbus wmctrl -y
This one is for xfce. You'll have to tweak it for gnome, if that is what you use. For xfce next command closes the last notification window:
wmctrl -i -c $(wmctrl -lx | awk '/xfce4-notifyd\.Xfce4-notifyd/{print $1}' | tail -n 1)
awk filters the window(s) with the window class xfce4-notifyd.
For mate-desktop window class is mate-notification-daemon, I'm not sure for Gnome.
Change that line for your DE in the script.
Save next script, make it executable and set it to run on startup.
#!/usr/bin/env python
import glib
import dbus
import os
import time
from dbus.mainloop.glib import DBusGMainLoop
def close_notification(bus, message):
keys = ["app_name", "replaces_id", "app_icon", "summary",
"body", "actions", "hints", "expire_timeout"]
args = message.get_args_list()
if len(args) == 8:
notification = dict([(keys[i], args[i]) for i in range(8)])
if notification["summary"] == "Mouse battery low":
time.sleep(.5)
# Adapt next command for your DE
os.system("wmctrl -i -c $(wmctrl -lx | awk '/xfce4-notifyd\.Xfce4-notifyd/{print $1}' | tail -n 1)")
loop = DBusGMainLoop(set_as_default=True)
session_bus = dbus.SessionBus()
session_bus.add_match_string_non_blocking("type='method_call',interface='org.freedesktop.Notifications',member='Notify',eavesdrop=true")
session_bus.add_message_filter(close_notification)
glib.MainLoop().run()
Copying the solution from a blog post. Use at your own risk.
disable_mouse_notification.sh
#!/bin/bash
set -e
# https://wrgms.com/disable-mouse-battery-low-spam-notification/
# Check which version you're using
upower --version
UPOWER_ORIG_VER=`upower --version`
# Check Debian / Ubuntu vs. Arch Linux / Manjaro
OS=`awk -F= '/^ID=/{print $2}' /etc/os-release`
OS_VER=`awk -F= '/^VERSION_ID=/{print $2}' /etc/os-release | cut -d "\"" -f 2`
if [[ "$OS" == "manjaro" ]]
then
echo "Manjaro detected"
sudo pacman -S base-devel gtk-doc gobject-introspection git
PATH_UPOWERD="/usr/lib"
PATH_UPOWER="/usr/bin"
elif [[ "$OS" == "ubuntu" ]]
then
sudo apt install git gtk-doc-tools gobject-introspection libgudev-1.0-dev libusb-1.0-0-dev autoconf libtool autopoint
if [[ "$OS_VER" == "20.10" ]]
then
echo "Ubuntu version 20.10 (Groovy Gorilla) detected"
PATH_UPOWERD="/usr/libexec"
PATH_UPOWER="/usr/bin"
else
echo "Ubuntu version <= 20.04 detected"
PATH_UPOWERD="/usr/lib/upower"
PATH_UPOWER="/usr/bin"
fi
else
echo "Unknown system; this script was only tested on ubuntu and manjaro."
exit 1
fi
# Download and patch upowerd
#
git clone https://gitlab.freedesktop.org/upower/upower
cd upower/src
wget https://gist.githubusercontent.com/guiambros/f2bf07f1cc085f8f0b0a9e04c0a767b4/raw/ef90dfcfa2489bab577bd984a6082abacdf8b0b1/up-device.patch
patch < up-device.patch
cd ..
./autogen.sh
./configure
make
# Install upowerd
#
pushd .
cd src/.libs
strip upowerd
sudo chown root.root upowerd
sudo mv upowerd ${PATH_UPOWERD}/upowerd-silent
cd ${PATH_UPOWERD}
sudo mv upowerd upowerd-original
sudo ln -s upowerd-silent upowerd
popd
# Install upower
#
pushd .
cd tools/.libs
strip upower
sudo chown root.root upower
sudo mv upower ${PATH_UPOWER}/upower-silent
cd ${PATH_UPOWER}
sudo mv upower upower-original
sudo ln -s upower-silent upower
popd
# Restart upowerd
#
sudo systemctl restart upower
# Compare versions before/after (they will likely be different, but it depends on what your distro packages by default)
echo "upower version BEFORE the update:"
echo "${UPOWER_ORIG_VER}"
echo "-------------------------------------"
echo "upower version AFTER the update:"
upower --version
Result:
$ upower --version
upower: symbol lookup error: upower: undefined symbol: up_client_get_devices2
At least the notification is gone immediately.