2009/11/17(火)mbookでWLAN-BT StatusをON

前回のサスペンドの検証をしていたときの副産物というかTIPSです。


mbookの欠点として、無線LAN&bluetoothの状態が保持されない(電源を入れるたびにWLAN-BTボタンを押さなければならない)というのがあります。ちなみにmbookの日本語版であるPMシリーズにはBIOSでWLAN-BT Statusと項目があり、ONにしておくと起動時に無線LAN&bluetoothが使えるようになっています。
参考サイト
懲りないねっと[はかせのBlog.jp] - 工人舎 PM1WX16SA(2)

BIOSアップデートで対応されればいいのですが、今のところUMIDからBIOSが提供される気配はありません。そこで、ちょっとあやしい方法なのですが、試行錯誤の結果、mbookでも同様の設定ができることを確認しました。その方法は、、、

電源がONになってる状態で、電源ボタン長押し


BIOS設定時などは電源ボタンを押すとすぐに電源が切れてしまうので、このTIPSは使えません。またOSが起動してる状態で電源OFFを行うと、最悪起動しなくなる可能性があります。そこでおすすめの方法はUSBでLive版のOSを起動する方法です。

Ubuntu9.10はmicroSDを挿した状態でサスペンド、または無線のファームウェアを入れた状態で接続すると、ほぼ間違いなくフリーズします。これを利用して、mbookをフリーズさせ、その時に電源ボタンを長押しすることでWLAN-BT StatusをONにすることができます。ちなみに解除の方法は、確認した限りでは、ACをはずした状態でバッテリーをはずす、ことです。これで初期のWLAN-BT Status OFFの状態に戻ります。

なんというか、胡散くさいTIPSなのですが、結構な回数を試したので間違いないと思われます。nblogの中の人は無線LAN環境でmbookを使用することが多いので、このTIPSでWLAN-BT StatusをONにしてします。



以上の作業によりmbook(またはOS)が壊れてもnblogの中の人は責任を取れませんので、自己責任でお願いします。

2009/11/13(金)Ubuntu9.10なmbookでサスペンド

たまにmbookとUbuntuをキーワードに検索してるのですが、サスペンド関係の話が目についたので、自分も少しかじってみたメモです。


初期の状態でサスペンドを行うとmbookはフリーズして失敗し、BIOSでSDIO Controllerをdisabledにするとサスペンドが成功することから、USB周りがあやしいと思っていました。無線LANのフリーズの時は苦労したので、今回もきついかな、と思いつつ検索してみるとなんてことはなく、SDカードをマウントしたままサスペンドするとフリーズしてしまうのは割と有名なbugでした。

解決方法は簡単で、サスペンド前にSDカードをアンマウントするだけです。もっともアンマウントし忘れると大変なので、サスペンドをしたら自動でアンマウントするようにします。

サスペンドに入る前

サスペンドは /usr/sbin/pm-suspend というコマンドで実行されるのですが、このファイルはスクリプトになっているので、編集してSDカードをアンマウントするようにします。
$ sudo vi /usr/sbin/pm-suspend
================

# SD card unmount
unmount /media/microsd

# The rule here? Simplicity.
export STASHNAME=pm-suspend
unmount /media/microsd が追加した行です。microsdの部分は人によって違うと思いますので注意してください。
【追記】pm-suspendは変更しないで、下述の00umountchvtにアンマウント処理を入れます

ビデオドライバ

次は復帰に関してなのですが、その前にnblogの中の人のmbookのビデオドライバについて説明しておきます。前回9.10のインストールときは、9.04用psbドライバを流用する方法を説明しましたが、今は9.10に対応したPPAを利用しています。9.10からはPPAの組み込みが簡単になりました。
$ sudo add-apt-repository ppa:kalon33/ppa
3Dは使わないので、最小限の4つだけ利用しています。
  • psb-kernel-headers
  • psb-kernel-source
  • psb-modules
  • xserver-xorg-video-psb


サスペンドからの復帰

話を戻してサスペンドからの復帰です。初期の状態ではサスペンドから復帰すると画面が崩れてしまう場合と、ブラックアウトになる場合があるようです。画面が崩れた場合は Ctrl+Alt+F1 で仮想端末に切り替えてから、Ctrl+Alt+F7 で復帰できます。

ブラックアウトになってしまった時は仮想端末を切り替える方法が使えないので、acpi-support の DOUBLE_CONSOLE_SWITCH=true についているコメントを外し、ブラックアウトが起こらないようにします。
$ sudo vi /etc/default/acpi-support
================

# Uncomment the next line to switch away from X and back again after resume.
# This is needed for some hardware, but should be unnecessary on most.
DOUBLE_CONSOLE_SWITCH=true

最後に画面の崩れ対策です。崩れないようにできればいいのですが、これはビデオドライバが原因のようです。psbドライバを組み込まないでサスペンドさせると、画面がまったく崩れません。

画面の崩れは Ctrl+Alt+F1 のあと Ctrl+Alt+F7 で復帰できるので、これを自動実行するスクリプトを作成します。/etc/pm/sleep.d に実行ファイルを置いておくとサスペンド時に実行されるので、00umountchvt というファイルを作成してパーミッションを755にしておきます。中身は以下の2行です。
chvt 1
chvt 7
chvtは仮想端末の切り替えを行うコマンドで、とりあえずこれで目的は果たせるのですが、これだとサスペンドに入るときと復帰時の2回実行されてしまうのでもう少し修正します。


検索していたら見つけた、サウンドドライバをサスペンドの復帰時に読み直すスクリプトらしいのですが流用させてもらいます。
【追記】SDカードのアンマウント処理を追加しました。
case "$1" in
        hibernate|suspend)
                [ -b /dev/mmcblk0p1 ] && umount /dev/mmcblk0p1
                ;;
        thaw|resume)
                chvt 1
                chvt 7
                ;;
        *) exit $NA
                ;;
esac


まとめ

以上で自分の場合はサスペンドがうまくいくようになりましたが、環境が違うと、この方法でうまくいくかわかりません。SDカードのマウントでフリーズする辺りは、早々に修正されそうな気もします。

ちなみにnblogの中の人は、まったくと言っていいほどサスペンドを使わないので、修正が来ても気づかないかもしれません。