猫の手も借したい

暇を極めた時に更新します

Ubuntu 17.04においてのハイバネートについて

正確にはKubuntu 17.04環境で行いましたが、他のUbuntuフレーバーでもさして変わらないと思います。

前回、Kubuntu 17.04を導入した際になかなかハイバネートを有効にできず、日本語の資料も見当たらなかったので共有します。私が見つけられなかっただけかもしれませんが。
akkisino02.hatenablog.com



ハイバネートはWindowsで言う休止状態です。
RAMの中身を補助記憶装置に書き出すことによって、スリープとは違い作業状況を維持しながら完全に電源を落とすことができます。
Linuxでは、SWAP領域にRAMの中身を書き出します。

Ubuntu 17.04からSWAPの扱いが変わった

基本的にパーティション切りを手動でやってたので気づきませんでしたが、Ubuntu 17.04からはSWAP領域を持たないようです。Kubuntu 17.04を自動でインストールさせたらハイバネートに入れずビビリました。

では、SWAPがなくなったかと言うとそういうわけでもなく、/swapfileというファイルとしてSWAPファイルを持つようになりました。


現在割り振られているSWAP領域はswaponコマンドで確認できます。

$ swapon -s

恐らくですが、大抵の場合は2GBが割り振られているはずです。
補助記憶の空き容量の5%、もしくは2GB のどちらか小さいほうが採用されるようです。

ハイバネートを使えるようにする

SWAPファイル自体がハイバネートに適していないようです。
詳しくは調べていないのでわかりませんが、今までSWAP領域を使ってきているのでそのほうがわかりやすいし移行することにしました。
いつぞやのバージョンからUbuntu自体がハイバネートを隠すようになったのでそれでも問題ないのかもしれませんが、ハイバネートを利用したいユーザにとってこれは深刻です。


そのため一番最初にSWAP領域を確保する必要があります。
適当なユーティリティでSWAP用に領域を確保し、ファイルシステムLinux swapを指定してください。この際、実メモリより大きい領域を確保することが必要です。
また、手動インストールの場合はそもそもインストール時点でSWAP領域を確保して置くことでこの手順はスキップできます。


次に、fstabにSWAP領域をマウントする記述を追加します。

UUID=SWAP領域のUUID    none    swap    sw    0    0

この時点で/swapfileの記述をコメントアウトしました。


再起動します。カーネルパニックが起これば記述が間違えているのでコンソールから書き直してください。
起動すれば、再度swaponで正しくスワップ領域が追加されていることを確認します。
ちなみに不要なので/swapfileはここで削除しました。

$ swapon -s
Filename                                Type            Size    Used    Priority
/dev/sdb3                               partition       8912892 0       -1

これで、ハイバネートができるようになったと言いたいところですが、まだハイバネートに入ったきり復帰できません。ただのエクストリームなシャットダウンです。


次は/etc/default/grubを書き換えます。

# この行を編集
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash resume=UUID=SWAP領域のUUID"

# 編集を適用
$ sudo update-grub


ではここまで来たら正常にハイバネートできるか試してみましょう。

$ sudo pm-hibernate

しばらくしてから電源が完全に落ち、再度起動した際に作業状態が維持されていれば成功です。


正常にハイバネートができればメニューにハイバネートのエントリを追加します。
/etc/polkit-1/localauthority/50-local.d/com.ubuntu.enable-hibernate.pklaを以下の内容で作成してください。

[Re-enable hibernate by default in upower]
Identity=unix-user:*
Action=org.freedesktop.upower.hibernate
ResultActive=yes

[Re-enable hibernate by default in logind]
Identity=unix-user:*
Action=org.freedesktop.login1.hibernate;org.freedesktop.login1.handle-hibernate-key;org.freedesktop.login1;org.freedesktop.login1.hibernate-multiple-sessions;org.freedesktop.login1.hibernate-ignore-inhibit
ResultActive=yes


再起動します。

$ sudo shutdown -r now

以上でKubuntu 17.04でハイバネートできるようになりました。
そろそろKubuntu 17.10が出る頃ですが、きっと大きくは変わらないと信じています。きっと。