---
name: "acpi_ibm"
section: "4"
platform: "linux"
package: "freebsd-manpages"
version: "6.0-5"
release: "Debian 4.0 (Etch)"
platforms: ["linux", "freebsd"]
url: "https://new.carta.tech/acpi_ibm"
---

# acpi\_ibm(4)

ACPI extras driver for IBM laptops

## NAME

**acpi\_ibm** – ACPI extras driver for IBM laptops

## SYNOPSIS

**device acpi\_ibm**

## DESCRIPTION

The **acpi\_ibm** driver provides support for hotkeys and other components of IBM laptops. The main purpose of this driver is to provide an interface, accessible via [sysctl(8)](/sysctl/8.md) and [devd(8)](/devd/8.md), through which applications can determine the status of various laptop components.

While the [sysctl(8)](/sysctl/8.md) interface is enabled automatically after loading the driver, the [devd(8)](/devd/8.md) interface has to be enabled explicitly, as it may alter the default action of certain keys. This is done by setting the *events* sysctl as described below. Specifying which keys should generate events is done by setting a bitmask, whereas each bit represents one key or key combination. This bitmask, accessible via the *eventmask* sysctl, is set to *availmask* by default, a value representing all possible keypress events on the specific ThinkPad model.

### Xr devd 8 Ss Events

Hotkey events received by [devd(8)](/devd/8.md) provide the following information:

- system

  "ACPI"

- subsystem

  "IBM"

- type

  The source of the event in the ACPI namespace. The value depends on the model.

- notify

  Event code (see below).

Depending on the ThinkPad model, event codes may vary. On a ThinkPad T41p these are as follows:

- 0x01

  Fn + F1

- 0x02

  Fn + F2

- 0x03

  Fn + F3 (LCD backlight)

- 0x04

  Fn + F4 (Suspend to RAM)

- 0x05

  Fn + F5 (Bluetooth)

- 0x06

  Fn + F6

- 0x07

  Fn + F7 (Screen expand)

- 0x08

  Fn + F8

- 0x09

  Fn + F9

- 0x0a

  Fn + F10

- 0x0b

  Fn + F11

- 0x0c

  Fn + F12 (Suspend to disk)

- 0x0d

  Fn + Backspace

- 0x0e

  Fn + Insert

- 0x0f

  Fn + Delete

- 0x10

  Fn + Home (Brightness up)

- 0x11

  Fn + End (Brightness down)

- 0x12

  Fn + PageUp (ThinkLight)

- 0x13

  Fn + PageDown

- 0x14

  Fn + Space (Zoom)

- 0x15

  Volume Up

- 0x16

  Volume Down

- 0x17

  Mute

- 0x18

  Access IBM Button

### Xr led 4 Ss Interface

The **acpi\_ibm** driver provides an [led(4)](/led/4.md) interface for the Thinklight. The Thinklight can be made to blink by writing ASCII strings to the */dev/led/thinklight* device.

## SYSCTL VARIABLES

The following sysctls are currently implemented:

- *dev.acpi\_ibm.0.initialmask*

  (read-only) Bitmask of ACPI events before the **acpi\_ibm** driver was loaded.

- *dev.acpi\_ibm.0.availmask*

  (read-only) Bitmask of all supported ACPI events.

- *dev.acpi\_ibm.0.events*

  Enable ACPI events and set the *eventmask* to *availmask*. Without the **acpi\_ibm** driver being loaded, only the Fn+F4 button generates an ACPI event.

- *dev.acpi\_ibm.0.eventmask*

  Sets the ACPI events which are reported to [devd(8)](/devd/8.md). Fn+F3, Fn+F4 and Fn+F12 always generate ACPI events, regardless which value *eventmask* has. Depending on the ThinkPad model, the meaning of different bits in the *eventmask* may vary. On a ThinkPad T41p this is a bitwise OR of the following:

  - 1

    Fn + F1

  - 2

    Fn + F2

  - 4

    Fn + F3 (LCD backlight)

  - 8

    Fn + F4 (Suspend to RAM)

  - 16

    Fn + F5 (Bluetooth)

  - 32

    Fn + F6

  - 64

    Fn + F7 (Screen expand)

  - 128

    Fn + F8

  - 256

    Fn + F9

  - 512

    Fn + F10

  - 1024

    Fn + F11

  - 2048

    Fn + F12 (Suspend to disk)

  - 4096

    Fn + Backspace

  - 8192

    Fn + Insert

  - 16384

    Fn + Delete

  - 32768

    Fn + Home (Brightness up)

  - 65536

    Fn + End (Brightness down)

  - 131072

    Fn + PageUp (ThinkLight)

  - 262144

    Fn + PageDown

  - 524288

    Fn + Space (Zoom)

  - 1048576

    Volume Up

  - 2097152

    Volume Down

  - 4194304

    Mute

  - 8388608

    Access IBM Button

- *dev.acpi\_ibm.0.hotkey*

  (read-only) Status of several buttons. Every time a button is pressed, the respecting bit is toggled. It is a bitwise OR of the following:

  - 1

    Home Button

  - 2

    Search Button

  - 4

    Mail Button

  - 8

    Access IBM Button

  - 16

    Zoom

  - 32

    Wireless LAN Button

  - 64

    Video Button

  - 128

    Hibernate Button

  - 256

    ThinkLight Button

  - 512

    Screen Expand

  - 1024

    Brightness Up/Down Button

  - 2048

    Volume Up/Down/Mute Button

