EN JA
ACPI_IBM(4)
ACPI_IBM(4) FreeBSD Kernel Interfaces Manual ACPI_IBM(4)

名称

acpi_ibmIBM ラップトップのための ACPI 特別ドライバ

書式

このドライバをカーネルにコンパイルするためには、次の行を利用者のカーネル設定ファイルに置きます:

device acpi_ibm

もう一つの方法として、ブート時にモジュールとしてドライバをロードするためには、次の行を loader.conf(5) に置きます:

acpi_ibm_load="YES"

解説

acpi_ibm ドライバは、IBM ラップトップのホットキーおよび他のコンポーネントのサポートを行います。このドライバの主な目的は、アプリケーションが様々なラップトップコンポーネントの状態を決定することができるために、 sysctl(8)devd(8) を通して、アクセス可能なインタフェースを提供することです。

ドライバをロードした後に sysctl(8) インタフェースが自動的に有効にされている間、 devd(8) インタフェースは、特定のキーのデフォルト動作を変更できるように、明らかに有効にされなければなりません。以下に説明されているように events sysctl を設定することによってこれは行われます。どのキーがイベントを生成するべきであるかの指定は、各ビットが 1 つのキーまたはキーの組み合わせを表す、ビットマスクを設定することによって行われます。 eventmask sysctl を通してアクセス可能なこのビットマスクは、特定の ThinkPad モデルですべての起こり得る keypress イベントを表す値である、デフォルトの availmask に設定されます。

devd(8) Ss イベント

devd(8) によって受け付けられたホットキーイベントは、次の情報を提供します:

system
ACPI
subsystem
IBM
type
ACPI 名前空間でのイベントのソース。値はモデルよって決まります。
notify
イベントコード (下記参照)。

ThinkPad モデルにより、イベントコードは異なります。 ThinkPad T41p では、これらは次の通りです:

0x01
Fn + F1
0x02
Fn + F2
0x03
Fn + F3 (LCD バックライト)
0x04
Fn + F4 (RAM をサスペンド)
0x05
Fn + F5 (Bluetooth)
0x06
Fn + F6
0x07
Fn + F7 (拡張画面)
0x08
Fn + F8
0x09
Fn + F9
0x0a
Fn + F10
0x0b
Fn + F11
0x0c
Fn + F12 (disk をサスペンド)
0x0d
Fn + Backspace
0x0e
Fn + Insert
0x0f
Fn + Delete
0x10
Fn + Home (輝度アップ)
0x11
Fn + End (輝度ダウン)
0x12
Fn + PageUp (ThinkLight)
0x13
Fn + PageDown
0x14
Fn + Space (Zoom) (ズーム)
0x15
Volume Up (ボリュームアップ)
0x16
Volume Down (ボリュームダウン)
0x17
Mute (ミュート)
0x18
Access IBM ボタン

led(4) Ss インタフェース

acpi_ibm ドライバは ThinkLight のための led(4) インタフェースを提供します。 ThinkLight は、 /dev/led/thinklight デバイスに ASCII 文字列を書き込むことによって、点滅を行うことができます。

SYSCTL 変数

次の sysctl が現在、実装されています:
dev.acpi_ibm.0.initialmask
(読み込み専用) acpi_ibm ドライバがロードされる前の ACPI イベントのビットマスク。
dev.acpi_ibm.0.availmask
(読み込み専用) すべてのサポートされた ACPI イベントのビットマスク。
dev.acpi_ibm.0.events
ACPI イベントを有効にし、 eventmaskavailmask を設定します。 acpi_ibm ドライバをロードすることなしで、Fn+F4 ボタンだけが ACPI イベントを生成します。
dev.acpi_ibm.0.eventmask
devd(8) に報告される ACPI イベントを設定します。 eventmask にある値にかかわらず、Fn+F3、Fn+F4 と Fn+F12 は、常に ACPI イベントを生成します。 ThinkPad モデルにより、 eventmask の異なったビットの意味は異なります。 ThinkPad T41p では、これは、次のビット単位の論理和 (OR) です:

