Jol*_*lan 21 suspend proc wakeup
我的 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
Run Code Online (Sandbox Code Playgroud)
我告诉系统挂起,它正常工作。但后来唤醒后,设置更改为:
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
Run Code Online (Sandbox Code Playgroud)
或者
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
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?
谢谢您的答复。不幸的是它没有解决我的问题。
所有的
/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
Run Code Online (Sandbox Code Playgroud)
也
/sys/bus/usb/devices/3-1/power/wakeup
Run Code Online (Sandbox Code Playgroud)
设置为禁用,并且笔记本电脑在进入睡眠状态后仍会自行唤醒。它似乎唯一做出反应的是 /proc/acpi/wakeup 中的设置,每次我关闭/重新启动笔记本时,这些设置都会不断更改(重置)。
Gjj*_*urg 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
Run Code Online (Sandbox Code Playgroud)
这样做是将当前启用的每个USB 设备的状态更改为禁用。如果您只想更改特定的 USB 设备,请更改脚本中的 for 循环。例如只更改 USB1 和 USB3 更改
for usb in `cat /proc/acpi/wakeup | grep USB | cut -f1`;
Run Code Online (Sandbox Code Playgroud)
到
for usb in 'USB1' 'USB3';
Run Code Online (Sandbox Code Playgroud)
希望这可以帮助其他有同样问题的人。这种方法为我解决了这个问题。
MTS*_*MTS 10
也许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
所以这:
Run Code Online (Sandbox Code Playgroud)echo USB1 > /proc/acpi/wakeup echo enabled > /sys/bus/usb/devices/3-1/power/wakeup
变成:
Run Code Online (Sandbox Code Playgroud)echo enabled > /sys/bus/usb/devices/usb3/power/wakeup echo enabled > /sys/bus/usb/devices/3-1/power/wakeup
希望这可以避免其他人解决相同的问题。
小智 7
对于Ubuntu的15+,你必须使用systemd
替代rc.local
。您可以在 google 上搜索“创建 systemd 服务”并按照说明进行操作,但请注意,将输出重定向到/proc/acpi/wakeup
很棘手。要使其正常工作,您必须执行以下操作:
/bin/sh -c '/bin/echo XHC > /proc/acpi/wakeup'
Run Code Online (Sandbox Code Playgroud)
服务文件的示例输出(例如,/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
Run Code Online (Sandbox Code Playgroud)
或者在这个要点中
归档时间: |
|
查看次数: |
36792 次 |
最近记录: |