Showing Bluetooth Battery Percentage On Your Desktop

_nic
3 min readFeb 17, 2022

I use a tool called GeekTool to show the battery percentage of my bluetooth connected devices on my desktop. It makes it easier to keep an eye on them and know when they need charged.

Since switching to an Apple M1 laptop my old script broke, so I took a little time to update it. I used to pull the information from system_profiler but it seems it's been removed. the ioreg command, now list the current battery percentage of any bluetooth connected devices

ioreg -r -l -k "BatteryPercent"

This might look like it gives you a lot of output, but we really just need to parse it, to get what we want. The below command will give you current battery percentage for an Apple Magic Keyboard and Magic Mouse. Other products can be listed, but you’d have to run the above ioreg command and get the Product name to switch out in the command.

KeyboardPercent=$(ioreg -r -l -k "BatteryPercent" \
| grep -A 9 "Magic Keyboard with Touch ID" \
| grep "BatteryPercent" \
| awk '{print $3}')

MousePercent=$(ioreg -r -l -k "BatteryPercent" \
| grep -A 9 "Magic Mouse" \
| grep "BatteryPercent" \
| awk '{print $3}')

echo "Keyboard Battery Level: $KeyboardPercent"
echo "Mouse Battery Level: $MousePercent"

Once I have the command working, I update my GeekTool script. There’s a little more formatting here then just show me the percentage and GeekTool is more sensitive to whitespace. The below command is what I use to paste into the script editor to give me the output in the screenshot.

# Bluetooth Keyboard ------------------------------------------------------------------
KeyboardPercent=$(ioreg -r -l -k "BatteryPercent" | grep -A 9 "Magic Keyboard with Touch ID" | grep "BatteryPercent" | awk '{print $3}')

typeset -i b=5
echo "Keyboard:\t\t\c"

if [ ${KeyboardPercent} = 0 ]
then
echo "Disconnected\c"
else
if [ $KeyboardPercent -lt 11 ]
then
echo "\033[1;31m\c"
else
echo "\033[0m\c"
fi
while [ $b -le $KeyboardPercent ]
do
echo "|\c"
b=`expr $b + 5`
done
while [ $b -le 100 ]
do
echo "\033[1;37m|\033[0m\c"
b=`expr $b + 5`
done
echo "\033[0m $KeyboardPercent%\c"
unset KeyboardPercent
unset b
fi

echo "\033[0m\nMouse:\t\t\t\c"

# Bluetooth Mouse ----------------------------------------------------------------------
MousePercent=$(ioreg -r -l -k "BatteryPercent" | grep -A 9 "Magic Mouse" | grep "BatteryPercent" | awk '{print $3}')

if [ ${MousePercent} = 0 ]
then
echo "Disconnected\c"
else
if [ $MousePercent -lt 11 ]
then
echo "\033[1;31m\c"
else
echo "\033[0m\c"
fi
typeset -i b=5
while [ $b -le $MousePercent ]
do
echo "|\c"
b=`expr $b + 5`
done
while [ $b -le 100 ]
do
echo "\033[1;37m|\033[0m\c"
b=`expr $b + 5`
done
echo "\033[0m $MousePercent%\c"
unset MousePercent
unset b
fi

Scripts can be found here.

--

--