
我無法讓「掛起」功能在 Ubuntu 18.04 上正常運作。然而 Hibernate 功能如預期運作。
問題描述:當我從電源選單或「sudo systemctl suspend」使用掛起時,行為是:
- 機器進入睡眠模式,電源按鈕 LED 緩慢閃爍(呼吸)。
- 當筆記型電腦重新啟動時,作業系統啟動,我看到通常的登入畫面,但正在運行的應用程式都沒有恢復。
到目前為止我所做的:
$ 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 將與我的不同。別用我的,用你的。
如果您使用交換檔案而不是交換分割區,請使用主 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
注意在「掛起」配置中使用 s2both 而不是 s2ram。 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 有一個手冊頁,完整描述了所有參數。還有很多其他設置,這是最低要求。註解行被保留,以便您可以看到一些其他選項。
烏班圖22.04:
編輯/etc/suspend.conf。
09-16-2022 /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。
重新啟動後測試休眠和掛起功能。 Hibernate 可能需要幾分鐘的時間才能將復原檔案寫入交換區並關閉電腦。請勿恐慌.暫停速度有點快。
全部測試一下!
sudo systemctl hibernate
sudo systemctl suspend
你應該看到什麼:
- 休眠 - 完全關閉系統,需要幾分鐘。重新啟動電腦並重新登入後,您的應用程式應該會恢復。注意:恢復過程可能需要幾分鐘時間,並且在恢復發生時電腦可能會出現掛起狀態。要有耐心。
- 掛起 - 系統進入「睡眠」模式,電源指示燈緩慢閃爍(呼吸)。按下主電源按鈕可喚醒機器。您應該會看到登入畫面,並且您的應用程式應該會恢復。
進一步的步驟:
您應該能夠從電源選單下拉選單進入睡眠/掛起模式。開啟下拉式選單時,按 Alt 鍵。電源圖示應變更為睡眠圖示。
也可以新增休眠選單選項。已經有一些很好的教程可以透過搜尋“ubuntu add hibernate power menu”找到