Change the brightness adjustment interval

Since you haven't specified which desktop environment you use, I'll provide some KDE-specific details as well.

I've just updated KDE to 4.9.2 and met with the same inconvenience. I decided to dig into the code, and here are my conclusions:

  1. Brightness is actually controlled by kernel itself. According to KDE's PowerDevil source code, there exist two basic ways for kernels to provide control interface:
    • sysctl() system call (likely on *BSD systems, I suppose)
    • sysfs interface (likely Linux)
  2. sysfs interface is located at /sys/class/backlight/*your_backlight_type*/. Here's what it looks like for me:
    $ ls -1 /sys/class/backlight/intel_backlight/
    actual_brightness
    bl_power
    brightness
    device
    max_brightness
    power
    subsystem
    type
    uevent
    Two files are relevant for us now: brightness and max_brightness. And here's how they can be used:
    $ cd /sys/class/backlight/intel_backlight
    $ cat max_brightness 
    976
    $ cat brightness 
    176
    $ echo 77 | sudo tee brightness
    77
    
    First command lets you determine the maximum brightness you can set (the minimum is always zero). Second one lets you know what value the actual brightness is set to. And with the third you can set it to any value you desire in the range of [0; max_brightness].
  3. KDE's KRunner still has the freedom to set any brightness level. Press Alt-F2 and type:

    screen brightness 17

  4. KDE's keyboard Brightness Up and Brightness Down key handling code has increment value of 10% hard-coded. Hence, unless you want to mess with building KDE from sources, there's nothing you can do with it.

  5. KDE's BatteryMonitor plasmoid has its own brightness control, whose increment is also hard-coded as 10%, but now we're lucky enough, since it is written in QML: $ sudo nano /usr/share/kde4/apps/plasma/plasmoids/battery/contents/ui/PopupDialog.qml (upd: in KDE 4.11 it has been moved to BrightnessItem.qml), navigate to section that looks like

    Components.Slider {
            id: brightnessSlider
            minimumValue: 0
            maximumValue: 100
            stepSize: 10
            onValueChanged: brightnessChanged(value)
        }
    and change the step size to what you desire. After relogin you'll see the change.

This is what I've done, and it works a lot better for me. My screen has a lot of brightness increments, as it's LED backlit and someone thought to take advantage of that.

sudo apt-get install xbacklight
# ..and test it..
xbacklight -dec 20
xbacklight -inc 20
# If this works for you, you can proceed

I'm using KDE, but this applies for Gnome as well. For KDE:

  • Open System Settings
  • Open Shortcuts and Gestures
  • Select Custom Shortcuts in the left bar, if it's not already selected
  • Right-click on a blank part of the list of actions, and select New->Global Shortcut
  • Create one named "Brightness up" and one named "Brightness down"
  • For the trigger, use your brightness-up/down keys. These will conflict with the defaults, but you can just reassign them to this action.
  • For the Action, enter (for example) "xbacklight -inc 3" or "xbacklight -dec 3" (minus quotes)
    • Larger numbers increase/decrease the backlight more, and smaller numbers less.

You can also set a specific percentage:

xbacklight -set 100

Sometimes, an increment or percentage change may have no effect. This is because the hardware only allows specific settings, and the closest setting to the percentage selected is used.

Incidentally, I happily found out that even though this is a more low-level program that is making the change, KDE still recognizes that the screen brightness has changed and displays the brightness percentage appropriately. :-)