前段时间我发过关于 Fedora 讨论因为我的 Fedora 系统(运行 Fedora 38 的 MSI Summit e16 flip)在内核更新后(实际上从内核 6.3.x 开始以及所有更高版本)开始出现睡眠模式问题。
不幸的是,我没有收到太多回复,所以我尝试自己解决问题,结果发现导致此问题的原因可能是笔记本电脑的一个内部设备,该设备应该用于唤醒处于睡眠状态的笔记本电脑(比如触摸板或者指纹识别器?我不知道)和而是出现故障,在进入睡眠状态后立即唤醒。我这样说是因为我尝试使用我在网上某处找到的这个简单脚本暂时禁用所有行/proc/acpi/wakeup
,并且在执行此操作直到下次重新启动后,笔记本电脑都会按预期保持睡眠状态。
所以现在我的问题是:我如何找出导致问题的设备?我如何才能永久修复此问题? 我怀疑有问题的设备可能是指纹识别器因为它直到 Fedora 38 才得到支持,而且由于它总是忘记我添加的指纹,所以仍然无法正常工作...有没有办法让我完全禁用它并尝试看看它是否能解决问题?
(我不确定这里是否是提出此类问题的合适场所,或者我是否应该在其他地方报告此问题,因为这似乎更像是一个内核问题。欢迎提出更好的提问地点的建议
答案1
在我的笔记本电脑上,这种情况通常是由于某些设备而发生的。我创建了一个睡眠前后脚本来修复它。
/usr/lib/systemd/system-sleep/fixwake
(它可能/lib/systemd/system-sleep/fixwake
在你的发行版中):
#!/usr/bin/sh
case "$1" in
pre)
echo "Fixing acpi settings."
true > /tmp/wakeupdevices
while IFS= read -r line; do
device=$(echo "${line}" | cut -f1)
state=$(echo "${line}" | grep -o 'enabled\|disabled')
echo "device = $device, state = $state"
if [ "$state" = "enabled" ]; then
echo "${device}" >> /tmp/wakeupdevices
echo $device > /proc/acpi/wakeup
fi
done < /proc/acpi/wakeup
echo "Suspending to RAM."
;;
post)
echo "Restoring acpi settings."
while IFS= read -r line; do
device=${line}
echo "${device}" > /proc/acpi/wakeup
done < /tmp/wakeupdevices
rm -f /tmp/wakeupdevices
echo "Wake state for devices in /proc/acpi/wakeup restored."
;;
esac
然后使其可执行:
sudo chmod +x /usr/lib/systemd/system-sleep/fixwake
此脚本解析/proc/acpi/wakeup
,查找所有具有状态的设备enabled
并将它们写入临时文件,然后禁用它们。唤醒后,它会重新启用它们。