我有一台联想 thinkpad X1 carbon 7th gen。当我进入挂起(通过任何方法)时,笔记本电脑会自行从挂起中唤醒。我注意到这种行为仅在笔记本电脑对接(联想 USB-C gen2 坞站)时发生,因为我在 90% 的时间内使用我的笔记本电脑对接,因此暂停工作很重要。
我尝试过的事情:
禁用所有 PCI 唤醒:
cat /proc/acpi/wakeup
然后设置echo <deviceHere> > /proc/acpi/wakeup
所有启用的设备(除非LID
需要我可以通过盖子恢复)
禁用所有 USB 唤醒:
cat /sys/bus/usb/devices/*/power/wakeup
ll /sys/bus/usb/devices/*/power/wakeup
然后echo "disabled" > /sys/bus/usb/devices/<deviceHere>/power/wakeup
为所有启用的设备设置
我注意到
PXSX
运行时有两个设备cat /proc/acpi/wakeup
当我尝试
PXSX
通过命令禁用时,echo PXSX > /proc/acpi/wakeup
什么都没有发生(一个PXSX
留着enabled
一个留着disabled
,我认为这是因为这个命令无法到达第二个PXSX
。我还尝试运行
acpitool -w
thenacpitool -W <deviceNumberHere>
来禁用第二个PXSX
,但没有成功。我不确定为什么不能在第二PXSX
台设备上禁用唤醒。此设备仅在笔记本电脑停靠时出现,因此可以安全地假设此设备是扩展坞的一部分。
下一步是以某种方式禁用此设备以阻止其唤醒笔记本电脑。我发现该命令
echo 1 > /sys/bus/pci/devices/0000:05:00.0/remove
会禁用此 PCI 设备。运行此命令后,挂起正常工作!唯一的问题是,如果我再次尝试执行挂起,笔记本电脑将表现出先前的行为(立即唤醒)。这通过运行cat /proc/acpi/wakeup
查看PXSX
已重新启用自身得到证实:在唤醒期间设备以某种方式重新启用自身。我的下一个想法是在预挂起期间禁用此设备。我创建了这个文件:
/lib/systemd/system-sleep/pre-suspend.sh
,使其可执行并编写了以下内容:此代码可确保在暂停之前立即禁用问题设备。目前,我的笔记本电脑在 100% 的时间里成功地睡着了,而不会自己醒来。
在此处添加此内容,因为我遇到了类似的问题和同一台计算机。
我的 Carbon X1 一直在工作……好吧,直到突然之间,它拒绝暂停。此外,CPU 利用率很高——它变得非常热,风扇全速旋转,但 htop 没有任何显示。运行
powertop
确认正在发生某些事情,显示“cpu 核心”正在消耗 13-20 W(空闲计算机的正常功率为 3-5 W)。我尝试升级(从 20.10 到 21.04),看看它是否有帮助 - 它没有。我尝试
systemctl suspend
在控制台中给出,这给了我一些关于 USB 设备无法正确挂起的错误消息。奇怪的是,这些消息不会出现在任何日志中,或者在journalctl
.最后,为我解决的问题是
rmmod
ingxhci_pci
和xhci_pci_renesas
. 突然间,CPU 闲置下来,风扇也效仿,suspend 又开始工作了。