从休眠到休克

信任 systemd 的人最后连 xx 都会卖掉,就算是……真香!

事情从更换启动引导开始,因为之前在群上听过不少人说 systemd-boot 进行 UEFI 引导以替代 grub 那一套班子。之前倒是一直没有机会自己上手,但是想到这也算是一门亟待了解的技术,外加上想换文件系统格式了(之前一直用的 xfs,虽然稳定,但是平平无奇),所以就直接人生重来了。

经过一番不算折腾的过程,算是装好了,此时正好在 Arch 群上看见 fpsNoooob 菊苣吐槽 Arch 待机费电的问题(画外音:自从用了 Debian 腰不酸,腿不疼了,就是 unstable 把我 kde 给炸了)。于是想自己测试一番,但是鉴于之前从来没有休眠过,一直都是仅关闭屏幕,所以简单起见就直接sudo systemctl suspend一把梭,str 成功!

休是休眠了,但是怎么唤醒呢?

电源键?开启屏幕?还是说得脸滚键盘。在尝试了各种姿势和重启之后无果,于是开始检查是不是 acpi 事件监听的问题。

1
2
3
4
$ sudo acpi_listen

button/volumedown VOLDN 00000080 00000000 K
button/volumeup VOLUP 00000080 00000000 K

测试了几个发现其他没问题,但是电源键和屏幕开合并不能够被监听到,当时是考虑驱动可能不支持,于是先去查看了可用的 acpi module。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
$ ls -l /usr/lib/modules/$(uname -r)/kernel/drivers/acpi

total 56
-rw-r--r-- 1 root root 3268 Apr 30 21:14 ac.ko.xz
-rw-r--r-- 1 root root 2936 Apr 30 21:14 acpi_configfs.ko.xz
-rw-r--r-- 1 root root 3812 Apr 30 21:14 acpi_extlog.ko.xz
-rw-r--r-- 1 root root 4996 Apr 30 21:14 acpi_ipmi.ko.xz
drwxr-xr-x 2 root root 4096 May 1 09:00 apei
-rw-r--r-- 1 root root 7100 Apr 30 21:14 battery.ko.xz
-rw-r--r-- 1 root root 1788 Apr 30 21:14 custom_method.ko.xz
drwxr-xr-x 2 root root 4096 May 1 09:00 dptf
drwxr-xr-x 2 root root 4096 May 1 09:00 nfit
-rw-r--r-- 1 root root 3564 Apr 30 21:14 sbshc.ko.xz
-rw-r--r-- 1 root root 5540 Apr 30 21:14 sbs.ko.xz

button (catch button events, like LID or POWER BUTTON)

嗯?说好的 button.ko.gz???导演,这剧本似乎不太对啊。

人在做,天在看

按键事件有可能绕过 ACPI,也有可能 ACPI 内部解决——狮子头

如果 ACPI 内部不能处理这件事情,那这件事情的矛头基本就直接指向 BIOS 了。于是赶紧去查查相关信息,结果发现相关信息直接就写在 Arch wiki) 了(再次感叹一番 arch wiki 什么都有(捧读))。

Wake From Suspend

Wake from suspend can be buggy with earlier versions of the bios, see: [1]
This can be solved by flashing the bios to a version >=1.13。

更!马上更,更完就好了

赶紧看一眼 BIOS Version 1.09,赶紧去刷了一波 BIOS,顺带提一句,哪怕是 2014 年的机器到了今年四月份 BIOS 还有更新版本,想想我另外一台15年的机器才早早一年就结束了对 BIOS 的更新维护。下面简单备份一下刷的一些步骤。

准备:

  • Bootable CD 官网自行搜索下载
  • geteltorito 包在 AUR 上有,具体上游就懒得追溯了。

解压镜像 (Extract the img from the ISO):

1
$ geteltorito.pl -o bios.img gruj30us.iso # 替换成你下载到的文件名

写入到 U 盘:

1
sudo dd if=bios.img of=/dev/sdX # sdX 替换成你的 U 盘。

重启并以 U 盘启动即可。