博客 / 詳情

返回

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

參考文章中作者測試後發現是IGBEXHCI事件導致的電腦無法關機,我在自己的系統中測試後發現僅關閉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
必須要加上 After=systemd-udev-settle.service,否則service不生效。

最後將服務設置為開機自啓:

systemctl enable sleepable

參考資料:

  • 問題定位
  • service編寫
  • ChatGPT
user avatar
0 位用戶收藏了這個故事!

發佈 評論

Some HTML is okay.