如何永久更改/ proc / acpi / wakeup?


17

进入暂停状态后,我的Ubuntu 12.04立即唤醒时出现问题。我通过更改/ proc / acpi / wakeup中的设置解决了该问题,如以下问题所示:如何防止从挂起和/或休眠状态立即唤醒?

更改设置后,系统会完美无缺地进入挂起状态并保持挂起状态,但是在我将其唤醒后,/ 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中的设置,每次我关闭/重新启动笔记本电脑时,这些设置都会不断更改(重置)。

Answers:


11

我在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';

希望这可以帮助遇到相同问题的其他人。这种方法为我解决了这个问题。


1
谢谢!我修改了此脚本以禁用索尼Vaio笔记本电脑上USB设备的唤醒
Vladimir Rutsky 2014年

我修改了脚本以禁用打开LID时的唤醒功能(从我的角度来看,这确实是愚蠢而烦人的功能)。谢谢!
gumkins 2014年

这个额外有用的钩子可在Ubuntu和Kubuntu中使用,但不适用于Xubuntu 15.04。我不知道为什么... :(
Reloader

1
这是弗拉基米尔·鲁茨基(Vladimir Rutsky)修改后的脚本,用于系统睡眠挂钩而不是pm-utils:gist.github.com/kepi/9dea7aee8a59f3e7c10a
Kepi

1
如果可以为Ubuntu 16.04进行更新,那就太好了。我从此处使用了解决方案:askubuntu.com/a/620555/463546(较旧的解决方案),但是总的来说有点麻烦。
亚历山大·杜宾斯基

9

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

它是这样说的:

对于那些正在升级到3.2内核的用户(由于最近的root漏洞,应该是所有人),您会注意到USB唤醒可能已损坏。他们更改了默认的唤醒策略(http://www.spinics.net/lists/linux-usb/msg53661.html),因此您需要做一些更改:

  • 您不再需要在中启用唤醒/proc/acpi/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

希望这可以使其他人免于解决相同问题的麻烦。


2

对于Ubuntu 15+,必须使用systemd代替rc.local。您可以在Google中创建“创建systemd服务”并按照说明进行操作,但是请注意,将输出重定向到/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

还是这里要点

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.