サスペンド状態になった直後に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の設定です。これは、ノートブックの電源をオフ/再起動するたびに変更(リセット)し続けます。
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
これにより、every現在有効になっている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カーネル(最近のルートエクスプロイトのせいで全員になるはずです)に更新している人にとっては、USBウェイクアップがおそらく壊れていることに気付くでしょう。デフォルトのウェイクアップポリシー( http://www.spinics.net/lists/linux-usb/msg53661.html )が変更されたため、いくつかの変更が必要になります。
/proc/acpi/wakeup
でウェイクアップを有効にする必要がなくなりました。デフォルトで有効になっています/sys/bus/usb/devices/*/power/wakeup
のデバイスに加えて、USBハブのウェイクアップを有効にする必要がありますしたがって、この:
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以降では、rc.local
の代わりにsystemd
を使用する必要があります。 「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
またはここで Gist