ThinkPad X61s functions keys
Ian Smith
smithi at nimnet.asn.au
Mon Apr 14 04:21:58 UTC 2008
On Sun, 13 Apr 2008, Dan Langille wrote:
> Elsewhere in this thread I had stated I'd solved the problem. I'm
> posting the details here.
We've been waiting with bated breath :)
> 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
Strange if that doesn't work. Can you check your /var/log/console.log
(assuming you've got 'console.info /var/log/console.log' in syslog.conf)
which should show the transition, or at least the attempt, eg:
Apr 1 02:51:32 paqi kernel: vfs.usermount:
Apr 1 02:51:32 paqi kernel: 0
Apr 1 02:51:32 paqi kernel: ->
Apr 1 02:51:32 paqi kernel: 1
Apr 1 02:51:32 paqi kernel:
Apr 1 02:51:32 paqi kernel: hw.snd.verbose:
Apr 1 02:51:32 paqi kernel: 1
Apr 1 02:51:32 paqi kernel: ->
Apr 1 02:51:32 paqi kernel: 2
> $ 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
You could, if maybe sysctl.conf is being run too early (?), try adding
'sysctl dev.acpi_ibm.0.events=1' to /etc/rc.local, which, as I recall,
also reports into console.log
> > 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.
Fussy, ain't it.
> > 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
Are the bits for these keys set in .availmask, or posted to .eventmask?
> 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
Does Fn-F4 (still?) act as sleep (suspend-to-RAM)? ie does/did STR
work on your X61s, and does dev.acpi_ibm.0.events=1 affect that at all?
You might like to compare your results with Beto's Z60m at:
http://lists.freebsd.org/mailman/htdig/freebsd-mobile/2006-August/008959.html
and also his earlier reference:
http://lists.freebsd.org/pipermail/freebsd-mobile/2006-August/008948.html
where a) he gets to use Fn-F4 for a custom sleep script, b) also found
that Fn-F10 does nothing, but c) gets events from volume and mute keys.
> 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
On my T23, Pause does nothing in X, but (same as NumLk/ScrollLock key
pressed without Fn) works as the scroll lock in a vty. Also on mine,
Fn-F7 switches between LCD/Monitor/both.
> ThinkLight - works, and creates a log entry 0x12
> Spacebar - create log entry 0x14
Weird about the sysctl not getting set from sysctl.conf though ..
cheers, Ian
More information about the freebsd-mobile
mailing list