如何对/ proc / acpi / wakeup进行永久更改?

我有一个问题,我的Ubuntu 12.04在进入暂停状态后立即醒来。 我通过更改/ proc / acpi / wakeup中的设置解决了这个问题,如此问题中所述: 如何防止从暂停和/或hibernate状态立即唤醒? 。

更改设置后,系统完美无瑕地进入暂停状态并保持挂起状态,但在我将其唤醒后,/ proc / acpi / wakeup中的设置与我设置的设置不同。

在暂停之前:

cat /proc/acpi/wakeup Device S-state Status Sysfs node SMB0 S4 *disabled pci:0000:00:03.2 PBB0 S4 *disabled pci:0000:00:09.0 HDAC S4 *disabled pci:0000:00:08.0 XVR0 S4 *disabled pci:0000:00:0c.0 XVR1 S4 *disabled P0P5 S4 *disabled P0P6 S4 *disabled pci:0000:00:15.0 GLAN S4 *enabled pci:0000:03:00.0 P0P7 S4 *disabled pci:0000:00:16.0 P0P8 S4 *disabled P0P9 S4 *disabled USB0 S3 *disabled pci:0000:00:04.0 USB2 S3 *disabled pci:0000:00:04.1 US15 S3 *disabled pci:0000:00:06.0 US12 S3 *disabled pci:0000:00:06.1 PWRB S4 *enabled SLPB S4 *enabled 

我告诉系统暂停,它可以正常工作。 但是在唤醒之后,设置将更改为:

 USB0 S3 *disabled pci:0000:00:04.0 USB2 S3 *enabled pci:0000:00:04.1 US15 S3 *disabled pci:0000:00:06.0 US12 S3 *enabled pci:0000:00:06.1 

要么

 USB0 S3 *enabled pci:0000:00:04.0 USB2 S3 *enabled pci:0000:00:04.1 US15 S3 *enabled pci:0000:00:06.0 US12 S3 *enabled pci:0000:00:06.1 

有任何想法吗?


感谢您的答复。 不幸的是,它没有解决我的问题。

所有的

 /sys/bus/usb/devices/usb1/power/wakeup /sys/bus/usb/devices/usb2/power/wakeup /sys/bus/usb/devices/usb3/power/wakeup /sys/bus/usb/devices/usb4/power/wakeup 

以及

 /sys/bus/usb/devices/3-1/power/wakeup 

设置为禁用,笔记本电脑在睡觉后仍然自动唤醒。 它似乎唯一的反应是/ proc / acpi / wakeup中的设置,每次关闭/重新启动笔记本电脑时都会不断更改(重置)。

我在Ubuntu 12.10上再次遇到了这个问题。 不幸的是,用户MTS的建议对我来说也不起作用。 但是,您可以编写一个脚本,以便在每次挂起之前在/proc/acpi/wakeup自动设置usb属性。

该解决方案基于创建挂起挂钩(基于此Archwiki文章 )。 将以下内容保存为/usr/lib/pm-utils/sleep.d/45fixusbwakeup ,并确保使其可执行( chmod +x /usr/lib/pm-utils/sleep.d/45fixusbwakeup )。

 #!/bin/bash case $1 in hibernate) echo "Going to suspend to disk!" ;; suspend) echo "Fixing acpi settings." for usb in `cat /proc/acpi/wakeup | grep USB | cut -f1`; do state=`cat /proc/acpi/wakeup | grep $usb | cut -f3 | cut -d' ' -f1 | tr -d '*'` echo "device = $usb, state = $state" if [ "$state" == "enabled" ] then echo $usb > /proc/acpi/wakeup fi done echo "Suspending to RAM." ;; thaw) echo "Suspend to disk is now over!" ;; resume) echo "We are now resuming." ;; *) echo "Somebody is callin me totally wrong." ;; esac 

这样做是为了更改当前启用为禁用的每个 USB设备的状态。 如果您只想更改特定的USB设备,请更改脚本中的for循环。 例如,仅更改USB1和USB3更改

 for usb in `cat /proc/acpi/wakeup | grep USB | cut -f1`; 

 for usb in 'USB1' 'USB3'; 

希望这有助于其他有同样问题的人。 这种方法为我解决了这个问题。

也许http://forum.xbmc.org/showthread.php?tid=121158会有帮助吗?

这就是它所说的:

对于那些正在更新到3.2内核的人(由于最近的root漏洞而应该是每个人),你会注意到你的USB唤醒可能已被破坏。 他们更改了默认的唤醒策略( http://www.spinics.net/lists/linux-usb/msg53661.html ),因此您需要进行一些更改:

  • 你不再需要在/proc/acpi/wakeup启用/proc/acpi/wakeup ,它默认启用
  • 除了/sys/bus/usb/devices/*/power/wakeup的设备外,还需要为USB集线器启用/sys/bus/usb/devices/*/power/wakeup

所以这:

 echo USB1 > /proc/acpi/wakeup echo enabled > /sys/bus/usb/devices/3-1/power/wakeup 

变为:

 echo enabled > /sys/bus/usb/devices/usb3/power/wakeup echo enabled > /sys/bus/usb/devices/3-1/power/wakeup 

希望这可以节省其他人对同一问题的疑难解答。

对于Ubuntu 15+,您必须使用systemd而不是rc.local 。 您可以谷歌“创建系统服务”并按照说明操作,但请注意,将输出重定向到/proc/acpi/wakeup很棘手。 要使其正常工作,您必须执行以下操作:

 /bin/sh -c '/bin/echo XHC > /proc/acpi/wakeup' 

服务文件的示例输出(例如/etc/systemd/system/suspendfix.service ):

 [Unit] Description=fix to prevent system from waking immediately after suspend [Service] ExecStart=/bin/sh -c '/bin/echo XHC > /proc/acpi/wakeup' Type=oneshot RemainAfterExit=yes [Install] WantedBy=multi-user.target 

或者在这个要点中