Sorry for the delay in this. I managed to cobble together a solution shortly after posting my original message but haven't gotten around to documenting this until now.
This solution is the product of adapting several other forum posts and bugfixes already in existence. See my references at the following locations:
http://ubuntuforums.org/showthread.php?t=1550219
https://bugs.launchpad.net/ubuntu/+s...et/+bug/644898
From my original message, I still contend this issue exists because of a buggy implementation of the toshiba_acpi kernel module as it's distributed with the Linux kernel. I have yet to input a formal bug report, but suppose I should at some point.
As an overview, this solution works by using the toshset utility to poke the system management controller on this laptop to allow the hardware to update the backlight brightness. I'm not sure what happens upon a system suspend but I would be willing to wager some internal register is not reset, as a system hibernate does allow full use of the stock backlight control scheme.
One issue with this solution is that the toshset utility can not interface with the currently-shipped version of the toshiba_acpi kernel module. A workaround can be achieved by patching the source and then building and installing the appropriately-provisioned kernel module.
As mentioned the key to this scheme is
toshset. Assuming you're trying to implement this solution on a Toshiba R700/R705 laptop and running 64-bit Fedora, get the 64-bit binary.
Code:
$ cd ~
$ wget 'http://www.schwieters.org/toshset/toshset64.gz'
$ gunzip toshset64.gz
# mv toshset64 /usr/local/bin
Before proceeding, ensure you have the latest
kernel-devel package
Code:
# yum install kernel-devel
Next, get the kernel source files appropriate for your current kernel version:
Code:
# cd /usr/src
# wget http://www.kernel.org/pub/linux/kernel/v`uname -r | cut -b-3`/linux-`uname -r | cut -f1 -d'-'`.tar.bz2
# tar -xjvf linux-`uname -r | cut -f1 -d'-'`.tar.bz2
Get the patch for the toshiba_acpi kernel module
Code:
# wget 'http://www.schwieters.org/toshset/toshiba_acpi-current.patch'
# cd linux-`uname -r | cut -f1 -d'-'`
# patch -p1 < ../toshiba_acpi-current.patch
# cd drivers/platform/x86
Since we're only concerned about building the toshiba_acpi module, either comment out all of the other lines in
Makefile that deal with building everything else or simply:
Code:
# echo 'obj-$(CONFIG_ACPI_TOSHIBA) += toshiba_acpi.o' > Makefile
Now build the modules using the headers for the specific release of Fedora you're running:
Code:
# make -C /usr/src/kernels/`uname -r` M=`pwd` modules
Again, to install the modules
Code:
# make -C /usr/src/kernels/`uname -r` M=`pwd` modules_install
This should toss the newly-patched
toshiba_acpi.ko into
/lib/modules/*/extra
Restart to load the new modules
Now, we just need to make the ACPI daemon aware of the magic we're trying to do with toshset so that it will eventually poke the system management controller in the right places.
We're going to make two files in
/etc/acpi/events so the ACPI daemon now has something extensible to hook on to when the hardware buttons are pressed. I used the
acpi_listen program to determine the event code the hardware was coughing up so I knew what to tell the daemon to listen for.
First file,
toshiba-brightness-down contains:
Code:
event=video/brightnessdown BRTDN 00000087 00000000
action=/etc/acpi/actions/toshiba-brn-down.sh
Second file,
toshiba-brightness-up contains:
Code:
event=video/brightnessup BRTUP 00000086 00000000
action=/etc/acpi/actions/toshiba-brn-up.sh
As you can probably tell, we're going to put a couple of files into
/etc/acpi/actions. Both files will contain the same script that calls upon
toshset64 but we're putting them in different files just in case something comes up down the line.
First file,
toshiba-brn-down.sh
Code:
#!/bin/sh
/usr/local/bin/toshset64 -bl on
Second file,
toshiba-brn-up.sh
Code:
#!/bin/sh
/usr/local/bin/toshset64 -bl on
Now, give everyone read and execute permissions:
Code:
# chmod +rx /etc/acpi/actions/toshiba*
Restart acpid so it ingests the new events:
Code:
# /sbin/service acpid restart
...and your backlight keys should work. Note that this solution only makes acpid aware of hardware button keypresses (i.e. Fn+F6, Fn+F7), so the Power Management app in GNOME won't be able to modify the brightness, nor will the "auto dim" feature.
Hope this helps someone else out!