1
Fn + F1
2
Fn + F2
4
Fn + F3 (LCD バックライト)
8
Fn + F4 (RAM をサスペンド)
16
Fn + F5 (Bluetooth)
32
Fn + F6
64
Fn + F7 (画面拡張)
128
Fn + F8
256
Fn + F9
512
Fn + F10
1024
Fn + F11
2048
Fn + F12 (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 ボタン
dev.acpi_ibm.0.hotkey
(読み込み専用) いくつかのボタンの状態。ボタンが押されるときはいつも、関係するビットは切り替えられます。次のビット単位の論理和 (OR) です:

1
Home ボタン
2
Search ボタン
4
Mail ボタン
8
Access IBM ボタン
16
ズーム (Zoom)
32
Wireless LAN ボタン
64
Video ボタン
128
Hibernate ボタン
256
ThinkLight ボタン
512
Screen Expand (画面拡張)
1024
Brightness Up/Down (輝度アップ/ダウン) ボタン
2048
Volume Up/Down/Mute (ボリュームアップ/ダウン/ミュート) ボタン
dev.acpi_ibm.0.lcd_brightness
ディスプレイの現在の輝度レベル。
dev.acpi_ibm.0.volume
スピーカのボリューム。
dev.acpi_ibm.0.mute
スピーカが音を消されているかどうかを表示します。
dev.acpi_ibm.0.thinklight
ThinkLight キーボードライトがアクティブであるかどうかを表示します。
dev.acpi_ibm.0.bluetooth
Bluetooth チップのアクティビティを切り替えます。
dev.acpi_ibm.0.wlan
(読み込み専用) WLAN チップがアクティブであるかどうかを表示します。
dev.acpi_ibm.0.fan
ファンが、自動モード (1) またはマニュアルモード (0) であるかどうかを示します。デフォルトは、自動モードです。この sysctl は、極端な用心して使用されるべきで、自動ファン制御を無効にすることは、 fan_level がそれなりに設定されていないなら、ThinkPad を過熱させ、永久的な損傷の原因となるかもしれません。
dev.acpi_ibm.0.fan_level
マニュアルモードであるとき、ファンがどのような速度で走らせるべきであるかを示します。値は、0 (オフ) から 7 (最大) までの範囲です。結果の速度は、モデルによって異なっています。 T41p では、これは、次の通りです:

0
オフ
1, 2
~3000 RPM
3, 4, 5
~3600 RPM
6, 7
~4300 RPM
dev.acpi_ibm.0.fan_speed
(読み込み専用) 1 分あたりのファン速度の概算。いくつかのより古い ThinkPad は、0 (オフ) から 7 (最大) のレベル範囲でファン速度を報告します。
dev.acpi_ibm.0.thermal
(読み込み専用) 最大 8 個の異なった温度センサの測定値を表示します。ほとんどの ThinkPad は、6 個以上の温度センサを含んでいますが、 acpi_thermal(4) を通して CPU 温度を公表するだけです。いくつかの ThinkPad には、特定のモデルによって異なるかもしれない以下のセンサ割り付けがあります:

  1. CPU
  2. ミニ PCI モジュール
  3. HDD
  4. GPU
  5. Built-in バッテリ
  6. UltraBay バッテリ
  7. Built-in バッテリ
  8. UltraBay バッテリ
dev.acpi_ibm.0.handlerevents
events が 1 に設定されるとき、 acpi_ibm によって操作される devd(8) のイベント。イベントは、16 進数または 10 進数の形式のイベントコードの空白類で分離されたリストとして指定されます。イベントは、ACPI BIOS が既にイベントを操作していたなら、 (例えば、輝度のアップ/ダウン) 2 度操作されるかもしれないことに注意してください。

これらの sysctl のためのデフォルトは、 sysctl.conf(5) で設定することができます。

関連ファイル

/dev/led/thinklight
ThinkLight led(4) デバイスノード

使用例

ボタンのイベントを /usr/local/sbin/acpi_oem_exec.sh スクリプトに渡すために devd.conf(5) に次を追加することができます:

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

利用可能な /usr/local/sbin/acpi_oem_exec.sh スクリプトは次に似ているかもしれません:

#!/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

次の使用例は、イベントコード 0x04 (RAM をサスペンドする)、 0x10 (輝度をアップ) と 0x11 (輝度をダウン) が acpi_ibm によって操作されることを指定します。

sysctl dev.acpi_ibm.0.handlerevents='0x04 0x10 0x11'

次の sysctl.conf(5) で:

dev.acpi_ibm.0.handlerevents=0x04\ 0x10\ 0x11

歴史

acpi_ibm デバイスドライバは FreeBSD 6.0 ではじめて登場しました。

作者

acpi_ibm ドライバは Takanori Watanabe <takawata@FreeBSD.org>によって書かれ、後で Markus Brueffer <markus@FreeBSD.org>よってほとんど書き直されました。このマニュアルページは Christian Brueffer <brueffer@FreeBSD.org>と Markus Brueffer <markus@FreeBSD.org>によって書かれました。
June 24, 2012 FreeBSD