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