失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > 让运行ubuntu20.04的笔记本电脑实现关闭盖子自动休眠

让运行ubuntu20.04的笔记本电脑实现关闭盖子自动休眠

时间:2020-08-28 05:44:54

相关推荐

让运行ubuntu20.04的笔记本电脑实现关闭盖子自动休眠

背景

我买的笔记本太老了,机械硬盘,win10体验很不好,于是切换成ubuntu 20.04。

切换后文档、图片的打开速度显著提升,看视频、玩dota2的流畅度也没有丝毫下降,唯一不爽的就是每次关盖都不休眠,而是睡眠,需要解决。

申明,我是根据文章1以及文章2加上自己的实践得出操作步骤,前者适用于装Ubuntu时手动创建了swap分区的情况,后者适用于默认安装(只有swapfile没创建swap分区)的情况。

首先实现敲命令休眠

Linux实现休眠的总体思路是将内存数据以镜像的形式dump到swap分区或swapfile,然后关闭电源,再次开机时,从swap分区加载数据到内存,再恢复执行。

其中有一些细节需要注意,就是让GRUB和ramdisk知道唤醒时从哪里加载之前保存的内存镜像。

创建swap分区并初始化

文章1建议用swap分区而不是swapfile,原因是备份主分区时不用操心排除swapfile,当然最终选择在你。

貌似Ubuntu默认的swapfile只有2GB,大概率不够,需要重建一个大尺寸的,具体操作方法请点开文章2贴的参考链接。

如果你默认安装且不想冒险(我还没试过!)

如果你的swapfile不够大,则按下面方法重建个大的,够大直接下一步:

sudo fallocate -l 16G /swapfile # 16G不够可以再扩sudo chmod 600 /swapfilesudo mkswap /swapfilesudo swapon /swapfilesudo vim /etc/fstab # 如果fstab没有下面这行,就将下面这行添加/swapfile none swap default 0 0

获取swapfile在分区的起始block number

sudo filefrag -v /swapfile | sed -n '4p' | awk '{print $4+0}'548832 <-- 上面命令行输出的数字就是swapfile的起始block number

如果你默认安装但想改用swap分区

备份资料插上安装盘重启,因为resize2fs不能操作已挂载的文件系统!用resize2fs /dev/sda2 N将主分区的ext4文件系统从M缩小成N,用fdisk删除主分区,再重建大小为N的新的主分区将腾出来的N-M空间创建成swap分区,写入分区表,退出fdisk拔掉安装盘,重启执行sudo mkswap /dev/sda3初始化交换分区执行sudo blkid | grep swap获得swap分区的UUID,注意不是PARTUUID将分区添加到/etc/fstab,确保下次开机自动挂载swap分区,省得每次敲sudo swapon -a获取swap分区的UUID:

wanghaipeng@ubuntu:~/F266/7569_64$ blkid|grep swap/dev/sda5: UUID="22b7d10b-4e46-46e1-a040-e7d405d752b8" TYPE="swap" PARTUUID="34c6698d-05"

添加swap分区到/etc/fstab(我选择注释掉默认配置的swapfile):

#/swapfile none swap sw 0 0UUID=22b7d10b-4e46-46e1-a040-e7d405d752b8 none swap sw 0 0

如果你很明智在安装时就创建了swap分区

恭喜,省了上面的危险操作,直接执行sudo blkid | grep swap获得swap分区的UUID,进入下一步

给GRUB指定resume参数并更新grub.cfg

给GRUB添加resume参数,以告知唤醒时从哪个分区加载内核

sudo vi /etc/default/grub # 仅修改下面这行GRUB_CMDLINE_LINUX_DEFAULT="resume=UUID=22b7d10b-4e46-46e1-a040-e7d405d752b8"

如果是swapfile,还要额外指定resume_offset参数

GRUB_CMDLINE_LINUX_DEFAULT="resume=/dev/sda2 resume_offset=548832"

这2个参数都要替换成你自己的值!

更新grub.cfg

sudo update-grub

上面命令执行后会生成新的grub.cfg

给update-initramfs指定resume参数并更新initrd.img

给update-initramfs指定resume参数

sudo vi /etc/initramfs-tools/conf.d/resume # 仅写入下面这一行RESUME=UUID=22b7d10b-4e46-46e1-a040-e7d405d752b8

如果是swapfile,请自己检查update-initramfs是否需要额外配置!

重新生成支持唤醒的initrd.img

sudo update-initramfs -c -k all

安装pm-utils和hibernate软件包

sudo apt install pm-utils hibernate

安装软件包后执行下面命令测试休眠效果

sudo systemctl hibernate

执行该命令后笔记本应该会休眠并关闭电源,如果没有,且提示以下错误:

Failed to hibernate system via logind: Not enough swap space for hibernation

说明你的swapfile或swap分区太小,需要扩容,swapfile扩容相对简单,删了重建个更大的即可,swap分区就要参考我前面的方法了。

然后实现关盖休眠

修改/etc/systemd/logind.conf文件,在[Login]部分添加如下行:

HandleLidSwitch=hibernateHandleLidSwitchExternalPower=hibernateHandleLidSwitchDocked=hibernate

参数的含义如下:

HandleLidSwitch - 盖子关闭时触发,下面的两种情况除外。HandleLidSwitchExternalPower - 如果系统连接到外部电源,则在盖子关闭时触发。HandleLidSwitchDocked - 如果系统插入扩展坞,或者连接了多个显示器,则在盖子关闭时触发。

保存退出后还不能关盖休眠,需要重启后才可以。

总结

发行版制造商从个人用户群体获益甚少,所以用户体验不佳是可以理解的,钱和时间,总得消耗其中一个。

休眠后的唤醒效果:

安装ubuntu20.04的笔记本电脑休眠后唤醒画面

如果觉得《让运行ubuntu20.04的笔记本电脑实现关闭盖子自动休眠》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。