我有一台联想 ThinkPad X1 Carbon 第 7 代。当我进入挂起状态(无论使用哪种方法)时,笔记本电脑会自动从挂起状态唤醒。我注意到,这种行为仅在笔记本电脑对接时发生(联想 USB-C 第 2 代对接),因为我 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
为所有启用的设备进行设置
答案1
在这里添加这个,因为我遇到了类似的问题和相同的计算机。
我的 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 空闲下来,风扇也跟着空闲下来,并且挂起功能又开始工作了。
答案2
PXSX
我注意到运行时有两个设备cat /proc/acpi/wakeup
PXSX S4 *disabled
PXSX S4 *enabled pci:0000:05:00.0
当我尝试PXSX
通过命令禁用echo PXSX > /proc/acpi/wakeup
时,什么也没有发生(一个PXSX
保留enabled
,一个保留disabled
,我认为这是因为该命令无法到达第二个PXSX
。
我还尝试运行acpitool -w
然后acpitool -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
,使其可执行并写入以下内容:
#!/bin/sh
case $1 in
pre)
echo 1 > /sys/bus/pci/devices/0000:05:00.0/remove
;;
esac
此代码可确保在挂起之前立即禁用有问题的设备。目前,我的笔记本电脑可以成功进入睡眠状态,并且不会 100% 自行唤醒。