Debain GNU/Linux on VAIO VGN-Z90S

はじめに

4年ぶりにPCを更新しました。実は、VAIO TR-1Bの後にVGN-S70Bを使っていたのですが、だいぶん古くなってきて、OOoでの作業などが少々つらくなってきたので更新することになりました。

新しい機種で、いろいろ新機能があるため、できていないことがたくさんありますが、取りあえず使えるようになっています。

お品書き

Install編
  1. Debian Lenny base system
  2. APT sourceの変更
  3. 色々チューニング
  4. SDカード
  5. メモリ増設
  6. kernel-2.6.28
  7. 指紋認証
  8. Powering off Nvidia chip
色々できていないこと
  1. NVidia
  2. Memory Stick
  3. sony-laptop
  4. Finger Print
  5. たまに固まる
色々

Install

Debian Lenny base system

出回り始めた頃に買った人たちの報告等によると、Z70/Z90のNICはkernel-2.6.26以降でないと、Wireless LANは2.6.27以降でないと認識しないようです。Debian Lennyの夏頃のインストーラのKernelは2.6.25なので、ネットワークインストールは無理でした。そこでLennyのnet-inst DVDを使ってベースシステムだけインストールしました。

Taskselでは何もインストール候補を設定しないと、コンソールでログインできる最低限のシステムができあがります。そこへ、S70BのDebian(こちらもLenny)で作った2.6.27のカーネルと、こちらからダウロードしたIntel 5100AGN無線LAN用のFirmwareをUSBメモリを使ってZ90Sに持ってきてインストールしました。こうすると無線LANでネットワークにつながるようになりますので、あとは普通にネットワークから色々インストールできます。

APT sourceの変更

ネットワークインストールしていないので、apt sourceはCD-ROMを指していますので、/etc/apt/sources.listには次の行を足し、CD-ROMの所はコメントアウトします。

deb http://ftp.debian.org/debian/ lenny main non-free contrib
deb-src http://ftp.debian.org/debian/ lenny main non-free contrib

deb http://security.debian.org/ lenny/updates main
deb-src http://security.debian.org/ lenny/updates main

deb http://www.debian-multimedia.org testing main

deb http://kde4.debian.net/ lenny main
最後の行はKDE4がまだLennyに落ちてきていないので、別ソースのを使うためです。KDE3の方が良い人は入れないでください。

X11周りとKDE4周りを入れれば、一通りXで作業する環境を整えられます。KDE4はkdebase-runtime-bin-kde4, kde4-minimal, kde4の順で入れるとうまくいくようです。/etc/X11/xorg.confはXorg -configureで作ったもので基本的には動作しますが、タッチパッドの設定をしておいた方が使いやすいです。

あとはopenofficeとか、acpi周りとか、cpufreqとか入れておくと良さそうです。

色々チューニング

画面の明るさ

最初の問題は画面の明るさがspictrlで変えられないことでした。Z90SはLEDバックライトですが、最高輝度ではかなり明るく室内で使うと目が痛いのです。色々調べたところxbacklightコマンドで明るさを変更できることが解りました。KDEログイン時にxbacklight -set 20を実行するように設定しています。

※ただし、kernelのacpi/videoモジュールをロードしてしまうとxbacklightは効かなくなるようですので、注意してください。

CPUFreq

今までcore2duoのマシンを使ったことがなかったので、cpufreqを変更する方法がよくわからなかったのですが、core2duoでもkernelのP4 clock modulationを有効にするとcpufreqが効くことが解りました。cpufreqdの標準設定では最低クロックまで落ちないので、パラメータを変えてあります。

Hibernateion

Suspend/Hibernation/Resumeはあまり問題がなさそうに見えましたが、細かいところで少しありました。まずhibernate-ramについてはs2ramコマンドのwhite listに載っていないため -fオプションを使う必要があります。/etc/hibernate/ususpend-ram.confの中の

USuspendRamForce yes
をコメントアウトして有効にしておきます。

Suspendもhibernateも一応どちらもうまく動作します。S70Bではsuspendからresumeできず、hibernateにtux on iceパッチが必要でしたが、Z90ではどちらも特別なkernel patchは不要です。

一応、と言ったのはhibernate, suspendいずれからでもresumeした後、bluetoothが動作しなくなる(hci deviceが見つからなくなる)という問題があります。とりあえず、suspend/hibernateする前にwireless switchをオフにしてbluetoothと無線LANをオフにし、resumeしてからwireless switchを戻すとbluetoothは使えるのですが、うっかりスイッチを操作し忘れるとrebootが必要で面倒でした。

