ACPIからhotkeyのイベントを取得に成功

Gentoo Linuxからキーボードについてる"Fnキー"を使えるように設定した.
その設定方法を示す.


環境

  • PC: Panasonic Let's Note CF-W2
  • OS: Gentoo Linux (kernel-2.6.14-gentoo-r5)
  • ACPID: sys-power/acpid-1.0.4-r2
  • その他: app-misc/i810switch-0.6.2, alsa-????-1.0.10


出来ること

  • Fn+F1: 輝度down
  • Fn+F2: 輝度up
  • Fn+F4: ミュート
  • Fn+F5: ボリュームdown
  • Fn+F6: ボリュームup
  • Fn+F10: ディスプレイ外部出力


手順

  1. pcc-acpiドライバのインストール
  2. hotkeyのイベント取得を設定
  3. hotkeyイベント取得時の動作を設定
  4. acpidの再起動

<参考サイト>

以下,詳しい手順を示す.


1.pcc-acpiドライバのインストール
 ・参考サイト Panasonic Hotkey Driverから
  pcc-acpiをダウンロード(現在,最新バージョンは0.8.2).
 ・INSTALLの指示に従いmake と install.
 ・modprobe pcc-acpi と入力し,モジュールをカーネルに読み込む.
  次回起動時,モジュールを自動的に読み込むには
  "/etc/modules.autoload.d/kernel-2.6"ファイルへpcc-acpiを記述.


2.hotkeyのイベント取得を設定
 "/etc/acpi/event/hotkey"ファイルへ以下を記述(ディレクトリがなければ作成).
 −−ここから−−
 # /etc/acpi/events/hotkey
 # This script handles hotkey events on Panasonic notebooks


 event=pcc\ HKEY\ 00000080\ 000000(8[1-689]|0[37a])
 action=/etc/acpi/actions/hotkey.sh %e


 # end
 −−ここまで−−


 HKEYの番号についてはrootでacpi_listenコマンドを実行してから,hotkeyを入力して
 確認できます.


3.hotkeyイベント取得時の動作を設定
 "/etc/acpi/actions/hotkey.sh"ファイルへ以下を記述(ディレクトリがなければ作成).
 (参考サイト Linux Hotkey driver for Panasonic Let's Note Lightのpcc-acpi-utilsを改編)
 −−ここから−−
 #!/bin/sh
 #
 # hotkey script
 #
 # for Panasonic Let's note Light
 #
 # By: YOKOTA Hiroshi


 # Changed by Hideo TAKAHASHI
 # 2006 / 01 / 06 (Fri)


 export LANG=C


 #AC_state=/proc/acpi/ac_adapter/AC/state
 AC_state=/proc/acpi/battery/BATA/state
 PCC=/proc/acpi/pcc


 if [ $1 != "pcc" -o $2 != "HKEY" ]
 then
  echo "Unknown state"
  exit 1
 fi

 case $4 in
  00000081)
   # brightness down
   #if grep -q "on-line" ${AC_state} ; then
   if grep -q "present rate:[ ]*0 mW" ${AC_state} ; then
    echo -n $( ($(cat ${PCC}/ac_brightness) - 10) ) > ${PCC}/ac_brightness
   else
    echo -n $( ($(cat ${PCC}/dc_brightness) - 10) ) > ${PCC}/dc_brightness
   fi
  ;;
  00000082)
   # brightness up
   #if grep -q "on-line" ${AC_state} ; then
   if grep -q "present rate:[ ]*0 mW" ${AC_state} ; then
    echo -n $( ($(cat ${PCC}/ac_brightness) + 10) ) > ${PCC}/ac_brightness
   else
    echo -n $( ($(cat ${PCC}/dc_brightness) + 10) ) > ${PCC}/dc_brightness
   fi
  ;;
  00000084)
   # toggle mute
   if [ $(cat ${PCC}/mute) = 0 ] ; then
    echo -n 1 > ${PCC}/mute
   else
    echo -n 0 > ${PCC}/mute
   fi
  ;;
  00000085)
   # volume down
   /usr/bin/amixer -q sset PCM,0 1-
  ;;
  00000086)
   # volume up
   /usr/bin/amixer -q sset PCM,0 1+
  ;;
  0000000a)
   # toggle CRT out
   if /usr/bin/i810switch | grep -q "CRT: on" ; then
    /usr/bin/i810switch crt off
   else
    /usr/bin/i810switch crt on
   fi
  ;;
 *)
 ;;
 esac


 exit 0
 # end
 −−ここまで−−


4.acpidの再起動
 /etc/init.d/acpid restart


これで使いやすくなった!
次はサスペンドの設定に挑戦したい.