![笔记本电脑挂起后立即唤醒](https://linux22.com/image/204469/%E7%AC%94%E8%AE%B0%E6%9C%AC%E7%94%B5%E8%84%91%E6%8C%82%E8%B5%B7%E5%90%8E%E7%AB%8B%E5%8D%B3%E5%94%A4%E9%86%92.png)
我的笔记本电脑在挂起后立即唤醒(或者挂起失败?它们是两种不同的情况吗?)。它是旧的东芝 Satellite C855D-S5105,8Gb RAM。它最近安装了 bodhi Linux(Ubuntu 的衍生版本,因此在很多方面它的工作方式与 Ubuntu 相同)。我找到的解决方案都不起作用。 BIOS 中的两个候选者被禁用(局域网唤醒和键盘唤醒)。还有一个触摸板,没有鼠标或蓝牙接收器。下面我发布相关信息,并附有来源。
$ uname -a
Linux Orion 5.4.0-107-generic #121-Ubuntu SMP Thu Mar 24 16:04:27 UTC 2022 x86_64 x86_64 x86_64 GNU/Linux
尝试识别唤醒的候选者(假设它挂起并唤醒)。
这里似乎有一些设备启用了唤醒(参见这)。
$ cat /proc/acpi/wakeup | grep enabled
Device S-stateStatus Sysfs node
OHC1 S3 *enabled pci:0000:00:12.0 <- ?
OHC3 S3 *enabled pci:0000:00:16.0 <- ?
EHC1 S3 *enabled pci:0000:00:12.2 <- ?
EHC3 S3 *enabled pci:0000:00:16.2 <- ?
LID0 S4 *enabled platform:PNP0C0D:00 <- Lid
$ lspci | grep "00:1[2,6]."
00:12.0 USB controller: Advanced Micro Devices, Inc. [AMD] FCH USB OHCI Controller (rev 11)
00:12.2 USB controller: Advanced Micro Devices, Inc. [AMD] FCH USB EHCI Controller (rev 11)
00:16.0 USB controller: Advanced Micro Devices, Inc. [AMD] FCH USB OHCI Controller (rev 11)
00:16.2 USB controller: Advanced Micro Devices, Inc. [AMD] FCH USB EHCI Controller (rev 11)
这里似乎没有启用唤醒功能的设备(来源)。
$ cat /sys/bus/usb/devices/*/power/wakeup
disabled
disabled
disabled
disabled
disabled
disabled
disabled
$ ll /sys/bus/usb/devices/*/power/wakeup
-rw-r--r-- 1 root root 4,0K abr 6 07:33 /sys/bus/usb/devices/1-3/power/wakeup
-rw-r--r-- 1 root root 4,0K abr 6 07:33 /sys/bus/usb/devices/usb1/power/wakeup
-rw-r--r-- 1 root root 4,0K abr 6 07:33 /sys/bus/usb/devices/usb2/power/wakeup
-rw-r--r-- 1 root root 4,0K abr 6 07:33 /sys/bus/usb/devices/usb3/power/wakeup
-rw-r--r-- 1 root root 4,0K abr 6 07:33 /sys/bus/usb/devices/usb4/power/wakeup
-rw-r--r-- 1 root root 4,0K abr 6 07:33 /sys/bus/usb/devices/usb5/power/wakeup
-rw-r--r-- 1 root root 4,0K abr 6 07:33 /sys/bus/usb/devices/usb6/power/wakeup
尝试找出挂起失败的原因。它看起来就像没有一样失败(如这里),但我不确定它实际上挂起并醒来,或者它退出挂起(如果它们是两个不同的东西)。
$ journalctl -b | grep -nH suspend
(standard input):1576:abr 06 07:28:55 Orion sudo[1196]: root : TTY=unknown ; PWD=/home/santiago ; USER=root ; COMMAND=/usr/sbin/pm-suspend
(standard input):1578:abr 06 07:28:58 Orion kernel: PM: suspend entry (deep)
(standard input):1583:abr 06 07:29:04 Orion kernel: printk: Suspending console(s) (use no_console_suspend to debug)
(standard input):1627:abr 06 07:29:04 Orion kernel: PM: suspend exit
添加可能有用的行。看起来唤醒发生在第 1591 行和第 1592 行之间。
$ journalctl -b | grep -nH -A 40 -B 40 suspend
...
(standard input):1578:abr 06 07:28:58 Orion kernel: PM: suspend entry (deep)
(standard input)-1579-abr 06 07:28:58 Orion kernel: Filesystems sync: 0.191 seconds
(standard input)-1580-abr 06 07:29:04 Orion kernel: Freezing user space processes ... (elapsed 0.004 seconds) done.
(standard input)-1581-abr 06 07:29:04 Orion kernel: OOM killer disabled.
(standard input)-1582-abr 06 07:29:04 Orion kernel: Freezing remaining freezable tasks ... (elapsed 0.001 seconds) done.
(standard input):1583:abr 06 07:29:04 Orion kernel: printk: Suspending console(s) (use no_console_suspend to debug)
(standard input)-1584-abr 06 07:29:04 Orion kernel: wlp2s0: deauthenticating from d0:6e:de:8e:25:f6 by local choice (Reason: 3=DEAUTH_LEAVING)
(standard input)-1585-abr 06 07:29:04 Orion kernel: sd 0:0:0:0: [sda] Synchronizing SCSI cache
(standard input)-1586-abr 06 07:29:04 Orion kernel: sd 0:0:0:0: [sda] Stopping disk
(standard input)-1587-abr 06 07:29:04 Orion kernel: ACPI: Preparing to enter system sleep state S3
(standard input)-1588-abr 06 07:29:04 Orion kernel: PM: Saving platform NVS memory
(standard input)-1589-abr 06 07:29:04 Orion kernel: Disabling non-boot CPUs ...
(standard input)-1590-abr 06 07:29:04 Orion kernel: IRQ 30: no longer affine to CPU1
(standard input)-1591-abr 06 07:29:04 Orion kernel: smpboot: CPU 1 is now offline
(standard input)-1592-abr 06 07:29:04 Orion kernel: ACPI: Low-level resume complete
(standard input)-1593-abr 06 07:29:04 Orion kernel: PM: Restoring platform NVS memory
(standard input)-1594-abr 06 07:29:04 Orion kernel: LVT offset 0 assigned for vector 0x400
(standard input)-1595-abr 06 07:29:04 Orion kernel: microcode: reload patch_level=0x05000119
(standard input)-1596-abr 06 07:29:04 Orion kernel: Enabling non-boot CPUs ...
(standard input)-1597-abr 06 07:29:04 Orion kernel: x86: Booting SMP configuration:
(standard input)-1598-abr 06 07:29:04 Orion kernel: smpboot: Booting Node 0 Processor 1 APIC 0x1
(standard input)-1599-abr 06 07:29:04 Orion kernel: microcode: CPU1: patch_level=0x05000119
(standard input)-1600-abr 06 07:29:04 Orion kernel: CPU1 is up
(standard input)-1601-abr 06 07:29:04 Orion kernel: ACPI: Waking up from system sleep state S3
(standard input)-1602-abr 06 07:29:04 Orion kernel: [drm] Found smc ucode version: 0x00010601
(standard input)-1603-abr 06 07:29:04 Orion kernel: rtlwifi: rtlwifi: wireless switch is on
(standard input)-1604-abr 06 07:29:04 Orion kernel: [drm] PCIE GART of 1024M enabled (table at 0x0000000000162000).
(standard input)-1605-abr 06 07:29:04 Orion kernel: radeon 0000:00:01.0: WB enabled
...
没有 Nvidia 驱动程序,例如这里。显卡是ATI Radeon。
$ dpkg -l | grep nvidia
ii bodhi-background-invidia 0.01 all Bodhi Sunshine Invidia
有关的
答案1
我设法避免了唤醒,如下所示。我编写了一个disable_devices_from_wakeup.sh
包含以下内容的脚本(灵感来自这)
#!/bin/bash
declare -a devices=(EHC1 EHC3 OHC1 OHC3)
for device in "${devices[@]}" ; do
sudo sh -c "echo $device > /proc/acpi/wakeup"
done
将其设置为可执行文件并运行它。现在我拥有所有 4 台设备disabled
,并且笔记本电脑只能通过盖子或电源按钮唤醒。因此,在不确切知道负责唤醒的设备的情况下,问题就消失了。
在进一步测试中,4 个设备中的任何一个单独处于某种enabled
状态就足以防止挂起。这对我来说看起来很奇怪,但我没有花时间分别理解每一个。
待办事项:
- 让改变永久化。这是相关的问题。
答案2
此问题的许多答案都会禁用用于将 PC 从挂起状态唤醒的特定设备,但总是出现新设备、更新和其他情况,问题就会再次出现。相反,此脚本会禁用除盖子 (LID) 和睡眠按钮 (SLPB) 之外的所有用于将 PC 从睡眠状态唤醒的设备:
#! /bin/bash
case $1 in
pre)
declare -a keep_devices=(SLPB LID) # <-- Add entries to keep activated here
# Get the currently active devices in
readarray -t enabled_devices < <( grep enabled /proc/acpi/wakeup | awk '{print $1}' )
# if it's enabled and not in our whitelist, disable it
for device in "${enabled_devices[@]}"; do
if [[ ! " ${keep_devices[*]} " =~ " ${device} " ]]; then
echo ${device} > /proc/acpi/wakeup
fi
done
;;
esac
遵循建议这里对于 Ubuntu,我复制了此脚本以在睡眠开始时运行:
sudo cp disable-wakeup-devices /usr/lib/systemd/system-sleep/
sudo chmod 755 /usr/lib/systemd/system-sleep/disable-wakeup-devices