笔记本电脑无法挂起或休眠(在没有用户交互的情况下 2-5 秒后唤醒)

fen*_*iix 23 suspend hibernate thinkpad laptop wakeup

这一切都是在升级到 13.10 后开始发生的,现在我正在运行 14.04 并且仍然有同样的问题。

当我合上盖子或这样做时sudo pm-suspend,笔记本电脑会暂停 2-5 秒并自行唤醒。

如果我尝试休眠,也会发生同样的情况。

我有一种直觉,有些东西正在唤醒/使 cpu 退出挂起模式,但我不知道是什么。

任何帮助解决这个烦人的问题?

编辑:

感谢@Fabian ,我能够发现以太网卡似乎行为不正常,即使在我将卡设置为不在局域网上唤醒(无论是做acpitool -W 3还是echo disabled > /sys/bus/pci/devices/0000:00:19.0/power/wakeupecho IGBE > /proc/acpi/wakeup,笔记本电脑不断醒来并在我这样做时显示此内容)acpitool -w

Device  S-state   Status   Sysfs node
---------------------------------------
1. LID    S3    *enabled 
2. SLPB   S3    *disabled
3. IGBE   S4    *enabled   pci:0000:00:19.0
4. EXP1   S4    *disabled  pci:0000:00:1c.0
5. EXP2   S4    *disabled  pci:0000:00:1c.1
6. EXP3   S4    *disabled
7. EXP4   S4    *disabled
8. EXP5   S4    *disabled  pci:0000:00:1c.4
9. EHC1   S3    *disabled  pci:0000:00:1d.0
10. EHC2      S3    *disabled  pci:0000:00:1a.0
11. HDEF      S4    *disabled  pci:0000:00:1b.0
Run Code Online (Sandbox Code Playgroud)

知道如何从那里开始吗?

IGBE 使用的网络驱动程序是 e1000e

小智 12

以下对我有用:

cat /proc/acpi/wakeup
Run Code Online (Sandbox Code Playgroud)

查找任何已启用状态但看起来不属于那里的项目(对我来说,除了 LID0 之外的任何项目)。然后通过说禁用它们,例如:

sudo sh -c "echo XHC0 > /proc/acpi/wakeup"
Run Code Online (Sandbox Code Playgroud)

检查相应条目是否确实已被禁用,将笔记本电脑置于挂起状态并希望一切顺利:)


小智 10

我有内核 13.13 和基于 Intel Z77X 的主板,以下命令对我有用:

sudo sh -c "echo EHC1 > /proc/acpi/wakeup;echo EHC2 > /proc/acpi/wakeup;echo XHC > /proc/acpi/wakeup"
Run Code Online (Sandbox Code Playgroud)


小智 7

遇到完全相同的问题(ThinkPad T530,Ubuntu 14.04,还有 13.10 和 13.04,经过几次挂起后,计算机在挂起后立即恢复)。

从唤醒中禁用 IBGE 根本没有帮助。

正如 Romano 所建议的那样,我尝试删除 e1000e 模块,然后按预期挂起。

所以:

sudo rmmod e1000e
Run Code Online (Sandbox Code Playgroud)

在 suspend 之前解决问题。

有趣的是,在将模块安装回 ( sudo modprobe e1000e) 并挂起而不将其移除后,问题立即再次出现。所以,它一定是与硬件有关的东西。

为了自动化它,我创建了两个简单的挂起/唤醒脚本(在上述硬件上测试,Ubuntu Trusty 14.04)sudo gedit /etc/pm/sleep.d/99_e1000e_remove::

#!/bin/sh

# Remove e1000e kernel module prior to suspend
rmmod e1000e
Run Code Online (Sandbox Code Playgroud)

sudo gedit /etc/pm/power.d/99_e1000e_probe

#!/bin/sh

# Modprobe e1000e kernel module after resume
modprobe e1000e
Run Code Online (Sandbox Code Playgroud)

脚本应该是可执行的 ( sudo chmod +x /etc/pm/sleep.d/99_e1000e_remove /etc/pm/power.d/99_e1000e_probe)。

笔记:

  • 我认为这些脚本即使不能解决您的问题,也可以安全使用。
  • 我没有使用 LAN 唤醒,所以我不知道它在修复中的表现如何。