調べてみるとsysfsからUSBデバイスをsuspendさせられることが解ったので、suspend/hibernateをさせるのに、lid/powerボタンを使うことにして、/etc/acpiのpowerbtn.shを次のようにしてみました。

# Skip if we just in the middle of resuming.
test -f /var/lock/acpisleep && exit 0

#turn off bluetooth device

if [ -f /sys/class/bluetooth/hci0/device/../power/level ]; then
    cd -P /sys/class/bluetooth/hci0/device/../power/
    echo suspend > level
fi

#start hibernation

/usr/sbin/hibernate

#resume bluetooth device
echo auto > level
lid.shも同様ですが、/usr/bin/hibernateの代わりに/usr/bin/hibernate-ramを呼びます。

※cd -Pで移動しているのはbluetoothデバイスをsuspendしてしまうと、/sys/../hci0ディレクトリが無くなってしまうので、リンクをたどって移動しておく必要があるのです。

またSuspend/Hibernate後resumeすると、touch padの状態がおかしくなります(synapticを使っていない状態になります)。この場合にはブート時のkernelオプションに

i8042.reset i8042.nomux
を設定するとresume後もsynaptic driverが有効になります。

SDカード

SDカードはmmcドライバで認識しています。8GのSDHCカードを入れてXFSフォーマットして使ってみていますが、問題はありません。カードを指したまま起動した後やSuspend/Hibernateからresumeしたときは一度カードを抜き差しする必要があります。また、差し込んだ直後にkernelがカードを認識しようとしているときにカードが抜けると、再起動しない限り認識しなくなります。

※linux-2.6.27.xの古い方のカーネルにはXFSのバグがあるのでお勧めしません。

メモリ増設

メモリの値崩れが激しく、気がつくと2GのDDR-3が6,000円まで下がっていたのでメモリを増設して4Gにしてみました。kernelの設定で最大メモリを4Gに設定していると3Gまでしか認識しません。これは、PCIデバイスがMemory mapped I/Oで1G使ってしまうからです。kernelの最大メモリ設定を64GにするとPAEが有効になり、4G全てを使えます。これは32bit VISTAに対するアドバンテージになります。

kernel-2.6.28

kernel-2.6.27.xではhibernate/suspend後resumeするとうまく無線LANに接続できない(dhcpでアドレスをもらえない)ということがよく起こっていました。特に11aでは全滅に近い状態でした。2.6.28が出たので試してみると、かなり確実に接続できます。また、11aでもほぼ問題なく接続できています。

指紋認証

指紋認証デバイスはusbid 147e:1000で、なかなか動作報告がなかったのですが、最近ubuntuでの動作報告を見つけることが出来ました。(2008.02.10)

ほぼこちらのやり方の通りでいけました。fingerprintGUIはversion 0.8まで出ていますが、glibcのバージョンの関係で上記の指示通り0.5を使っています。

また、polkitやgnome-screen-saverはインストールしていませんので、/etc/pam.d/の下のファイルで、これらに関係する物はありませんのでスキップしています。rootと自分の一般ユーザーで指紋を登録するのですが、同じ指だとrootが優先されて一般ユーザーで入れなくなるので、左手指をrootに右手指を一般ユーザーにしてみました。

gdmのログイン画面で、指紋をスキャンしろと言うダイアログが出て、指を通すとログインします。また、コンソール(vt1とか)でも指紋を通すようにメッセージが出て、同様にログインできます。またsuするときも指紋で認証できます。指紋認証のダイヤログが出ているところでenterを押すとキーボードからユーザー名、パスワードの通常認証に移行します。

ちょっと面倒なのはkdeで画面をロックした後の解除で、入力ボックスに何か入れたてenterを押した後に指紋認証のダイヤログが出てくるので、操作が面倒です(入力ボックスは正しいパスワードでなくて良いので、適当に入力するかボタンを押せば良いのですが・・・)。

Powering off NVidia chip

まだグラフィックスチップの切り替えは出来ませんが、チップへの電源供給を止めることが出来るようになりました。こちらを参照して、sony-laptop.cを取ってきてコンパイルして入れ替えます。かなり消費電力の改善が見られます。powertopで見ると3〜5W程度省電力になっているようですので、標準バッテリーでも実用的な運用が出来そうです。

