KDE系统笔记本睡眠后立刻被唤醒问题
介绍
前段时间遇到了笔记本休眠后立刻启动的问题,导致我好几天只能将电脑关机,现在终于是定位到了问题。
这是我的系统详细信息:
- 笔记本型号:ROG Zephyrus G16 GU603VV_GU603VV
- 系统版本:openSUSE Leap 15.5
- KDE Plasma版本:5.27.9
问题定位
问题的根源在于笔记本的自带事件,在/proc/acpi/wakeup
中可以将无关事件禁用, 从而使电脑正常休眠。
通过以下命令可以手动禁用事件。
echo IGBE | sudo tee /proc/acpi/wakeup
参考文章中作者测试后发现是IGBE和XHCI事件导致的电脑无法关机,我在自己的系统中测试后发现仅关闭XHCI即可使我的电脑正常休眠与睡眠。
问题解决
编写shell脚本,找个地方放,我放在了~/.task/下,用于保存系统命令相关脚本:
mkdir ~/task
vim ~/task/suspend_event.sh
随后放入以下脚本:
#!/bin/sh
# Some events will wakeup right after suspend, disable them
stat=$(cat /proc/acpi/wakeup)
wakers=(XHCI)
for waker in ${wakers[@]}; do
is_en=$(echo "${stat}" | grep $waker | grep disabled);
if [ -z "$is_en" ]; then
echo disable wakeup of $waker...
echo $waker | tee /proc/acpi/wakeup;
fi
done
编写完成后给脚本执行权限(我就是因为忘记给权限导致service无法启动):
chmod +x ~/task/suspend_event.sh
然后创建service,让每次启动时执行脚本:
sudo vim /etc/systemd/system/sleepable.service
将以下代码放入:
[Unit]
Description=disable some events to wake up device
After=systemd-udev-settle.service
[Service]
Type=idle
ExecStart=/opt/bin/for_systemd/suspend_event.sh
RemainAfterExit=no
[Install]
WantedBy=multi-user.target
[!IMPORTANT] 必须要加上 After=systemd-udev-settle.service,否则service不生效。
最后将服务设置为开机自启:
systemctl enable sleepable
参考资料: