#!/usr/bin/env python import os import sys import pydbus import datetime from gi.repository import GLib def main(argv): loop = GLib.MainLoop() battery = pydbus.SystemBus().get( 'org.freedesktop.UPower', '/org/freedesktop/UPower/devices/battery_BAT0', ) def battery_changed(): """ screen backtick does not kill the backtick process whenever the screen terminates. """ if os.getppid() == 1: loop.quit() """ 0: Unknown 1: Charging 2: Discharging 3: Empty 4: Fully charged 5: Pending charge 6: Pending discharge """ if battery.State == 2: sys.stdout.write('%.1fW %s\n' % ( battery.EnergyRate, (datetime.datetime.now() + datetime.timedelta(seconds = battery.TimeToEmpty)).strftime("%H:%M"), )) elif battery.State == 4: sys.stdout.write('full\n') else: sys.stdout.write('%d%% %s\n' % ( battery.Percentage, (datetime.datetime.now() + datetime.timedelta(seconds = battery.TimeToFull)).strftime("%H:%M"), )) sys.stdout.flush() battery.onChanged = battery_changed battery.onPropertiesChanged = lambda interface, attr, l: battery_changed() loop.run() if __name__ == "__main__": sys.exit(main(sys.argv[1:]))