Created
September 22, 2014 12:41
-
-
Save brownman/463e326c86fe670f0fa8 to your computer and use it in GitHub Desktop.
brightness_lenovo.py
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/python | |
#http://ideone.com/yPlo5 | |
#http://askubuntu.com/questions/57236/unable-to-change-brightness-in-a-lenovo-laptop | |
# Brightness changer script for Linux systems that don't really support brightness. | |
# Created by Oleh 'BlaXpirit' Prypin. | |
# Tested with Python 2.7 and 3.2, but Python 3 is recommended. | |
usage=""" | |
brightness | |
- get current brightness setting | |
brightness restore | |
- set the brightness to the last used value | |
brightness <value> | |
- set the brightness to *value* | |
brightness inc [step] | |
brightness dec [step] | |
- increase or decrease the brightness by *step* (if it's not specified, a default value is used from the configuration file, usually 10% of maximal brightness) | |
""" | |
config_file='/etc/bx_brightness.conf' | |
######################################## | |
import sys,os,collections,subprocess | |
def find_backlight_device(): | |
path='/sys/class/backlight/' | |
try: | |
return os.path.join(path,os.listdir(path)[0]) | |
except: | |
print('No backlight device found!') | |
exit(2) | |
# Settings: (name,(type,default)) | |
s=collections.OrderedDict(( | |
('device_path' ,(str,find_backlight_device)), | |
('min_brightness',(int,lambda:0)), | |
('max_brightness',(int,lambda:int(open(os.path.join(s['device_path'],'max_brightness')).read()))), | |
('step' ,(int,lambda:max(1,(s['max_brightness']-s['min_brightness'])//10))), | |
('brightness' ,(int,lambda:int(open(os.path.join(s['device_path'],'brightness')).read()))), | |
)) | |
# Read settings from config file | |
try: | |
for l in open(config_file).read().split('\n'): | |
l=l.split('=',1) | |
if len(l)==2 and l[0] in s: | |
s[l[0]]=s[l[0]][0](l[1]) | |
except: | |
pass | |
# Replace the settings that couldn't be read with defaults | |
for k,v in s.items(): | |
if isinstance(v,tuple): | |
s[k]=v[1]() | |
# Makes the number *v* be in range [*minv*, *maxv*] | |
def btw(minv,v,maxv): | |
if v<minv: v=minv | |
if v>maxv: v=maxv | |
return v | |
# Sets the brightess setting and writes it to the 'brightness' file | |
def set_brightness(b): | |
s['brightness']=btw(s['min_brightness'],b,s['max_brightness']) | |
with open(os.path.join(s['device_path'],'brightness'),'w') as f: | |
f.write(str(s['brightness'])) | |
p=sys.argv[1:] | |
# brightness | |
if len(p)==0: | |
print('{}/{}'.format(s['brightness'],s['max_brightness'])) | |
exit(0) | |
# brightness restore | |
elif len(p)==1 and p[0]=='restore': | |
subprocess.call(['chmod','666',os.path.join(s['device_path'],'brightness')]) | |
set_brightness(s['brightness']) | |
# brightness <value> | |
elif len(p)==1 and p[0].isdigit(): | |
set_brightness(int(p[0])) | |
# brightness inc [step] | |
# brightness dec [step] | |
elif p[0] in ('inc','dec'): | |
try: | |
step=int(p[1]) | |
except: | |
step=s['step'] | |
set_brightness(s['brightness']+step*(1 if p[0]=='inc' else -1)) | |
else: | |
print(usage) | |
exit(1) | |
# Save settings | |
e=os.path.exists(config_file) | |
with open(config_file,'w') as f: | |
f.write('\n'.join('{}={}'.format(*i) for i in s.items())) | |
if not e: subprocess.call(['chmod','666',config_file]) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
tool: xbacklight
problem: minimum was too bright for me OR didn't set the maximum brightness - only adjust the level by integer percentage.
this script: gave great solution for setting the brightness.
ref:
http://askubuntu.com/questions/57236/unable-to-change-brightness-in-a-lenovo-laptop
http://ideone.com/yPlo5