|
@@ -0,0 +1,49 @@
|
|
|
+#!/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
|
|
|
+
|
|
|
+ loop.run()
|
|
|
+
|
|
|
+if __name__ == "__main__":
|
|
|
+ sys.exit(main(sys.argv[1:]))
|