mbp安装archlinux后无法正常休眠。试过官方wikih上的常见问题无法解决,查阅了a一天半资料后,偶然发现一片外网零几年的老帖子提到可能相关的问题。于是尝试,最终解决。
原因:无线网卡导致
macbook笔记本无线网卡导致休眠hinernate失败,可以在休眠时先卸载wifi模块(内核模块),模块名叫brcmfmac
,它被brcmfmac_wcc
引用,因此要先卸载brcmfmac_wcc
模块。
休眠再恢复时启动失败,可以从启动日志看到该模块的错误日志。
查看上一次启动日志:journalctl -b -1 | grep brcm
解决过程
-
使用
sudo modprobe -r brcmfmac_wcc
-
使用
sudo modprobe -r brcmfmac
-
使用
sudo systemctl hibernate
命令测试能否正常休眠/唤醒。 -
如果正常则说明问题由上面两个模块导致。否则建议使用上面的
journalctl -b -1
命令仔细查看是否有其他硬件存在问题,想办法找到他的内核模块并卸载再次h尝试休眠/唤醒,直到找到罪魁祸首,或者另寻他法。
休眠时自动卸载模块
每次总是手动执行卸载很麻烦,做成系统服务自动调用。aur仓库提供了一个休眠自动卸载模块的脚本工具,安装:yay -S systemd-suspend-modules
成功安装后文件在如下目录:
主要用的了/etc/suspend-modules.conf配置文件。将需要在休眠时卸载的模块名字写进去就行,有先后顺序,用空格分隔。
配置完这两个模块就大功告成了,测试休眠/重启正常主要原理是利用系统msysted钩子在sleep之前执行一些自定义操作。利用这个特性还可以在休眠时快速关闭mbp的显示器(因为之前macos盖上盖子后显示器/logo就熄灭,arch要等休眠断电之后才熄灭),此处不再赘述,可查看Arch wiki Hibernate相关内容。