web-dev-qa-db-ja.com

Ubuntu 16.04で休止状態にするにはどうすればよいですか?

Ubuntu 16.04を正常に休止状態にするにはどうすればよいですか?

私はウェブ上のほとんどすべてのソリューションを試しましたが、それらのどれも実際には役に立ちませんでした。私の問題は this one とほぼ完全に似ていることがわかりました

85
Mahyar

使用できます

Sudo pm-hibernate 

システムで休止状態が機能するかどうかを確認するには(これにより、コンピュータが休止状態になります)。

動作しない場合は、スワップサイズが少なくともRAMと同じかどうかを確認してください。

設定メニューにオプションを追加するには、構成ファイルを作成できます。ターミナルウィンドウを開き、次のコマンドを実行します。

Sudo nano /etc/polkit-1/localauthority/50-local.d/com.ubuntu.enable-hibernate.pkla

空のファイルでnanoを開きます。以下の行をコピーして、nanoウィンドウに貼り付けます。

[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

次に、変更を保存してnanoを閉じ、システムを再起動して、「電源オプション」にHibernateを使用可能にします。

参照: コンピューターを休止状態にする方法は? Ubuntu 16.04の公式ドキュメント。

それがうまくいくことを願っています。他のすべてのオプションを試した後、これは私のために働いた。

61
NirajW

systemctlを使用して休止状態にし、困難な場合に機能させる

私にとって、pm-hibernateは常に失敗します。いくつかの微調整の後、systemdのインターフェイス(16.04以降の初期システム)を使用して休止状態にすることができました。また、17.04でスワップファイルを使用して動作させることもできました。このケーススタディは、問題を抱えている他の人に役立つかもしれません。

初挑戦:

Sudo systemctl hibernate

それが失敗した場合は、トラブルシューティングを開始します。休止状態(HTDまたはACPI S4)では、マシンの状態がディスクに書き込まれるため、保存するために電力は必要ありません。状態は、スワップパーティションまたはスワップファイルのいずれかに書き込まれます。 注:BTRFSを使用している場合、ファイルシステムの破損を引き起こす可能性があるため、スワップファイルを使用しないでください

休止状態を許可するには、スワップパーティションまたはスワップファイルをRAMと同じサイズにする必要がありますが、少なくともRAMのサイズの2/5であれば休止状態にできる可能性が高くなります。 Arch wikiページ に従って、スワップサイズを増やす前に他の手順を最初に試してください。

問題が、予想される再開ではなくクリーンブートを取得することである場合、少なくともディスクイメージを見つけるためにブートパラメーターを設定する必要があります

スワップパーティションを見つけます。

grep swap /etc/fstab

私にとっては、これは(部分的な出力)を返します

# swap was on /dev/mmcblk0p3 during installation

ここで、/dev/mmcblk0p3は指定するパーティションです

ブートパラメータを追加します。

sudoedit /etc/default/grub

GRUB_CMDLINE_LINUX_DEFAULTで始まる行に、resume=/dev/YourSwapPartitionを引用符で囲んだセクションに追加します(前に特定したパーティションに置き換えます)。私の例を使用して:

GRUB_CMDLINE_LINUX_DEFAULT="quiet splash resume=/dev/mmcblk0p3" 

このファイルを変更するたびに、Sudo update-grubを実行する必要があります。そうしないと、変更は効果がありません。

次に、再起動する必要があります。次に、次のコマンドを発行して、休止状態を試みることができます。

Sudo systemctl hibernate

再開するには、電源ボタンを押すとシステムが起動します。

それでも問題が解決しない場合は、デバッグを開始してください。

例として以下のケースを含めますが、S状態のデバッグに関する詳細情報は このブログで および これも にあります。

より多くの情報を収集するには、さらにいくつかのブートパラメータを設定します。 quietsplashを削除し、initcall_debugno_console_suspendを追加します。これにより、initシステムコールがコンソールに出力され、何が問題なのかを確認できます。私はこれを設定しました:

GRUB_CMDLINE_LINUX_DEFAULT="resume=/dev/mmcblk0p3 no_console_suspend initcall_debug"

これにより、休止状態からの再開時に何が問題になっていたかがわかりました。

私の場合、レジューム後にWiFiを失い、ほとんどのコマンド(たとえば、/sysからの読み取り、モジュールまたはsystemctlコマンドの再読み込み)が機能しないため、カーネルが明らかに動揺しました-プロセスが表示されます開始してハングするだけです(もちろん、これはすべて再起動後に通常に戻ります)。システムが非常にゆっくりとシャットダウンし、すべてのデバッグメッセージが表示されるのを見て、「brcm」に多くの問題があることに気づいたので、Broadcomワイヤレスドライバーモジュールのせいだと思いました。案の定、休止状態の手順を調整して、最初にモジュールをアンロードします。

Sudo modprobe -r brcmfmac
Sudo systemctl hibernate

再開時にモジュールを再挿入します

Sudo modprobe brcmfmac

そして、すべてが完璧に機能しました。また、btsdioと互換性がないと思われるbrcmfmacモジュールをブラックリストに登録する必要があります。


更新:17.04のスワップファイルを使用した休止状態。

再びArch wikiページの助けといくつかの追加の調整により、17.04でスワップファイルを使用してハイバネーションを動作させることができました。これには追加のブートパラメータresume_offset=nが必要でした。nはphysical_offsetの出力のSudo filefrag -v /swapfileの下の最初の数字です。

$ Sudo filefrag -v /swapfile
Filesystem type is: ef53
File size of /swapfile is 1425873920 (348114 blocks of 4096 bytes)
 ext:     logical_offset:        physical_offset: length:   expected: flags:
   0:        0..   32767:      34816..     67583:  32768:            
   1:    32768..   63487:      67584..     98303:  30720:            
   .... 

したがって、私の場合の追加のブートパラメーターはresume_offset=34816です。再開するパーティションのブートパラメータを設定する必要があります。これがルートパーティション(またはスワップファイルが置かれているパーティション)になります。私のパラメーターは次のとおりです。

GRUB_CMDLINE_LINUX_DEFAULT="no_console_suspend initcall_debug resume=/dev/mmcblk1p2 resume_offset=34816"

ここで、/dev/mmcblk1p2はルートパーティションです(あなたのパーティションは/dev/sda2のようなものである可能性が高くなります)。

再開中にイメージが正常に読み込まれましたが、私の場合(例-YMMVAPD)、さらにいくつかのドライバー(i2c_designware)がエラーをスローし、再開時にシステムが完全にフリーズしました。 brcmfmacに加えてこれらのモジュールをアンロードするとハイバネーションは機能しますが、システムはそれらのモジュールなしではすぐに使用できなくなります。したがって、バグのあるモジュールをアンロードして、再開時にすぐに再挿入するためのスクリプトを作成しました。

# remove buggy modules
modprobe -r brcmfmac i2c_designware_platform i2c_designware_core &&
# hibernate
echo disk > /sys/power/state
# reinsert
modprobe i2c_designware_core i2c_designware_platform brcmfmac

休止状態にしたいときは、Sudo bash scriptを実行します。これはうまく機能します。


TL; DR

Systemdを使用し、スワップから再開するためのブートパラメーターを設定し、バギードライバーを特定し、休止状態を開始する前にそれらをアンロードします。これらのモジュールがないとシステムが長時間動作しない場合、またはいくつかのモジュールをアンロードする必要がある場合、単純なスクリプトを使用して休止状態を開始する方が簡単な場合があります。

59
Zanna

buntu Wiki (手順が必要な場合は以下を参照してください)で説明されているように、16.04回答でhibernateを有効にする方法はすべて知られていると思います。しかし、チェックが必要なことは徹底的ではないと思います。少なくとも、それは私が見つけたものです。

確認事項

私自身のテストから、少なくとも1つの余分なチェックを実行する必要があります。私はそれをインターネットのどこにも見つけませんでした。

ここにいくつかのチェックがあります-

  1. btrfsパーティションを使用していないことを確認してください。 はい。私のテストから、btrfsパーティションがある場合、休止状態は機能しないことがわかりました。パーティションタイプをext4に削除または変更しても、役に立ちませんでした。 btrfs-toolsパッケージを削除する必要がありました。

    Sudo apt-get purge btrfs-tools
    

    十分にテストされていない他の新しいパーティションタイプを確認することをお勧めします。パッケージを削除せずに、ドライバーのブラックリストを作成しても機能する場合がありますが、私はそれをテストしていません。

  2. また、RAMの内容を保持するのに十分な大きさのスワップパーティションがあることを確認する必要があります。 RAMが4 GBの場合、スワップは少なくとも4 GBの大きさにする必要があります(安全のために、さらにいくつかのMBを割り当てる必要があります)。

休止状態を有効にする手順

これらの手順が含まれます

  1. /etc/polkit-1/localauthority/50-local.d/enable-hibernate.pklaにルートとしてファイルを作成します

    Sudo -i nano /etc/polkit-1/localauthority/50-local.d/enable-hibernate.pkla
    
  2. これらのコンテンツをそのファイルに入れます

    [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
    
  3. を押してファイルを保存します Ctrl-O。で終了 Ctrl-X

  4. polkitdデーモンを再起動します

    Sudo systemctl restart polkitd.service
    

休止状態を有効にする必要があります。

19
Anwar

セキュアブート

(私は 同様の質問 systemdベースの返信に焦点を当てて、この質問をフォローしている人々のために私のソリューションをここで共有しました)

このソリューションは、 Fedora トピックに基づいています(以前にsystemdに切り替えたため、より多くの資料があります)。

私の場合(常に休止状態をサポートするマシンに新しい16.04.1をインストールする)、廃止されたSudo pm-hibernateを呼び出しても何も行われず、最新のシステム化されたアプローチsystemctl hibernateが返されます。

Failed to hibernate system via logind: Sleep verb not supported

セキュアブートが原因であることが判明しました。16.04をインストールすると、それで何をしたいのかを尋ねられます(思い出す限り、これは新しいことです)。

セキュアブートをオンにしたマシンで、cat /sys/power/diskが答えました:

 [disabled]

再起動し、BIOS設定でセキュアブートを無効にした後(これらはマシン固有ですが、通常は非常に簡単です)、私はcat /sys/power/diskを試してみました:

 [platform] shutdown reboot suspend 

良く見えます。そして実際にsystemctl hibernateを呼び出すと、休止状態/解凍シーケンスが成功します。

さらに、その後、グラフィカルインターフェイスのさまざまな場所で、polkitハックを必要とせずに、休止状態をオプションとして使用できるようになりました。したがって、systemdは実際に/sys/power/diskからシステムが休止状態にできなかったことを推測していたようです。

7
Marc

この指示は、Ubuntu 18.04のインストールで機能しました。

  1. Sudo apt install hibernate hibernateおよびhibernateに必要な他の依存関係をインストールします
  2. grep swap /etc/fstab(fuid UUID)
  3. sudoedit /etc/default/grub GRUB_CMDLINE_LINUX_DEFAULT = "quiet splash"行にスワップのUUIDを追加します。行は次のようになりますGRUB_CMDLINE_LINUX_DEFAULT = "quiet splash resume = UUID of swap"
  4. Sudo update-grub
  5. 再起動し、再起動後Sudo systemctl hibernate。すべてが正常に機能する場合は、メニューエントリを追加します。
  6. Sudo gedit /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

https://askubuntu.com/a/819891/7122 からコピー

  1. コンピューターを再起動します
  2. インストール https://extensions.gnome.org/extension/755/hibernate-status-button/
5

私にとっては、hibernateパッケージをインストールし、再起動してSudo hibernate-diskを実行します。メニューに追加することは可能ですが、時間をかける価値はありません。

4
Aiphee

私自身のコメントをkelvineloveの答えに拡大すると、編集者が提案したファイルは私のシステムには存在しませんでした(Ubuntu 16.04が新鮮です)。代わりに、私はこれをしました:

  1. Sudo nano /var/lib/polkit-1/localauthority/10-vendor.d/com.ubuntu.desktop.pkla

  2. これらのセクションを探します(それらはお互いに正しいです):

    [upowerでデフォルトで休止状態を無効にする] Identity = unix-user:* Action = org.freedesktop.upower.hibernate ResultActive = no

    [logindでデフォルトでhibernateを無効にする] Identity = unix-user:* Action = org.freedesktop.login1.hibernate; org.freedesktop.login1.handle-hibernate-key; ResultActive = no

  3. 両方のResultActive = noResultActive = yesに変更します。

  4. Ctrl + Oを押してファイルを保存します。
  5. コンピューターを再起動します
  6. Hibernateオプションが電源メニューで利用可能になりました。

編集:Gunnarは、特定のパッケージが更新されるとこのファイルが上書きされることを指摘したので、意図によっては最善の解決策ではない可能性が高いです。

出典: http://www.zedt.eu/tech/linux/enable-hibernation-xubuntu-16-04/

4
fgblomqvist

Ubuntuでのより一般的な休止状態の問題を整理するのに役立つ非常に優れたリソースがここにあります。

私の場合、Lenovo u300でUbuntu 16.10を実行し、休止状態が正しく機能するためには、次のことをしなければなりませんでした。

  • 適切なサイズのスワップファイルを作成します(通常はサイズを1倍に設定しますが、最大で1.6倍と2倍に聞こえます)
  • /etc/default/grubを編集して、次の行を含めます。

    GRUB_CMDLINE_LINUX_DEFAULT="splash quiet pci=nomsi RESUME=UUID=92781adb-f2a6-4f15-88fc-e1ce801291dd"
    

RESUMEは、特定のスワップファイルUUIDを指します。特に、私のマシンではpci=nomsi設定がキーでした。

幸運を祈ります!

3
richbl

まず、マシンが休止状態をサポートしているかどうかをテストすることをお勧めします。休止状態がデフォルトで無効になっている理由は、マシンによっては不快な結果になることがあるためです。ターミナルを開いてマシンをテストします(Ctrl+Alt+T)そしてSudo pm-hibernateと入力します

マシンは休止状態になります。休止状態の後にマシンを起動し、正常に動作しないか、正常に動作するかを確認します。冬眠後に何らかの異常が発生した場合は、次の手順を続行しないことをお勧めします。ただし、正常に動作する場合は、これを実行して休止状態をアクティブにし続けます。

Sudo gedit /etc/polkit-1/localauthority/50-local.d/com.ubuntu.enable-hibernate.pkla

開いたファイルを編集して、次の行を追加します。

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

この後、マシンを再起動し、ログイン後、電源設定メニューの右上の設定コーナーに休止状態オプションが追加されます。

3
kelvinelove

少し手間をかけて手動で有効にする必要があります。デフォルトでは無効になっています。

http://ubuntuhandbook.org/index.php/2014/04/enable-hibernate-ubuntu-14-04/

それが機能しない場合は、4.4.0カーネルの問題である可能性があり、カーネルのアップグレードが必要になる場合があります。

1
Mookey