+perc=$(dbus-send --print-reply=literal --system \
+ --dest=org.freedesktop.UPower \
+ /org/freedesktop/UPower/devices/battery_BAT0 \
+ org.freedesktop.DBus.Properties.Get \
+ string:org.freedesktop.UPower.Device \
+ string:'Percentage' | awk '{print $3}')
+
+state=$(dbus-send --print-reply=literal --system \
+ --dest=org.freedesktop.UPower \
+ /org/freedesktop/UPower/devices/battery_BAT0 \
+ org.freedesktop.DBus.Properties.Get \
+ string:org.freedesktop.UPower.Device \
+ string:'State' | awk '{print $3}')
+
+if [ "$state" -eq 2 ]; then # Discharging
+ secs=$(dbus-send --print-reply=literal --system \
+ --dest=org.freedesktop.UPower \
+ /org/freedesktop/UPower/devices/battery_BAT0 \
+ org.freedesktop.DBus.Properties.Get \
+ string:org.freedesktop.UPower.Device \
+ string:'TimeToEmpty' | awk '{print $3}')
+ printf '%s%%%%%2dh%02dm\n' "$perc" $((secs/3600)) $((secs%3600/60))
+elif [ "$state" -eq 1 ]; then # Charging
+ secs=$(dbus-send --print-reply=literal --system \
+ --dest=org.freedesktop.UPower \
+ /org/freedesktop/UPower/devices/battery_BAT0 \
+ org.freedesktop.DBus.Properties.Get \
+ string:org.freedesktop.UPower.Device \
+ string:'TimeToFull' | awk '{print $3}')
+ printf '%s%%%%%2dh%02dm\n' "$perc" $((secs/3600)) $((secs%3600/60))
+fi