linux筆記本設置休眠


掛起睡眠和休眠的區別

三種存儲當前運行狀態數據(前后台進程服務,不包含buff cache等)的方式

  • 掛起suspend 存儲到內存 設備通電 低功耗

  • 睡眠hybrid-sleep 存儲到內存和磁盤 設備通電 低功耗

  • 休眠hibernate 存儲到磁盤 設備斷電 即設備會關機

三者其實都是suspend,只是存儲位置和通電狀態不同,三者分別可稱為suspend to ram、suspen to ram and disk和suspend to disk,簡稱str、strd和std,意思很直白。

掛起也被稱為暫停或待機,一般的,系統一段時間沒有操作,系統就會掛起(到內存中),多數外圍設備會關閉,某些設備會運行(如鍵盤鼠標),可以快速響應這些設備從而喚醒系統。

休眠也被稱為冬眠(hibernate實為冬眠之意),保存運行狀態存到硬盤中,然后關機。下次開機后,系統從硬盤中讀取存儲的數據並恢復到關機前的狀態。

睡眠更准確的名稱應該是混合睡眠,所謂混合即存儲方式上包含了掛起和休眠兩種方式,喚醒時會優先從內存中讀取數據,如果設備在此狀態下斷電,就和休眠一樣了。

linux休眠配置

一些linux發行版的休眠需要用戶進行配置才能使用。

開啟休眠

按照以下步驟設置。

  1. 合適大小的swap分區

    休眠(hibernate)需要將內存中的內容寫入磁盤的swap分區,如果swap分區大小比當前休眠所需空間小,則無法保證能夠正確地休眠。具體的swap的大小根據個人使用情況(要休眠時的內存占用)而定。
    因此,如果 swap 分區過小,需增大 swap分區或減小 /sys/power/image_size

    注意:brtfs格式無法設置swap分區;這里的swap是swap分區而不包括swap file的情況。

  2. 在bootloader 中增加resume內核參數

    需要添加resume=/dev/sdxY (sdxY 是 swap分區的名字) ,讓系統在啟動時讀取swap分區中的內容。

    例如,使用了grub2作為bootloader,swap的分區是/dev/sda3。
    編輯/etc/default/grub 文件,在GRUB_CMDLINE_LINUX_DEFAULT中添加resume=/dev/sda3 ,假如該行的原有內容是:

    GRUB_CMDLINE_LINUX_DEFAULT=”quiet intel_pstate=enable”

    添加resume參數后就是:

    GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_pstate=enable resume=/dev/sda3"

    然后更新 grub 配置 grub-mkconfig -o /boot/grub/grub.cfg

  3. 配置 initramfs的resume鈎子

編輯 /etc/mkinitcpio.conf ,在HOOKS行中添加resume鈎子:
例如該行原有內容是:

HOOKS="base udev autodetect modconf block filesystems keyboard fsck"

添加resume后就是:

HOOKS="base udev resume autodetect modconf block filesystems keyboard fsck"

注意:如果使用lvm分區,需要將resume放在lvm后面,示例:

HOOKS="base udev autodetect modconf block lvm2 resume filesystems keyboard fsck"

重新生成 initramfs 鏡像: mkinitcpio -p linux

設置低電量休眠

當電池電量極低時,使其休眠,以免丟失數據。
修改/etc/UPower/UPower.conf相關配置,示例,在電量低至%5時自動休眠:

PercentageLow=15  #<=15%低電量
PercentageCritical=10  #<=10%警告電量
PercentageAction=5  #<=5%執行動作(即CriticalPowerAction)的電量
CriticalPowerAction=Hibernate #(在本示例中是電量<=5%)執行休眠

當電池低至5%,設備會自動休眠。
CriticalPowerAction的取值有Poweroff、Hibernate和Hybid-sleep。

更多配置項參考該文件中的說明。

設置蓋上蓋子或按下電源鍵休眠

編輯/etc/systemd/logind.conf ,
蓋上蓋子休眠,添加:

HandleLidSwitch=hibernate
按下電源鍵休眠,添加:
HandlePowerKey=hibernate

執行 systemctl restart systemd-logind 使其立即生效。

更加詳細的設置參看下文。


systemd 能夠處理某些電源相關的事件,編輯 /etc/systemd/logind.conf 可進行配置,其主要包含以下事件:

  • HandlePowerKey:按下電源鍵
  • HandleSleepKey:按下掛起鍵
  • HandleHibernateKey: 按下休眠鍵
  • HandleLidSwitch:合上筆記本蓋
  • HandleLidSwitchDocked:插上擴展塢或者連接外部顯示器情況下合上筆記本蓋子

取值可以是 ignore、poweroff、reboot、halt、suspend、hibernate、hybrid-sleep、lock 或 kexec。

其中:

  • poweroff和halt均是關機(具體實現有區別)

  • supspend是掛起(暫停),設備通電,內容保存在內存中

  • hybernate是休眠,設備斷電(同關機狀態),內容保存在硬盤中

  • hybrid-sleep是混合睡眠,設備通電,內容保存在硬盤和內存中

  • lock是鎖屏

  • kexec是從當前正在運行的內核直接引導到一個新內核(多用於升級了內核的情況下)

  • ignore是忽略該動作,即不進行任何電源事件響應

注意,系統默認設置為:

HandlePowerKey=poweroff    #按下電源鍵關機
HandleSuspendKey=suspend    #按下掛起鍵掛起(暫停)
HandleHibernateKey=hibernate    #按下休眠鍵休眠
HandleLidSwitch=suspend    #蓋上筆記本蓋子掛起

例如要設置蓋上筆記本蓋子進行休眠,在該文件中配置:

HandleLidSwitch=hibernate

保存文件后,執行 systemctl restart systemd-logind 使其生效。



免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM