Ubuntu – Brightness Profiles Ubuntu 14.04.5

14.04brightnessdell

Usually, laptop screens are dim set to the lowest level of brightness when the charger is not present, and brighten up to the max level if the charger is present/connected. However, on my Dell Inspiron 7559 Skylake laptop, this does not happen. My laptop is always on 100% brightness. How can I retrieve this "feature"?

Best Answer

Introduction

The script below is modified version of my previous scripts, written in python and using dbus exclusively for polling ac_adapter presence and setting the screen brightness.

Usage

Usage is simple: call from command line as

python ./brightness_control.py

The script defaults to 100% brightness on AC , 10% on battery. Users can use -a and -b to set their desired brightness levels on ac and battery respectively.

AS given by -h option:

$ ./brightness_control.py -h                                                                                                          
usage: brightness_control.py [-h] [-a ADAPTER] [-b BATTERY]

    Simple brightness control for laptops,
    depending on presense of AC power supply


optional arguments:
  -h, --help            show this help message and exit
  -a ADAPTER, --adapter ADAPTER
                        brightness on ac
  -b BATTERY, --battery BATTERY
                        brightness on battery

For example, one can do any of the following:

# set non default for brightness on ac
$ ./brightness_control.py -a 80 
# set non-default value for brightness on battery
$ ./brightness_control.py -b 20 
# set non-default values for both
$ ./brightness_control.py -a 80 -b 20

Source

Also available on GitHub

#!/usr/bin/env python
"""
Author: Serg Kolo <1047481448@qq.com>
Date:   Nov 3rd , 2016
Purpose:Brightness control depending on
        presence of ac adapter
Written for: http://askubuntu.com/q/844193/295286 
"""
import argparse
import dbus
import time
import sys

def get_dbus_property(bus_type, obj, path, iface, prop):
    """ utility:reads properties defined on specific dbus interface"""
    if bus_type == "session":
        bus = dbus.SessionBus()
    if bus_type == "system":
        bus = dbus.SystemBus()
    proxy = bus.get_object(obj, path)
    aux = 'org.freedesktop.DBus.Properties'
    props_iface = dbus.Interface(proxy, aux)
    props = props_iface.Get(iface, prop)
    return props

def get_dbus_method(bus_type, obj, path, interface, method, arg):
    """ utility: executes dbus method on specific interface"""
    if bus_type == "session":
        bus = dbus.SessionBus()
    if bus_type == "system":
        bus = dbus.SystemBus()
    proxy = bus.get_object(obj, path)
    method = proxy.get_dbus_method(method, interface)
    if arg:
        return method(arg)
    else:
        return method()

def on_ac_power():
    adapter = get_adapter_path()
    call = ['system','org.freedesktop.UPower',adapter,
            'org.freedesktop.UPower.Device','Online'
    ]

    if get_dbus_property(*call): return True

def get_adapter_path():
    """ Finds dbus path of the ac adapter device """
    call = ['system', 'org.freedesktop.UPower',
            '/org/freedesktop/UPower','org.freedesktop.UPower',
            'EnumerateDevices',None
    ]
    devices = get_dbus_method(*call)
    for dev in devices:
        call = ['system','org.freedesktop.UPower',dev,
                'org.freedesktop.UPower.Device','Type'
        ]
        if get_dbus_property(*call) == 1:
            return dev

def set_brightness(*args):
    call = ['session','org.gnome.SettingsDaemon.Power', '/org/gnome/SettingsDaemon/Power', 
            'org.gnome.SettingsDaemon.Power.Screen', 'SetPercentage', args[-1]
    ]
    get_dbus_method(*call)

def parse_args():
    info = """
    Simple brightness control for laptops,
    depending on presense of AC power supply
    """
    arg_parser = argparse.ArgumentParser(
                 description=info,
                 formatter_class=argparse.RawTextHelpFormatter)
    arg_parser.add_argument(
               '-a','--adapter',action='store',
               type=int, help='brightness on ac',
               default=100,
               required=False)

    arg_parser.add_argument(
               '-b','--battery',action='store',
               type=int, help='brightness on battery',
               default=10,
               required=False)
    return arg_parser.parse_args()

def main():
    args = parse_args()

    while True:
        if on_ac_power():
            set_brightness(args.adapter)
            while on_ac_power():
                time.sleep(1)
        else:
            set_brightness(args.battery)
            while not on_ac_power():
                time.sleep(1)

if __name__ == "__main__": main()