SSブログ

デスクトップでのハイバネート [プログラム]

私のデスクトップ(Debian)は、24時間運転ではありません。必要なときだけ電源を入れています。電源を落とす前に実行中のプロセスを一応確認するのですが、やはりときどき実行中のまま電源を落としてしまうことがあります。また、最近、何日もかかるようなプログラムを作成したのですが、その実行のためにデスクトップの電源を入れっぱなしにはしたくありません。

そこで、ハイバネート機能です。電源を入れ直したとき、以前の状態から再開してくれます。

ノートPCにdebianをインストールしたら、自動的にハイバネート機能がインストールされていました。
ハイバネート機能を使うと、実行中の状態を保存してくれるため、個々の「プログラム側の修正なし」で電源断に対応できます。shutdownの代わりにhibernateを使うだけです。
これは、ノートPCだけでなく、デスクトップでも使えます。

インストールは簡単です。
    apt-get install hibernate
    apt-get install gnome-power-manager
gnomeを使っているときに電源ボタンをおすと、サスペンド、ハイバネートのいずれかを選択できます。
が、実際には、ハイバネートできませんでした。途中でエラーになりました。
一方、コマンドモード、つまり、ターミナルからrootでhiberneteすれば正常にハイバネートします。パーミッションの問題かなにかでしょう(詳しく調べていません)。

ところで、gnomeでなくコンソールのときに電源ボタンをおすと、ハイバネートでなくシャットダウンします(私はacpidを使用しています)。これをハイバネートに変更しておいたほうがよさそうです。通常の電源断はハイバネートで、本当にシャットダウンしたいときだけ、shutdownコマンドで電源断するほうが、誤って電源ボタンを押したときのことを考えると、より安全でしょう。

さて、コンソールのときに、電源ボタンをおすと、たぶん
    /etc/acpi/events/powerbtn-acpi-support
     → /etc/acpi/powerbtn-acpi-support.sh
      → /etc/acpi/powerbtn.sh
と呼び出されます(ただし、/etc/acpi/powerbtn.shがなければ、powerbtn-acpi-support.sh内でshutdownを実行します)。
ですので、/etc/acpi/powerbtn.shを作成し/usr/sbin/hibernateを実行させます。たとえば、次のようにします。
    #!/bin/sh
    #$Id$
    HIBERNATE=/usr/sbin/hibernate
    if [ -x $HIBERNATE ]; then
        exec $HIBERNATE
    fi
    # if hibernate fail, then try shutdown
    /sbin/shutdown -h -P now "Power button pressed"
注意点として、hibernateから復帰後は、当然ですが、その次のコマンドから実行が開始されますので、不要なコマンドを実行しないようにしてください。上記の例では、execを忘れると、復帰後すぐにシャットダウンしてしまいます。


以下のような問題点があります。
  • USBに接続されたデバイスは、復帰時にダブって接続されることがあります。たとえば、SDカードなどが二重にマウントされることがあります。おそらくUSBなどのhotplugデバイスを管理しているものが、復帰時に「新たに接続された」と認識するためでしょう。
  • 復帰時にマウスが表示されませんでした。キーボードは生きているので、おそらくマウスを差し直すと直るでしょう。
  • 「カーネルモジュールをアップデートすると復帰できない」らしいです(私はまだその状況に遭遇していません)。apt-get upgrade等をする際には、そのことを頭において実行しましょう。
  • 復帰時に以前の状態に戻ります。必要なら、状態を暗号化して保存するようにして、さらに、起動時にパスワードを要求するようにしなければならないでしょう。


共通テーマ:パソコン・インターネット

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。