- *dev.acpi\_ibm.0.lcd\_brightness*

  Current brightness level of the display.

- *dev.acpi\_ibm.0.volume*

  Speaker volume.

- *dev.acpi\_ibm.0.mute*

  Indicates, whether the speakers are muted or not.

- *dev.acpi\_ibm.0.thinklight*

  Indicates, whether the ThinkLight keyboard light is activated or not.

- *dev.acpi\_ibm.0.bluetooth*

  Toggle Bluetooth chip activity.

- *dev.acpi\_ibm.0.wlan*

  (read-only) Indicates whether the WLAN chip is active or not.

- *dev.acpi\_ibm.0.fan*

  (read-only) Indicates whether the fan is on or off.

- *dev.acpi\_ibm.0.fan\_speed*

  (read-only) Fan speed in rounds per minute. A few older ThinkPads report the fan speed in levels ranging from 0 (off) to 7 (max).

- *dev.acpi\_ibm.0.thermal*

  (read-only) Shows the readings of up to eight different temperature sensors. Most ThinkPads include six or more temperature sensors but only expose the CPU temperature through [acpi\_thermal(4)](/acpi_thermal/4.md). Some ThinkPads have the below sensor layout which might vary depending on the specific model:

  1. CPU

  2. Mini PCI Module

  3. HDD

  4. GPU

  5. Built-in battery

  6. UltraBay battery

  7. Built-in battery

  8. UltraBay battery

Defaults for these sysctls can be set in [sysctl.conf(5)](/sysctl.conf/5.md).

## EXAMPLES

The following can be added to [devd.conf(5)](/devd.conf/5.md) in order to pass button events to a */usr/local/sbin/acpi\_oem\_exec.sh* script:

```
notify 10 {
        match "system"          "ACPI";
        match "subsystem"       "IBM";
        action "/usr/local/sbin/acpi_oem_exec.sh $notify ibm";
};
```

A possible */usr/local/sbin/acpi\_oem\_exec.sh* script might look like:

```
#!/bin/sh
#
if [ "$1" = "" -o "$2" = "" ]
then
        echo "usage: $0 notify oem_name"
        exit 1
fi
NOTIFY=`echo $1`
LOGGER="logger"
CALC="bc"
BC_PRECOMMANDS="scale=2"
ECHO="echo"
CUT="cut"
MAX_LCD_BRIGHTNESS=7
MAX_VOLUME=14
OEM=$2
DISPLAY_PIPE=/tmp/acpi_${OEM}_display
case ${NOTIFY} in
        0x05)
                LEVEL=`sysctl -n dev.acpi_${OEM}.0.bluetooth`
                if [ "$LEVEL" = "1" ]
                then
                        sysctl dev.acpi_${OEM}.0.bluetooth=0
                        MESSAGE="bluetooth disabled"
                else
                        sysctl dev.acpi_${OEM}.0.bluetooth=1
                        MESSAGE="bluetooth enabled"
                fi
        0x10|0x11)
                LEVEL=`sysctl -n dev.acpi_${OEM}.0.lcd_brightness`
                PERCENT=`${ECHO} "${BC_PRECOMMANDS} ; \
                         ${LEVEL} / ${MAX_LCD_BRIGHTNESS} * 100" |\
                         ${CALC} | ${CUT} -d . -f 1`
                MESSAGE="brightness level ${PERCENT}%"
                ;;
        0x12)
                LEVEL=`sysctl -n dev.acpi_${OEM}.0.thinklight`
                if [ "$LEVEL" = "1" ]
                then
                        MESSAGE="thinklight enabled"
                else
                        MESSAGE="thinklight disabled"
                fi
                ;;
        0x15|0x16)
                LEVEL=`sysctl -n dev.acpi_${OEM}.0.volume`
                PERCENT=`${ECHO} "${BC_PRECOMMANDS} ; \
                        ${LEVEL} / ${MAX_VOLUME} * 100" | \
                         ${CALC} | ${CUT} -d . -f 1`
                MESSAGE="volume level ${PERCENT}%"
                ;;
        0x17)
                LEVEL=`sysctl -n dev.acpi_${OEM}.0.mute`
                if [ "$LEVEL" = "1" ]
                then
                        MESSAGE="volume muted"
                else
                        MESSAGE="volume unmuted"
                fi
                ;;
        *)
                ;;
esac
${LOGGER} ${MESSAGE}
if [ -p ${DISPLAY_PIPE} ]
then
        ${ECHO} ${MESSAGE} >> ${DISPLAY_PIPE} &
fi
exit 0
```

## FILES

- */dev/led/thinklight*

  Thinklight [led(4)](/led/4.md) device node

## SEE ALSO

[acpi(4)](/acpi/4.md), [sysctl.conf(5)](/sysctl.conf/5.md), [devd(8)](/devd/8.md), [sysctl(8)](/sysctl/8.md)

## HISTORY

The **acpi\_ibm** device driver first appeared in FreeBSD 5.5.

## AUTHORS

The **acpi\_ibm** driver was written by Takanori Watanabe ⟨takawata@FreeBSD.org⟩ and later mostly rewritten by Markus Brueffer ⟨markus@FreeBSD.org⟩. This manual page was written by Christian Brueffer ⟨brueffer@FreeBSD.org⟩ and Markus Brueffer ⟨markus@FreeBSD.org⟩.
