Add Macbook brightness control script
This commit is contained in:
parent
d8c4d2ffb3
commit
bdd3b6c297
147
home/bin/mb-brightness
Executable file
147
home/bin/mb-brightness
Executable file
|
@ -0,0 +1,147 @@
|
|||
#!/usr/bin/env python
|
||||
from __future__ import print_function
|
||||
|
||||
"""mb-brightness: Adjust brightness on a Macbook Air 2015.
|
||||
|
||||
On a Macbook Air 2015 the keyboard brightness controls don't work automatically (as far as Fedora 21 Xfce,
|
||||
anyway). A pop-up appears with a brightness bar indicator but the actual brightness doesn't change.
|
||||
|
||||
This model uses an Intel graphics card and you can manually adjust the brightness on the CLI, as root,
|
||||
by echoing the number into /sys/class/backlight/intel_backlight/brightness. This script is a helper that
|
||||
does exactly that.
|
||||
|
||||
To set up, you'll need to edit your sudoers file to allow executing this script as root without a password:
|
||||
%wheel ALL=(ALL) NOPASSWD: /home/noah/bin/mb-brightness
|
||||
|
||||
Usage: mb-brightness [--up --down --set %]
|
||||
See mb-brightness --help
|
||||
|
||||
You can set the brightness to a specific setting (percentage) by doing e.g. `mb-brightness --set 100`
|
||||
|
||||
Set this up in your desktop's key bindings. For example I chose Command+< and Command+> to decrease and increase
|
||||
brightness, respectively:
|
||||
|
||||
* Command+< : sudo /home/noah/bin/mb-brightness --down
|
||||
* Command+> : sudo /home/noah/bin/mb-brightness --up
|
||||
|
||||
This script has a minimum brightness coded into it so that the brightness won't drop below 5%. If the brightness
|
||||
gets set to 0% the backlight gets completely turned off, which isn't fun for anybody.
|
||||
|
||||
--Kirsle
|
||||
http://sh.kirsle.net
|
||||
"""
|
||||
|
||||
# Device file paths. Edit this script if these differ on your system.
|
||||
BRIGHTNESS = "/sys/class/backlight/intel_backlight/brightness"
|
||||
MAX_BRIGHTNESS = "/sys/class/backlight/intel_backlight/max_brightness"
|
||||
|
||||
# Set a minimum brightness level, because at 0% brightness the backlight turns completely off.
|
||||
MIN_BRIGHTNESS = 5
|
||||
|
||||
import os
|
||||
import sys
|
||||
import argparse
|
||||
import logging
|
||||
|
||||
logging.basicConfig()
|
||||
logger = logging.getLogger("mb-brightness")
|
||||
logger.setLevel(logging.INFO)
|
||||
|
||||
def main(args):
|
||||
"""Main function."""
|
||||
if args.debug:
|
||||
logger.setLevel(logging.DEBUG)
|
||||
|
||||
# Input validation.
|
||||
if args.up and args.down:
|
||||
die("--up and --down are mutually exclusive; use only one!")
|
||||
if args.interval < 0 or args.interval > 100:
|
||||
die("Interval must be a valid percentage between 0 and 100.")
|
||||
if args.set is not None and args.set < 0 or args.set > 100:
|
||||
die("Percentage for --set must be between 0 and 100.")
|
||||
|
||||
# Got root?
|
||||
if os.geteuid() != 0:
|
||||
die("Got root?")
|
||||
|
||||
# Get the max brightness.
|
||||
maximum = cat(MAX_BRIGHTNESS)
|
||||
logger.debug("Maximum brightness: {}".format(maximum))
|
||||
|
||||
# The value we're setting it to.
|
||||
percent = 50
|
||||
|
||||
# Have a hard value to set to?
|
||||
if args.set:
|
||||
percent = args.set
|
||||
else:
|
||||
# Moving it by an interval. First calculate the current brightness percentage.
|
||||
brightness = cat(BRIGHTNESS)
|
||||
percent = int((float(brightness) / float(maximum)) * 100)
|
||||
logger.debug("Current brightness percent: {}%".format(percent))
|
||||
|
||||
# Bump the percentage and cap the result.
|
||||
if args.up:
|
||||
percent += args.interval
|
||||
elif args.down:
|
||||
percent -= args.interval
|
||||
if percent < 0: percent = 0
|
||||
if percent > 100: percent = 100
|
||||
|
||||
# Set the brightness.
|
||||
set_brightness(percent, maximum)
|
||||
|
||||
|
||||
def set_brightness(percent, maximum):
|
||||
"""Write the brightness as a percentage (0-100)."""
|
||||
if percent < MIN_BRIGHTNESS:
|
||||
percent = MIN_BRIGHTNESS
|
||||
|
||||
brightness = int(float(maximum) * (float(percent) / 100))
|
||||
logger.debug("Setting brightness to {} ({}%)".format(brightness, percent))
|
||||
logger.debug("Write {} > {}".format(brightness, BRIGHTNESS))
|
||||
fh = open(BRIGHTNESS, "w")
|
||||
fh.write(str(brightness))
|
||||
fh.close()
|
||||
|
||||
|
||||
def cat(file):
|
||||
"""Read an integer value from a file."""
|
||||
logger.debug("Read value from: {}".format(file))
|
||||
fh = open(file, "r")
|
||||
value = fh.read().strip()
|
||||
fh.close()
|
||||
return int(value)
|
||||
|
||||
|
||||
def die(message):
|
||||
"""Print a message and exit with a non-zero code."""
|
||||
print(message)
|
||||
sys.exit(1)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
parser = argparse.ArgumentParser(description="Macbook Brightness Helper")
|
||||
parser.add_argument("--debug",
|
||||
help="Turn on verbose logging, for debugging.",
|
||||
action="store_true",
|
||||
)
|
||||
parser.add_argument("--interval", "-i",
|
||||
help="The brightness percentage interval, default 5.",
|
||||
type=int,
|
||||
default=5,
|
||||
)
|
||||
parser.add_argument("--up", "-u",
|
||||
help="Increase the brightness by the set interval.",
|
||||
action="store_true",
|
||||
)
|
||||
parser.add_argument("--down", "-d",
|
||||
help="Decrease the brightness by the set interval.",
|
||||
action="store_true",
|
||||
)
|
||||
parser.add_argument("--set", "-s",
|
||||
help="Set the brightness to a specific percentage level (0-100).",
|
||||
type=int,
|
||||
)
|
||||
args = parser.parse_args()
|
||||
main(args)
|
Loading…
Reference in New Issue
Block a user