ThinkPad X61s functions keys
Dan Langille
dan at langille.org
Sun Apr 13 15:45:20 UTC 2008
Elsewhere in this thread I had stated I'd solved the problem. I'm
posting the details here.
Alberto Rizzi wrote:
> Dan Langille ha scritto:
>> Hi,
>>
>> Running FreeBSD 7.0-RELEASE on a ThinkPad X61s.
>>
>> Some keys do not work:
>>
>> - volume adjustment
>> - screen brightness (FN HOME, FN END)
>>
>> The keyboard light does work (FN-PgUp) as does
>> Numeric Lock (FN ScrLk).
>>
>> What can I do to help diagnose the issue so we can get these
>> functions working?
>>
> Have the same problem with a Thinkpad T61
> If you read man acpi_ibm there is a partial solution
>
> You have to load acpi_ibm at boot. Add
> acpi_ibm_load="YES"
> to /boot/loader.conf
This is loaded:
$ kldstat
Id Refs Address Size Name
1 15 0xffffffff80100000 ac6c08 kernel
2 1 0xffffffff80bc7000 39138 linux.ko
3 1 0xffffffff80c01000 7108 if_tap.ko
4 1 0xffffffff80c09000 1a670 snd_hda.ko
5 2 0xffffffff80c24000 673b8 sound.ko
6 1 0xffffffff80c8c000 53d0 acpi_ibm.ko
7 1 0xffffffffb16e4000 4b61 i915.ko
8 1 0xffffffffb16e9000 d5d8 drm.ko
>
> Then activate event passing to devd. Add
> dev.acpi_ibm.0.events=1
> to /etc/sysctl.conf
I cannot get this set to 1 after boot:
$ grep ibm /etc/sysctl.conf
dev.acpi_ibm.0.events=1
$ sysctl dev.acpi_ibm.0.events
dev.acpi_ibm.0.events: 0
Under these circumstances, the keys will not work. If I manually set
the events flag:
$ sudo sysctl dev.acpi_ibm.0.events=1
Password:
dev.acpi_ibm.0.events: 0 -> 1
$ sysctl dev.acpi_ibm.0.events
dev.acpi_ibm.0.events: 1
Then the brightness keys start working
>
> Then tell devd that you want to get events. Add
> notify 10 {
> match "system" "ACPI";
> match "subsystem" "IBM";
> action "/usr/local/sbin/acpi_oem_exec.sh $notify ibm";
> }
This was the missing key. The last line needs a trailing ;
Once I added that in, things started working.
>
> to /etc/devd.conf
>
> Now you have to create that script
> ----------
> #!/bin/sh
> NOTIFY=`echo $1`
> ECHO="echo"
> CALC="bc"
>
> case ${NOTIFY} in
> 0x10)
> LEVEL=`sysctl -n dev.acpi_ibm.0.lcd_brightness`
> PERCENT=`${ECHO} "${LEVEL} + 1" | ${CALC}`
> MESSAGE="brightness level ${PERCENT}"
> sysctl dev.acpi_ibm.0.lcd_brightness=${PERCENT}
> ;;
> 0x11)
> LEVEL=`sysctl -n dev.acpi_ibm.0.lcd_brightness`
> PERCENT=`${ECHO} "${LEVEL} - 1" | ${CALC}`
> MESSAGE="brightness level ${PERCENT}"
> sysctl dev.acpi_ibm.0.lcd_brightness=${PERCENT}
> ;;
> *)
> ;;
> esac
> echo `date` >> /tmp/prova
> ${ECHO} ${LEVEL} ${NOTIFY} ${MESSAGE} >> /tmp/prova
> exit 0
>
> -------
> If you leave the last two debug line, with a tail -f /tmp/prova you can
> check the events sent to devd.
>
> With this script you can change the brightness both under console and
> under xorg but you are bound to 8 levels (0 - 7)
> If you want 100 levels you can use xbacklight under xorg only and modify
> the script to use xbacklight instead of sysctl
>
> Mute and volume keys don't send events to devd: I don't know why but if
> I press mute it works and dev.acpi_ibm.0.mute becomes 1
> If I press volume up or down, dev.acpi_ibm.0.mute becomes 0
Using the Fn key and pressing the F1-F12 keys, I get the following log
entrys in /tmp/prova:
Sun Apr 13 11:39:48 EDT 2008
0x01
Sun Apr 13 11:39:48 EDT 2008
0x02
Sun Apr 13 11:39:49 EDT 2008
0x03
Sun Apr 13 11:39:50 EDT 2008
0x05
Sun Apr 13 11:39:50 EDT 2008
0x06
Sun Apr 13 11:39:50 EDT 2008
0x07
Sun Apr 13 11:39:54 EDT 2008
0x08
Sun Apr 13 11:39:54 EDT 2008
0x09
Sun Apr 13 11:39:55 EDT 2008
0x0b
Sun Apr 13 11:39:55 EDT 2008
0x0c
Note the following exceptions which can be observed from the above log
entries:
Fn-F4 - sleep: does not give any log entry
Fn-F10 - unlabelled on the keyboard, gives no log entry
Other Fn key results:
SysReq - no log entry, no effect seen
NumLk - no log entry but system goes into NumLock mode
Pause - no log entry, no effect seen
ThinkLight - works, and creates a log entry 0x12
Spacebar - create log entry 0x14
More information about the freebsd-mobile
mailing list