Skip to content

Instantly share code, notes, and snippets.

@michel-slm
Created July 14, 2011 07:22
Show Gist options
  • Save michel-slm/1082058 to your computer and use it in GitHub Desktop.
Save michel-slm/1082058 to your computer and use it in GitHub Desktop.
For i915 systems with broken ACPI backlight controls, synchronize the ACPI value with the native control
#!/bin/bash
# Copyright (c) 2011, Michel Alexandre Salim <[email protected]>
# Permission is hereby granted, without written agreement and without
# license or royalty fees, to use, copy, modify, and distribute this
# software and its documentation for any purpose, provided that the
# above copyright notice and the following two paragraphs appear in
# all copies of this software.
#
# IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR
# DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
# ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN
# IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
# DAMAGE.
#
# THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,
# BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
# FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS
# ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO
# PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
BACKLIGHT_DIR=/sys/class/backlight
ACPI=${BACKLIGHT_DIR}/acpi_video0
INTEL=${BACKLIGHT_DIR}/intel_backlight
ACPI_MAX=`cat ${ACPI}/max_brightness`
INTEL_MAX=`cat ${INTEL}/max_brightness`
# this is about 500
#MULTIPLIER=$((INTEL_MAX/(ACPI_MAX+1)))
MULTIPLIER=500
MIN_BRIGHTNESS=$((INTEL_MAX-(MULTIPLIER*ACPI_MAX)))
function fib {
let a=$1
let b=$2
let n=$3
if [ $n == 0 ]; then
INTEL_BRIGHTNESS=$a
else
fib $b $((a + b)) $((n-1))
fi
}
while inotifywait -e modify ${ACPI}/brightness >/dev/null 2>&1; do
BRIGHTNESS=`cat ${ACPI}/brightness`
# specially handle maximum value
if [ ${BRIGHTNESS} == ${ACPI_MAX} ]; then
INTEL_BRIGHTNESS=$INTEL_MAX
else
# arithmetic
INTEL_BRIGHTNESS=$((MULTIPLIER*(BRIGHTNESS+1)))
# geometric
#INTEL_BRIGHTNESS=$((INTEL_MAX >> (8-BRIGHTNESS)))
#INTEL_BRIGHTNESS=$((25 << BRIGHTNESS))
#fibonacci
#fib 100 200 $(BRIGHTNESS)
fi
echo ${INTEL_BRIGHTNESS} > ${INTEL}/brightness
done
@pinard
Copy link

pinard commented Mar 24, 2012

Thanks for this, Michel. I found it very useful while seeking a way to get backlight control to work on my new computer! :-) François

@dotdoom
Copy link

dotdoom commented Sep 16, 2012

Great! Thank you very much.
Note for Fedora users: you may need to install inotify-tools for inotifywait command to work.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment