web-dev-qa-db-ja.com

Bluetoothデバイスが切断されたときにすぐにサスペンドから復帰する

Dell XPS 13 9379を一時停止すると、Bluetoothマウスが接続されていない場合、NetworkManagerがすぐに再びスリープ状態になります。

# journalctl -ex
...
systemd-logind[653]: Operation 'sleep' finished.
NetworkManager[650]: <info>  [1541032616.6736] manager: sleep: wake requested (sleeping: yes  enabled: yes)
NetworkManager[650]: <info>  [1541032616.6739] device (enxa0cec8126450): state change: unavailable -> unmanaged (reason 'sleeping', sys-iface-state: 'managed')
NetworkManager[650]: <info>  [1541032616.7017] device (enxa0cec8126450): state change: unmanaged -> unavailable (reason 'managed', sys-iface-state: 'managed')
...

Bluetoothがマシンをウェイクアップさせないようにするにはどうすればよいですか?


どうやら、Bluetoothが無効になっているとマシンが目覚めた(つまり、スリープに失敗した)ため、Bluetoothが問題の原因ではないか、唯一の原因ではないようです。今回見つけたログに基づいて、私の00:14.0 USB controller: Intel Corporation Sunrise Point-LP USB 3.0 xHCI Controller (rev 21)のせいだ:

kernel: PM: suspend entry (s2idle)
kernel: PM: Syncing filesystems ... done.
kernel: Freezing user space processes ... (elapsed 0.004 seconds) done.
kernel: OOM killer disabled.
kernel: Freezing remaining freezable tasks ... (elapsed 0.001 seconds) done.
kernel: Suspending console(s) (use no_console_suspend to debug)
kernel: pci_pm_suspend(): hcd_pci_suspend+0x0/0x30 returns -16
kernel: dpm_run_callback(): pci_pm_suspend+0x0/0x150 returns -16
kernel: PM: Device 0000:00:14.0 failed to suspend async: error -16
kernel: PM: Some devices failed to suspend, or early wake event detected
kernel: rtc_cmos 00:01: Alarms can be up to one month in the future
kernel: OOM killer enabled.
kernel: Restarting tasks ... done.
kernel: [drm] RC6 on
kernel: thermal thermal_zone8: failed to read out thermal zone (-61)
kernel: PM: suspend exit
kernel: PM: suspend entry (s2idle)
kernel: PM: Syncing filesystems ... done.
kernel: Freezing user space processes ... (elapsed 0.002 seconds) done.
kernel: OOM killer disabled.
kernel: Freezing remaining freezable tasks ... (elapsed 0.056 seconds) done.
kernel: Suspending console(s) (use no_console_suspend to debug)
kernel: pci_pm_suspend(): hcd_pci_suspend+0x0/0x30 returns -16
kernel: dpm_run_callback(): pci_pm_suspend+0x0/0x150 returns -16
kernel: PM: Device 0000:00:14.0 failed to suspend async: error -16
kernel: PM: Some devices failed to suspend, or early wake event detected
kernel: rtc_cmos 00:01: Alarms can be up to one month in the future
kernel: OOM killer enabled.
kernel: Restarting tasks ... done.
kernel: [drm] RC6 on
kernel: thermal thermal_zone8: failed to read out thermal zone (-61)
systemd[1]: systemd-suspend.service: Main process exited, code=exited, status=1/FAILURE
systemd[1]: systemd-suspend.service: Failed with result 'exit-code'.
systemd[1]: Failed to start Suspend.
2
Liam Dawson

大抵の場合OKを一時停止していたラップトップは、先週問題が発生し始めました。おそらくケーブルの不良が原因です。以前よりも速く、より確実に中断および再開するbashスクリプトを作成しました。

次のコマンドを使用します。

Sudo -H gedit /lib/systemd/system-sleep/custom-xhci_hcd

以下をコピーしてエディターに貼り付けます。

#!/bin/bash

# Original script was using /bin/sh but shellcheck reporting warnings.

# NAME: custom-xhci_hcd
# PATH: /lib/systemd/system-sleep
# CALL: Called from SystemD automatically
# DESC: Suspend broken for USB3.0 as of Oct 25/2018 various kernels all at once

# DATE: Oct 28 2018.

# NOTE: From comment #61 at: https://bugs.launchpad.net/ubuntu/+source/linux/+bug/522998

TMPLIST=/tmp/xhci-dev-list

# Original script was: case "${1}" in hibernate|suspend)

case $1/$2 in
  pre/*)
    echo "$0: Going to $2..."
    echo -n '' > $TMPLIST
          for i in `ls /sys/bus/pci/drivers/xhci_hcd/ | egrep '[0-9a-z]+\:[0-9a-z]+\:.*$'`; do
              # Unbind xhci_hcd for first device XXXX:XX:XX.X:
               echo -n "$i" | tee /sys/bus/pci/drivers/xhci_hcd/unbind
           echo "$i" >> $TMPLIST
          done
        ;;
  post/*)
    echo "$0: Waking up from $2..."
    for i in `cat $TMPLIST`; do
              # Bind xhci_hcd for first device XXXX:XX:XX.X:
              echo -n "$i" | tee /sys/bus/pci/drivers/xhci_hcd/bind
    done
    rm $TMPLIST
        ;;
esac

次に、ファイルを保存してgeditを終了します。

次を使用して、スクリプトを実行可能としてマークします。

Sudo chmod a+x /lib/systemd/system-sleep/custom-xhci_hcd

これで、サスペンド/レジュームの問題は解消されます。うまく行かない場合は、他の誰かがソリューションを投稿します。

1

カーネルのバグである可能性があります 200039 。その場合、btusbモジュールを削除すると役立ちます(rmmod btusb)。その場合、実際にスリープスクリプトを介してカーネルモジュールをロード/アンロードできます。

1