simple-power-manager/simple-power-manager.py

151 lines
4.2 KiB
Python

#!/usr/bin/env python
# -*- coding: utf-8 -*-
from __future__ import print_function
from commands import getoutput,getstatusoutput
import pyxhook
import time
import os
import dbus
import threading
inactiveTime=time.time()
actualBright=-1
flagBright=False
flagLow=False
flagCritic=False
graphicCards=[]
settings=[["powerButton",1],["keyBright",1],["lidScreen",1],["screensaverOnSuspend",1],["notify",1],["batteryLow",20],["batteryCritic",5],["dynamicBright",0],["unplugInactiveTime",5],["unplugInactiveBright",10],["plugInactiveTime",30],["plugInactiveBright",20],["suspendInactivity",30],["suspendInactivityTime",1800]]
KBD = "269025027"
KBU = "269025026"
KSD = "269025066"
SLD = "269025201"
def getSettings():
while(True):
try:
global settings
#configFile=open(os.environ['HOME']+"/.config/simple-power-manager/config.conf","r")
configFile=open("/home/kirbylife/.config/simple-power-manager/config.conf","r")
config=configFile.read()
configFile.close()
config=config.split("\n")
for c in range(len(config)):
config[c]=config[c].split("=")
for c in settings:
for f in config:
if c[0]==f[0]:
c[1]=f[1]
break
time.sleep(20)
except:
configFile=open(os.environ['HOME']+"/.config/simple-power-manager/config.conf","w")
for c in settings:
configFile.write(c[0]+"="+str(c[1])+"\n")
configFile.close()
getSettings()
def getACAdapter():
return getoutput("cat /sys/class/power_supply/ACAD/online") == "1"
def getBatteryPercent():
energyNow=int(getoutput("cd /sys/class/power_supply/BAT* && cat energy_now"))
energyFull=int(getoutput("cd /sys/class/power_supply/BAT* && cat energy_full"))
return int(energyNow*100/energyFull)
def resetTime(event=None):
global inactiveTime,graphicCards,actualBright,flagBright
if flagBright:
for c in graphicCards:
changeBright(True,c,actualBright)
flagBright=False
inactiveTime=time.time()
def suspend(order,ssorder):
bus=dbus.SystemBus()
login1Proxy = bus.get_object('org.freedesktop.login1','/org/freedesktop/login1')
login1 = dbus.Interface(login1Proxy,'org.freedesktop.login1.Manager')
if ssorder=="1" :
getoutput("xdg-screensaver lock")
if order=="1" :
login1.Suspend(True)
elif order=="2" :
login1.Hibernate(True)
def changeBright(value,dir,percent=-1):
max=int(getoutput("cat /sys/class/backlight/"+dir+"/max_brightness"))
current=int(getoutput("cat /sys/class/backlight/"+dir+"/actual_brightness"))
if percent != -1:
current=percent*max/100
else:
if value:
if current<max :
current=current+(5*max/100)%max
else:
if current>0 :
current=current-(5*max/100)
if current<0 :
current=0
os.system("sudo echo "+str(current)+" > /sys/class/backlight/"+dir+"/brightness")
return "2"
def kbevent(event):
global running,settings,KBD,KBU,KSD,SLD,graphicCards,actualBright
resetTime()
key = str(event.Key)
if KBD in key and settings[1][1]=="1":
for c in graphicCards:
actualBright=changeBright(False,c)
elif KBU in key and settings[1][1]=="1":
for c in graphicCards:
actualBright=changeBright(True,c)
elif KSD in key and settings[0][1]!="0":
suspend(settings[0][1])
elif SLD in key and settings[2][1]!="0":
suspend(settings[2][1],settings[3][1])
def main(args):
global settings,actualBright,graphicCards,inactiveTime,flagBright
threadSettings=threading.Thread(target=getSettings)
hookman = pyxhook.HookManager()
hookman.KeyDown = kbevent
hookman.KeyUp=hookman.MouseAllButtonsDown=hookman.MouseAllButtonsUp=hookman.MouseMovement=resetTime
hookman.HookKeyboard()
hookman.HookMouse()
threadSettings.start()
hookman.start()
graphicCards=getoutput("ls /sys/class/backlight").split("\n")
while True:
currentTime = time.time()-inactiveTime
if settings[7][1]=="1":
if(getACAdapter()):
options=[8,9]
else:
options=[10,11]
print(options)
if int(currentTime)>=int(settings[options[0]][1]):
#print (1)
if flagBright == False:
for c in graphicCards:
changeBright(True,c,int(settings[options[1]][1]))
flagBright = True
if settings[12][1]=="1":
if int(currentTime) >= int(settings[13][1]):
suspend("1",settings[3][1])
if settings[4][1]=="1":
None
time.sleep(0.1)
hookman.cancel()
if __name__ == '__main__':
import sys
sys.exit(main(sys.argv))