Assumption

Adjusting the backlighting of screens in your laptop/notebook or all-in-one computers should 'just work' in many of the well known desktop environments such as:

1. Unity IconsPage/ubuntu.png

2. Gnome https://wiki.ubuntu.com/UbuntuGNOME/Artwork/Graphics?action=AttachFile&do=get&target=roundel32.png

3. KDE IconsPage/kubuntu.png

Challenge

With the constant and ever changing designs of display hardware along with the evolving architecture of the Linux kernel -- occasionally, the adjustment of the screen backlight will fail using in-built methods. And, if you are using a standalone window manager without a desktop environment such as Openbox, then -- you are often left without a method to do so built-in to the keyboard grabbing code of the underlying system to begin with.

Cause

Ever since the inception of hardware abstracted video display technology, such as the Xorg server, a challenge for the software developers of operating system's has been to provide 'discoverable' methods for users to control the graphics hardware underlying their computer systems. In particular, with the advent of laptops/notebooks and all-in-one desktops, the control of backlighting the screen has gradually and seemingly totally moved away from hardware controls to that of software in the video sub-system. Our operating systems must now issue the commands that were once the job of BIOS firmware in conjunction with hardware keys or buttons. The methods for doing this in software have become varied and ever-changing over the past few years. We must trust that our /sys/ directories will populate with the correct /class/backlight/ entries and that when they do, ... our OS will know how to manipulate them.

Solution

If your Linux boot scripts are able to probe and load the correct drivers for the video hardware that is responsible for adjusting backlighting then you probably would not be reading this right now. And so ... if the desktop environment is not able to adjust the lighting or if you are using a standalone window manager, then -- here is a script that, when properly adjusted for the intended system, might just work:

Use your preferred editor(gedit | nano | vi | emacs)

$ sudo vi /usr/local/bin/sysbacklight

Then copy/paste the following script into your new file and customize it:

#!/bin/bash

# backlight brightness controls. use freely
# and adjust sysfs directory to your backlight type. 
# $author Brice Burgess @iceburg


# modified by Chris Rainey for a Lenovo ideacentre AIO 300-22ACL
# running openbox on Ubuntu 16.04
#  sysfs="/sys/class/backlight/radeon_bl0"

# modified by Chris Rainey for a HP Notebook 15-ay039wm
# running openbox on Ubuntu 16.10
sysfs="/sys/class/backlight/intel_backlight"


max=`cat ${sysfs}/max_brightness`
level=`cat ${sysfs}/brightness`


usage()
{
script=${0##*/}
echo
echo "Invalid usage of ${script}!"
echo "  $1"
echo "----------------"
echo "$script up     : increases brightness"
echo "$script down   : decreases brightness"
echo "$script set #  : sets brightness to # (integer)"
echo "----------------"
echo


exit 1
}

set_brightness()
{

level=$1

if [ $level -lt 1 ] ; then
 level=1
elif [ $level -gt $max ] ; then
 level=$max
fi
 
echo $level > $sysfs/brightness 
}

case "$1" in
  up)
    let "level+=50"
    set_brightness $level 
    ;;
  down)
    let "level-=50"
    set_brightness $level 
    ;;
  set)
    if [[ ! $2 =~ ^[[:digit:]]+$ ]]; then
     usage "second argument must be an integer"
    fi

    set_brightness $2
    ;;
  *)
    usage "invalid argument"
esac

Make the file executable:

$ sudo chmod 755 /usr/local/bin/sysbacklight

Do you want to be able to run this script without entering a password or from a keyboard shortcut? Here's how:

$ sudo visudo -f /etc/sudoers.d/myOverrides

Then copy/paste the following script into your new file and customize it:

%sudo   ALL=NOPASSWD:/usr/local/bin/sysbacklight

Make the script read-only:

$ sudo chmod 440 /etc/sudoers.d/myOverrides

Now ... make a keyboard shortcut that mimics what your laptop/notebook or all-in-one keyboard might do in one of those 'other' operating systems where it normally works:

$ vi .config/openbox/rc.xml

Then copy/paste the following snippet, if using Openbox, into your ~/.config/openbox/rc.xml file between the <keyboard> ... </keyboard> sections and customize it:

    </keybind>
    <keybind key="XF86MonBrightnessUp">
      <action name="Execute">
        <command>sudo sysbacklight up</command>
      </action>
    </keybind>
    <keybind key="XF86MonBrightnessDown">
      <action name="Execute">
        <command>sudo sysbacklight down</command>
      </action>
    </keybind>

Test, rinse & repeat as needed!


CategoryHardware CategoryCommandLine CategoryFaq CategoryVideo

Backlight (last edited 2017-05-16 16:54:28 by ckrainey)