ただし、一度hibernate/suspendすると設定が消えてしまいますので、sony_laptopモジュールを/etc/hibernateのblacklisted-modulesに登録しておいて、resume時に再読込(初期化)されるようにしておく必要があります。(2008.02.14)


色々できていないこと、問題など

Nvidia

Z70/Z90はチップセット内蔵のintel 4500と専用GPUのNvidia 9300Mを切り替えて使えるようになっていますが、Linuxをロードした状態ではNvidiaは有効になりません。Xorg -configureで作られたxorg.confは両方のGPUを見つけてdual headで設定してくれるのですが、X11の起動時にNvidiaの方はVideo BIOSを見つけられずに初期化不能で無効化されています。lspciの詳細情報にはVBIOS領域がマップされているのですが、これは正しいBIOS領域ではないようで、int11モジュールにこのアドレスを指定しても動作してくれませんでした。

Z70/90はHDMI出力ポートを備えているのですが、これはNVIDIAからしか出力できないため、外付けDisplayにデジタル出力ができない状況です。アナログ出力は問題ないのですが、1920x1200ではボケボケで実用性がありません。

ちなみに、XPインストールモデルでは、XPでStamina/Speedを選択した状態からrebootして(電源を切らずに)Linuxを起動すると、それぞれのモードに対応してIntel, Nvidiaが使い分けられるそうです。ただし一度電源を切ってしまうとIntel onlyに戻るそうです。

Memory Stick

SDカードスロットが使えるので、あまり問題はないのですがMemory StickスロットはLinuxでは動作していません。

sony-laptop

Stamina/Speedをrebootせずに切り替える仕組みが入ったためか、sony programable interaceやsony acpiチップの仕様が変更になってしまい、spicctrlコマンドが使えません。acpi周りも色々問題があり、DVDコンボドライブの電源停止ができないようです。

他に、Z70/90ではいたわり充電モードというのがあって、電池の充電を50%とか80%とかで止める機能があるのですが、これの設定がLinuxからはできません。設定を変えるときはWindowsを起動する必要があります。

Finger Print

指紋認証デバイス付きにしたのですが、Linuxではまだ動かないモジュールのようです。

powertopで見ると100%活動と出て電気喰いなので、/etc/rc.localの中で次のようにして停止しておきます。

#Stop Finger Print Device
USBDIR=/sys/bus/usb/devices

cd $USBDIR
for i in *; do
    if [ -f $i/idVendor ] && [ -f $i/idProduct ]; then
	VENDOR=`cat $i/idVendor`
	PRODUCT=`cat $i/idProduct`
	if [ "$VENDOR" == "147e" ] && [ "$PRODUCT" == "1000" ]; then
	    echo suspending devie $PRODUCT:$VENDOR "($i)"
	    echo suspend > $i/power/level
	fi
    fi
done

FingerPrint deviceは使えるようになりました。(2008.02.10)

たまに固まる

どういうタイミングか解らないのですが、たまにフリーズしてしまうことがあります。フリーズするとCaps LockとScroll LockのLEDが同時に点滅しています。linux-2.6.28にしてからは発生していませんが、まだ日が短くたまたま起こっていないだけかもしれません。

2.6.28カーネルにしてからフリーズは発生していません。(2008.02.18)


色々

電池の持ち

Z70/Z90の売りの一つとして電池が結構持つということがあるのですが、これはかなりのデバイスの活動を抑えた状態なので、Linuxでさわれていないデバイスがある状態ではかなり苦しい所があります。powertopで確認しながら使っても、20W弱くらい消費していて80%充電で2.4時間くらい稼働可能としかなりません(無線LANおよびbluetooth有効、xbacklight -set 20)。

Linux-2.6.28ではビデオメモリのアクセス方法に改良が入って(GEMというらしい)、少し電力が改善されていて、18.3W、2.6時間くらいになります。wireless switchをオフにし、backlightを10まで下げると16.4W 2.9時間くらいまで延びます。自分的には4時間くらい連続で動かしたいので、Lバッテリーを使った方が良いかもしれません。

Nvidiaへの電源供給を止めることが出来るようになったので、消費電力がかなり改善しています。これまで17〜20W程度喰っていたのが13〜15W程度に下がっていますので、標準バッテリーでも4時間くらいは 運用できそうです。また、無線のスイッチをオフにして、バックライトを10%まで落とすと10W代まで下がりますので、出先でメモを取ったりするのに結構使えそうです。


Yukito FURUKAWA
Last modified: Wed Feb 18 18:50:02 JST 2009