Add functioning cbacklight
This commit is contained in:
parent
762ea6bc10
commit
6ab666557b
2 changed files with 137 additions and 36 deletions
36
brightness
36
brightness
|
@ -1,36 +0,0 @@
|
||||||
#!/usr/bin/python3
|
|
||||||
|
|
||||||
import glob
|
|
||||||
import os
|
|
||||||
import argparse
|
|
||||||
|
|
||||||
basepath="/sys/class/backlight/"
|
|
||||||
|
|
||||||
def get_dirs():
|
|
||||||
return glob.glob("{}*".format(basepath)):
|
|
||||||
|
|
||||||
def get_driver_from_dir(directory):
|
|
||||||
regexp = r"{}(?P<driver>.+)".format(basepath)
|
|
||||||
return re.match(regexp, directory).groupdict()['driver']
|
|
||||||
|
|
||||||
for dir in
|
|
||||||
valf = os.path.join(dir, "brightness")
|
|
||||||
maxf = os.path.join(dir, "max_brightness")
|
|
||||||
|
|
||||||
with open(valf, "r") as fd:
|
|
||||||
val = int("".join(fd.readlines()))
|
|
||||||
|
|
||||||
with open(maxf, "r") as fd:
|
|
||||||
maxval = int("".join(fd.readlines()))
|
|
||||||
|
|
||||||
percent = (val/maxval)*100
|
|
||||||
|
|
||||||
print("{} {} = {:.2f}%".format(val,maxval,percent))
|
|
||||||
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
|
||||||
parser = argparse.ArgumentParser(description='cbacklight')
|
|
||||||
|
|
||||||
parser.add_argument('--inc', help='Increment by percentage (points)')
|
|
||||||
parser.add_argument('--dec', help='Decrement by percentage (points)')
|
|
||||||
parser.add_argument('--set', help='Set to percentage')
|
|
137
cbackblight
Normal file
137
cbackblight
Normal file
|
@ -0,0 +1,137 @@
|
||||||
|
#!/usr/bin/python3
|
||||||
|
# Nico Schottelius
|
||||||
|
# 2018-03-30
|
||||||
|
# Copying: GPLv3
|
||||||
|
#
|
||||||
|
#
|
||||||
|
# Set / increase brightness to sysfs directly
|
||||||
|
#
|
||||||
|
|
||||||
|
import glob
|
||||||
|
import os
|
||||||
|
import argparse
|
||||||
|
import re
|
||||||
|
import sys
|
||||||
|
|
||||||
|
class BackLight(object):
|
||||||
|
basepath="/sys/class/backlight/"
|
||||||
|
|
||||||
|
def __init__(self, name):
|
||||||
|
self.name = name
|
||||||
|
self.dirname = os.path.join(self.basepath, name)
|
||||||
|
self.brightness_file = os.path.join(self.dirname, "brightness")
|
||||||
|
self.max_brightness_file = os.path.join(self.dirname, "max_brightness")
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def read_value(filename):
|
||||||
|
with open(filename, "r") as fd:
|
||||||
|
val = int("".join(fd.readlines()))
|
||||||
|
return val
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def write_value(filename, value):
|
||||||
|
try:
|
||||||
|
with open(filename, "w") as fd:
|
||||||
|
fd.write(str(value))
|
||||||
|
except PermissionError as e:
|
||||||
|
print("Cannot write to {}: {}".format(filename, e))
|
||||||
|
sys.exit(1)
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def get_dirs(cls):
|
||||||
|
return glob.glob("{}*".format(cls.basepath))
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def get_driver_from_dir(cls, directory):
|
||||||
|
regexp = r"{}(?P<driver>.+)".format(cls.basepath)
|
||||||
|
return re.match(regexp, directory).groupdict()['driver']
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def get_drivers(cls):
|
||||||
|
return [ cls(cls.get_driver_from_dir(x)) for x in cls.get_dirs() ]
|
||||||
|
|
||||||
|
def get_value(self):
|
||||||
|
return self.read_value(self.brightness_file)
|
||||||
|
|
||||||
|
def get_max_value(self):
|
||||||
|
return self.read_value(self.max_brightness_file)
|
||||||
|
|
||||||
|
def get_percentage(self):
|
||||||
|
val = self.get_value()
|
||||||
|
maxval = self.get_max_value()
|
||||||
|
|
||||||
|
percent = (val/maxval)*100
|
||||||
|
|
||||||
|
return percent
|
||||||
|
|
||||||
|
def get_percentage_points(self, percent):
|
||||||
|
"""Return integer equivalent to percent"""
|
||||||
|
points = int((percent * self.get_max_value()) / 100)
|
||||||
|
|
||||||
|
return points
|
||||||
|
|
||||||
|
def inc_percent(self, percent):
|
||||||
|
points = self.get_percentage_points(percent)
|
||||||
|
new_value = self.get_value() + points
|
||||||
|
self.set_value(new_value)
|
||||||
|
|
||||||
|
def dec_percent(self, percent):
|
||||||
|
points = self.get_percentage_points(percent)
|
||||||
|
new_value = self.get_value() - points
|
||||||
|
self.set_value(new_value)
|
||||||
|
|
||||||
|
def set_percent(self, percent):
|
||||||
|
new_value = int((percent * self.get_max_value()) / 100)
|
||||||
|
|
||||||
|
self.set_value(new_value)
|
||||||
|
|
||||||
|
def set_value(self, value):
|
||||||
|
if value < 0:
|
||||||
|
value = 0
|
||||||
|
if value > self.get_max_value():
|
||||||
|
value = self.get_max_value()
|
||||||
|
|
||||||
|
self.write_value(self.brightness_file, value)
|
||||||
|
|
||||||
|
def is_readable(self):
|
||||||
|
return os.access(self.max_brightness_file, os.R_OK)
|
||||||
|
|
||||||
|
def __str__(self):
|
||||||
|
return self.name
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
parser = argparse.ArgumentParser(description='cbacklight')
|
||||||
|
group = parser.add_mutually_exclusive_group()
|
||||||
|
|
||||||
|
group.add_argument('--inc', help='Increment by percentage (points)')
|
||||||
|
group.add_argument('--dec', help='Decrement by percentage (points)')
|
||||||
|
group.add_argument('--set', help='Set to percentage')
|
||||||
|
|
||||||
|
parser.add_argument('--get', help='Get percentage (default)', action='store_true')
|
||||||
|
|
||||||
|
args = parser.parse_args()
|
||||||
|
|
||||||
|
anyarg = args.inc or args.dec or args.set
|
||||||
|
|
||||||
|
drivers = BackLight.get_drivers()
|
||||||
|
|
||||||
|
method = None
|
||||||
|
if args.inc:
|
||||||
|
method = "inc_percent"
|
||||||
|
val = args.inc
|
||||||
|
if args.dec:
|
||||||
|
method = "dec_percent"
|
||||||
|
val = args.dec
|
||||||
|
if args.set:
|
||||||
|
method = "set_percent"
|
||||||
|
val = args.set
|
||||||
|
|
||||||
|
if method:
|
||||||
|
for d in drivers:
|
||||||
|
func = getattr(d, method)
|
||||||
|
func(int(val))
|
||||||
|
|
||||||
|
|
||||||
|
if not anyarg or args.get:
|
||||||
|
for d in drivers:
|
||||||
|
print("{}: {:.2f}%".format(d, d.get_percentage()))
|
Loading…
Reference in a new issue