
Ubuntu 18.04 で「サスペンド」機能を正しく動作させることができません。ただし、休止状態機能は期待どおりに動作します。
問題の説明: 電源メニューまたは「sudo systemctl suspend」からサスペンドを使用すると、動作は次のようになります。
- マシンはスリープ モードになり、電源ボタンの LED がゆっくり点滅します (呼吸します)。
- ラップトップを再起動すると、OS が起動し、通常のログイン画面が表示されますが、実行されていたアプリケーションはどれも復元されません。
これまでに行ったこと:
$ sudo apt-get install uswsusp
$ sudo update-initramfs -u
$ sudo systemctl edit systemd-suspend.service
次の行を systemd-suspend.service に貼り付けました。
[Service]
ExecStart=
ExecStartPre=-/bin/run-parts -v -a pre /usr/lib/systemd/system-sleep
ExecStart=/usr/sbin/s2ram
ExecStartPost=-/bin/run-parts -v --reverse -a post /usr/lib/systemd/system-sleep
- ファイルを保存しました。/etc/systemd/system/に保存されます。
走る:
$ sudo systemctlデーモンリロード
試して:
$ sudo systemctl サスペンド
結果は上記のとおりで、ラップトップはスリープ状態になりますが、保存されたセッションは再起動時に復元されません。
systemd-suspend.service スクリプトが呼び出されていることはわかっています。ExecStart=/usr/sbin/s2ram の行を ExecStart=/usr/sbin/s2disk に変更すると、ラップトップは休止状態になり、セッションが復元されます。
追加情報:
Hibernate を動作させるために、grub を変更しました:
sudoedit /etc/default/grub
この行を変更しました:
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"
to:
GRUB_CMDLINE_LINUX_DEFAULT="no_console_suspend initcall_debug resume=UUID=<string of hex> resume_offset=34816"
その後実行しました:
$ sudo アップデート-grub
カーネル情報:
lsb_release -a
Distributor ID: Ubuntu
Description: Ubuntu 18.04.2 LTS
Release: 18.04
Codename: bionic
uname -a
Linux <machinename> 4.18.0-21-generic #22~18.04.1-Ubuntu SMP Thu May 16 15:07:19 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux
sudo s2ram -K
This kernel has KMS support.
何か手順や設定項目が抜けているのでしょうか?
答え1
答えを探し求めて頭を悩ませた後、私はさまざまな情報源から得た情報をかき集めて、自分なりの解決策にたどり着きました。この解決策は、Ubuntu 18.04 を実行している私の Sony Vaio モデル VPCEB15FM では機能しますが、あなたの場合の結果は異なる可能性があります。
休止状態/サスペンドを正しく動作させる上での問題の一部は、Ubuntu が /dev/sda2、/dev/sdb2 などをロードして割り当てる方法にあります。これは、ドライブの割り当て順序がブートごとに変わることがあるためです。したがって、最初の手順は、スワップ パーティションの UUID を識別することです。UUID は一定であるため、マウント ポイントの信頼性が大幅に高まります。
UUID は以下から取得できます:
sudo blkid
「スワップ」というエントリを探します
/dev/sda2: UUID="5c555600-2e37-477d-62df-6013d61dc36" TYPE="swap" PARTUUID="2f501554-02"
あなたの UUID は私のものとは異なります。私の UUID ではなく、あなたの UUID を使用してください。
スワップ パーティションの代わりにスワップ ファイルを使用している場合は、メインの Linux パーティションの UUID を使用します。また、スワップ ファイルへのオフセットも知っておく必要があります。
スワップ ファイルへのオフセットを取得するには:
sudo filefrag -v /swapfile
出力は次のようになります。
ext: logical_offset: physical_offset: length: expected: flags:
0: 0.. 32767: 34816.. 67583: 32768:
1: 32768.. 63487: 67584.. 98303: 30720:
2: 63488.. 96255: 100352.. 133119: 32768: 98304:
必要なオフセットは最初の「physical_offset」です。この場合は 34816 になります。
これで、開始するために必要な情報が揃いました。
/etc/default/grub を変更する
sudoedit /etc/default/grub
次の行を変更します:
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"
スワップパーティションを使用する場合:
GRUB_CMDLINE_LINUX_DEFAULT="no_console_suspend initcall_debug resume=UUID=5c555600-2e37-477d-62df-6013d61dc36"
スワップファイルを使用する場合:
GRUB_CMDLINE_LINUX_DEFAULT="no_console_suspend initcall_debug resume=UUID=5c555600-2e37-477d-62df-6013d61dc36 resume_offset=34816"
uswsusp をインストールします。
これにより、s2disk、s2ram、および s2both メソッドがインストールされます。
sudo apt-get install uswsusp
systemd-hibernate.service と systemd-suspend.service を設定します。
これらのファイルは /etc/systemd/system/ にあります。まだ存在しない場合はそこに作成されます。
sudo systemctl edit systemd-hibernate.service
次の行を貼り付けます:
[Service]
ExecStart=
ExecStartPre=-/bin/run-parts -v -a pre /lib/systemd/system-sleep
ExecStart=/usr/sbin/s2disk
ExecStartPost=-/bin/run-parts -v --reverse -a post /lib/systemd/system-sleep
注: 私のシステムには /lib/systemd/system-sleep へのパスがありますが、他のシステムでは /usr/lib/systemd/system-sleep のように異なる場所にある可能性があります。
sudo systemctl edit systemd-suspend.service
次の行を貼り付けます:
[Service]
ExecStart=
ExecStartPre=-/bin/run-parts -v -a pre /lib/systemd/system-sleep
ExecStart=/usr/sbin/s2both
ExecStartPost=-/bin/run-parts -v --reverse -a post /lib/systemd/system-sleep
「サスペンド」構成では、s2ram の代わりに s2both を使用することに注意してください。s2ram は私のシステムでは動作しませんでしたが、s2both は常に動作します。
Ubuntu 18.04 および 20.04:
/etc/uswsusp.conf を編集します。
UUID を使用し、スワップファイルを使用する場合はオフセットを使用します。
sudo nano /etc/uswsusp.conf
UUID などを使用するように変更します。
# /etc/uswsusp.conf(5) -- Configuration file for s2disk/s2both
resume device = UUID=5c555600-2e37-477d-62df-6013d61dc36
compress = y
# early writeout = y
# image size = 1741570539
# RSA key file = /etc/uswsusp.key
shutdown method = platform
# only needed if using a swapfile
# resume offset = 34816
注: uswsusp.conf のマニュアル ページには、すべてのパラメータが完全に説明されています。他にも設定はたくさんありますが、これは最低限必要な設定です。コメント行は、他のオプションの一部を確認できるように残されています。
Ubuntu 22.04:
/etc/suspend.conf を編集します。
2022年9月16日 /etc/uswsusp.conf ファイルは /etc/suspend.conf に置き換えられました
見る:https://wiki.archlinux.org/title/Uswsusp
sudo nano /etc/suspend.conf
だけ "再開デバイス「」行は上記の手順から変更されていますが、その他はすべて同じままです。
代わりに次の行を使用してください:
resume device = /dev/disk/by-label/swap
/etc/initramfs-tools/conf.d/resumeを編集する
sudo nano /etc/initramfs-tools/conf.d/resume
次の行を追加します: RESUME=UUID=5c555600-2e37-477d-62df-6013d61dc3
注: スワップファイルを使用する場合は、オフセットを追加する必要があります。UUID の後に resume offset = 34816 を追加します。
はい、これでさまざまな構成項目が処理されるはずです。
grub と initramfs を更新します。
sudo update-grub
sudo update-initramfs -u or update-initramfs -u -k all to do all kernels
Ubuntuを再起動します。
再起動後、休止状態とサスペンド機能をテストします。休止状態は、再開ファイルをスワップに書き込み、マシンをシャットダウンするのに数分かかることがあります。慌てないでください。サスペンドの方が少し速いです。
全部テストしてみましょう!
sudo systemctl hibernate
sudo systemctl suspend
見るべきもの:
- 休止状態 - システムを完全にシャットダウンします。数分かかります。コンピュータを再起動して再度ログインすると、アプリケーションが再開されます。注: 再開プロセスには数分かかることがあり、再開中はマシンがハングしているように見える場合があります。しばらくお待ちください。
- サスペンド - システムは「スリープ」モードになり、電源ランプがゆっくり点滅します (呼吸します)。メイン電源ボタンを押すと、マシンが起動します。ログイン画面が表示され、アプリケーションが再開されます。
さらなるステップ:
電源メニューのドロップダウンからスリープ/サスペンド モードに入ることができます。ドロップダウンを開いたら、Alt キーを押します。電源アイコンがスリープ アイコンに変わります。
Hibernate メニュー オプションも追加できます。これについては、「ubuntu add hibernate power menu」で検索すると、すでに優れたチュートリアルが見つかります。