web-dev-qa-db-fra.com

Sort immédiatement de la suspension lorsqu'un périphérique Bluetooth est déconnecté

Lorsque je suspends mon Dell XPS 13 9379, NetworkManager le réveille immédiatement si ma souris Bluetooth n'est pas connectée:

# 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')
...

Comment puis-je empêcher Bluetooth de réveiller ma machine?


Apparemment, Bluetooth n’est pas pertinent ou n’est pas la seule source du problème, car ma machine s’est réveillée (ou plutôt, elle n’a pas dormi) avec Bluetooth désactivée. D'après les journaux que j'ai trouvés cette fois-ci, ma 00:14.0 USB controller: Intel Corporation Sunrise Point-LP USB 3.0 xHCI Controller (rev 21) à blâmer:

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

Mon ordinateur portable qui suspendait normalement la plupart du temps a commencé à avoir des problèmes la semaine dernière. Peut-être en raison d'un câble défectueux. J'ai créé un script bash qui suspend et reprend plus rapidement qu'avant et de manière plus fiable.

Utilisez cette commande:

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

Copiez et collez le texte suivant dans l'éditeur:

#!/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

Enregistrez ensuite le fichier et quittez gedit.

Marquez le script comme exécutable en utilisant:

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

Maintenant, vos problèmes de suspension/reprise devraient disparaître. Si ce n'est pas le cas, quelqu'un d'autre publie sa solution.

1
WinEunuuchs2Unix

Peut-être un bogue du noyau 200039 . Supprimer le module btusb aiderait dans ce cas (rmmod btusb). Si tel est le cas, vous pouvez effectivement charger/décharger le module du noyau via un script de veille, à peu près comme celui posté ici.

1
Christian Kellner