落穂拾い

Gleanings in my life

【Gentoo】Fn+F5/F6 で VAIO の輝度調節

2011年12月27日 00時12分33秒 | Linux
SONYの CULV ノートPC、VAIO Y (VPCY11AFJ) で Gentoo を稼働させている。 2年前のモデルで、Core2 Duo、チップセット統合の GM45 がビデオチップである。 大方、困ることはない。 ただ、微妙に面倒なのが輝度調整。 デフォルトの状態では、Fnキーを使った輝度調節ができないのである(音量調節は Fn+F2/F3/F4で可能)。 仕方がないので、
sudo setpci -s 00:02.0 F4.B=80
などとして手動で輝度を調節してきた。 今回は、これを Fn キーで調節できるように設定する。 もっとエレガントな方法もあるのかもしれないが、ここでは昔ながらの acpid を用いた方法を取る。 まず、acpid を動かす。 acpid がインストールされていないようなら emerge しておく。
emerge -av acpid
起動する。
/etc/init.d/acpid start
さらに、自動起動するように default runlevelに追加する。
rc-update add acpid default
この状態で、Fn+F5/F6 をタイプしたら、acpid 経由で何が起こるかを確認してみる。 端末を開き、
tail -f /var/log/message
を実行した状態で Fn+F5 をタイプすると、
Dec 25 10:45:11 localhost logger: ACPI event unhandled: sony/hotkey SNC 00000001 00000010
Dec 25 10:45:12 localhost logger: ACPI event unhandled: sony/hotkey SNC 00000001 0000003b
と表示される。 続いて、Fn+F6 は
Dec 25 10:45:21 localhost logger: ACPI event unhandled: sony/hotkey SNC 00000001 00000011
Dec 25 10:45:21 localhost logger: ACPI event unhandled: sony/hotkey SNC 00000001 0000003b
と表示される。 上記から発生するイベント名が分かったので、イベントに対応して setpci コマンドを実行するように設定すればよい。 まずは、イベントを拾うために、/etc/acpi/events ディレクトリに vaio_brightness というファイルを下記の 内容で作成する。
event=sony/hotkey SNC 00000001 0000001*
action=/etc/acpi/vaio.sh %e
これで Fn+F5、Fn+F6 がタイプされると /etc/acpi/vaio.sh が呼び出されるようになる。 (ちなみに、Fn+F7 など上記のワイルドカード指定に適合する他のキーが押下されても vaio.sh が呼び出される。) 続いて、呼び出される vaio.sh を下記の内容で作成する。
#!/bin/sh                                                                       

#                                                                               
# ACPI handler for SONY VAIO Y (VPCY11AFJ)                                      
#                                                                               

# set brightness                                                                
KEY=$4

case $KEY in
    00000010)
        # Fn+F5                                                                 
        prev=`/usr/sbin/setpci -s 00:02.0 F4.B`
        new=`echo $((0x$prev - 16))`
        if [ $new -le 0 ] ; then
            new=15
        fi
        /usr/sbin/setpci -s 00:02.0 F4.B=`printf "%x" $new`
        ;;
    00000011)
        # Fn+F6                                                                 
        prev=`/usr/sbin/setpci -s 00:02.0 F4.B`
        new=`echo $((0x$prev + 16))`
        if [ $new -ge 255 ] ; then
            new=255
        fi
        /usr/sbin/setpci -s 00:02.0 F4.B=`printf "%x" $new`
	;;
esac
以上で設定終了である。 上記設定を反映させるために acpid を再起動する。
/etc/init.d/acpid restart
これで Fn+F5, Fn+F6 で輝度のダウン、アップができるようになる。 16段階というのが多過ぎるかも?

コメントを投稿