Shino's Bar Linux Stuff

走れパピーPuppy Linux core logo

24 May 2009 リスタートさせるモジュールを usb_storage → ehci_hcd に変更(初出:4 Apr 2009)
Go to走れパピー 目次

パピー・リナックスのサスペンド機能

中古で手に入れた IBM ThikPad X21 に Puppy Linux 4.1.2.1JP をインストールしました。 これを、蓋を閉じたときにサスペンドするよう設定します。

Puppy Linux 4.2日本語版にはこれらが設定されています。 トラブルが無いようならこの記事は不要です。

acpidのインストール

Puppy Linux 4.1.x の場合 acpidをインストールします。 Puppy Linux 4.2には acpid が最初から含まれています。追加してインストールは不要です。

Puppy Download page から辿って、pet_packages-4 の中にある acpid-1.0.8-2-i486.pet をダウンロードします。 ダウンロードしたファイルをクリックすると PETget が立ち上がって、インストールしてくれます。

これで電源ボタンを押すとシャットダウンするようになります。 しかしサスペンドするには次の設定が必要です。

サスペンド機能の設定

  1. suspend.sh の作成

    /etc/acpi ディレクトリの中に actions という名前のディレクトリを作り、 以下の内容のスクリプトを suspend.sh という名前で保存し、実行属性を付けます。

    改良版をこのページ末尾に記しています。

    #!/bin/sh
    # process before suspend
    sync
    rmmod ehci_hcd
    
    # suspend
    echo -n mem > /sys/power/state
    
    # process at recovery from suspend
    modprobe ehci_hcd
    

    このスクリプトはサスペンドの前後でusb_storage ehci_hcd をリスタートさせています。 デスクトップにあったUSB接続ドライブのアイコンがサスペンド復帰後に消えてしまうという、 Puppy Linux 4.1x における問題に対処したものです。 Puppy Linux 4.20ではこうしなくてもアイコンが復帰しましたので、これらの行は不要です (eeePCで必要だったという報告もあります)。

    パピーリナックス日本語版フォーラム でのきりんさん、jakeさんの報告 によれば環境によりusb_storageのリスタートでは問題が生じるようです。 代わりに ehci_hcd をリスタートさせるとよいとのこと。

  2. イベントの登録

    /etc/acpi/events ディレクトリ内に以下の内容を好きな名前たとえば lidsuspend として保存します。 実行属性は不要です。

    event=button.lid*
    action=/etc/acpi/actions/suspend.sh
    
  3. acpid の再起動

    端末を立ち上げて、以下のコマンドを入力します。 あるいはPCを再起動しても可。

    /etc/init.d/rc.acpi restart
    

以上で、PCの蓋を閉じるとサスペンド、開けると復帰するはずです。

トラブルシュート

うまく動かなかったときは、 acpidを次のようにデバッグモードで起動するとメッセージが得られるので手がかりになるでしょう。 端末から

killall acpid
acpid -dl

問題点

USB接続ドライブをマウントしている状態でしないすると、復帰後にそのドライブの番号が変わります。 サスペンド前にアンマウントしてやり、復帰後にマウントしなおすという処理も考えられますが、フォルダを開いているなど使用中だとアンマウントもできません。

次善の策として、USB接続ドライブがマウントされているときはサスペンドしないようにします。 suspend.sh を次のものと入れ替えます。 このスクリプトは(probedisk2が Puppy Linux独自コマンドのため) Puppy Linuxでのみ有効です。

#!/bin/sh
# do not suspend if usb media mounted
USBS=$(probedisk2|grep '|usb' | cut -d'|' -f1 )
for USB in $USBS
do
	mount | grep -q "^$USB" && exit
done

# process before suspend
# sync not needed because usb media are not mounted
#sync
rmmod ehci_hcd

#suspend
echo -n mem > /sys/power/state

# process at recovery from suspend
modprobe ehci_hcd

Puppy Linux 4.20ではサスペンド前後の ehci_hc の行は不要のはずですが、 環境により加えてみてください (きりんさんの報告によれば eeePCで必要だったとのこと)。

参考ページ