Ubuntu 18.04 のサスペンドが uswsusp と s2ram を使用しても状態を保存しない

Ubuntu 18.04 のサスペンドが uswsusp と s2ram を使用しても状態を保存しない

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」で検索すると、すでに優れたチュートリアルが見つかります。

関連情報