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