Wie schalte ich die USB-Stromversorgung meiner Maus aus, wenn ich das Notebook anhalte?


19

Das LED-Licht meiner Maus geht mir beim Schlafen auf die Nerven. Normalerweise schließe ich abends mein Notebook und Ubuntu ruft an pm-suspend. Der USB-Stecker wird trotzdem mit Strom versorgt. Ich könnte sogar mein Smartphone aufladen. Das ist aus zwei Gründen schlecht für mich. Ich muss meine Maus ausstecken und der Notebook-Akku [akku] hält weniger. Gibt es eine Möglichkeit, mein USB-Gerät oder alle USB-Geräte automatisch auszuschalten, wenn das Notebook in den Suspend-Modus wechselt?

Wie konfiguriere ich es?

BEARBEITEN: Wie in den Kommentaren angefordert, füge ich diese Informationen hinzu: Ich verwende ein Lenovo G550.

EDIT: Wie hier angefordert meine lsusb Ausgabe

Bus 002 Device 019: ID 1058:25a3 Western Digital Technologies, Inc. 
Bus 002 Device 017: ID 1b1a:7001  
Bus 002 Device 009: ID 2109:2812 VIA Labs, Inc. VL812 Hub
Bus 002 Device 008: ID 2109:2812 VIA Labs, Inc. VL812 Hub
Bus 002 Device 003: ID 0402:5608 ALi Corp. 
Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 008 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 007 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 006 Device 006: ID 046d:c52b Logitech, Inc. Unifying Receiver
Bus 006 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 005 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 004 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 003 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub

EDIT: Ich denke, diese Information führt auch zur Antwort.

root@localhost:/sys/bus/usb/devices# ls -al
insgesamt 0
drwxr-xr-x 2 root root 0 Okt  6 10:56 .
drwxr-xr-x 4 root root 0 Okt  6 10:56 ..
lrwxrwxrwx 1 root root 0 Okt  6 10:56 1-0:1.0 -> ../../../devices/pci0000:00/0000:00:1a.7/usb1/1-0:1.0
lrwxrwxrwx 1 root root 0 Okt  6 10:56 2-0:1.0 -> ../../../devices/pci0000:00/0000:00:1d.7/usb2/2-0:1.0
lrwxrwxrwx 1 root root 0 Okt  6 10:56 2-3 -> ../../../devices/pci0000:00/0000:00:1d.7/usb2/2-3
lrwxrwxrwx 1 root root 0 Okt  6 10:56 2-3:1.0 -> ../../../devices/pci0000:00/0000:00:1d.7/usb2/2-3/2-3:1.0
lrwxrwxrwx 1 root root 0 Okt  6 10:56 2-3:1.1 -> ../../../devices/pci0000:00/0000:00:1d.7/usb2/2-3/2-3:1.1
lrwxrwxrwx 1 root root 0 Okt  6 10:56 2-5 -> ../../../devices/pci0000:00/0000:00:1d.7/usb2/2-5
lrwxrwxrwx 1 root root 0 Okt  6 10:56 2-5.1 -> ../../../devices/pci0000:00/0000:00:1d.7/usb2/2-5/2-5.1
lrwxrwxrwx 1 root root 0 Okt  6 10:56 2-5:1.0 -> ../../../devices/pci0000:00/0000:00:1d.7/usb2/2-5/2-5:1.0
lrwxrwxrwx 1 root root 0 Okt  6 10:56 2-5.1:1.0 -> ../../../devices/pci0000:00/0000:00:1d.7/usb2/2-5/2-5.1/2-5.1:1.0
lrwxrwxrwx 1 root root 0 Okt  6 10:56 2-5.1.2 -> ../../../devices/pci0000:00/0000:00:1d.7/usb2/2-5/2-5.1/2-5.1.2
lrwxrwxrwx 1 root root 0 Okt  6 10:56 2-5.1.2:1.0 -> ../../../devices/pci0000:00/0000:00:1d.7/usb2/2-5/2-5.1/2-5.1.2/2-5.1.2:1.0
lrwxrwxrwx 1 root root 0 Okt  6 10:56 2-5.1.2:1.1 -> ../../../devices/pci0000:00/0000:00:1d.7/usb2/2-5/2-5.1/2-5.1.2/2-5.1.2:1.1
lrwxrwxrwx 1 root root 0 Okt  6 10:56 2-5.2 -> ../../../devices/pci0000:00/0000:00:1d.7/usb2/2-5/2-5.2
lrwxrwxrwx 1 root root 0 Okt  6 10:56 2-5.2:1.0 -> ../../../devices/pci0000:00/0000:00:1d.7/usb2/2-5/2-5.2/2-5.2:1.0
lrwxrwxrwx 1 root root 0 Okt  6 10:56 3-0:1.0 -> ../../../devices/pci0000:00/0000:00:1a.0/usb3/3-0:1.0
lrwxrwxrwx 1 root root 0 Okt  6 10:56 4-0:1.0 -> ../../../devices/pci0000:00/0000:00:1a.1/usb4/4-0:1.0
lrwxrwxrwx 1 root root 0 Okt  6 10:56 5-0:1.0 -> ../../../devices/pci0000:00/0000:00:1a.2/usb5/5-0:1.0
lrwxrwxrwx 1 root root 0 Okt  6 10:56 6-0:1.0 -> ../../../devices/pci0000:00/0000:00:1d.0/usb6/6-0:1.0
lrwxrwxrwx 1 root root 0 Okt  6 10:56 6-1 -> ../../../devices/pci0000:00/0000:00:1d.0/usb6/6-1
lrwxrwxrwx 1 root root 0 Okt  6 10:56 6-1:1.0 -> ../../../devices/pci0000:00/0000:00:1d.0/usb6/6-1/6-1:1.0
lrwxrwxrwx 1 root root 0 Okt  6 10:56 6-1:1.1 -> ../../../devices/pci0000:00/0000:00:1d.0/usb6/6-1/6-1:1.1
lrwxrwxrwx 1 root root 0 Okt  6 10:56 6-1:1.2 -> ../../../devices/pci0000:00/0000:00:1d.0/usb6/6-1/6-1:1.2
lrwxrwxrwx 1 root root 0 Okt  6 10:56 7-0:1.0 -> ../../../devices/pci0000:00/0000:00:1d.1/usb7/7-0:1.0
lrwxrwxrwx 1 root root 0 Okt  6 10:56 8-0:1.0 -> ../../../devices/pci0000:00/0000:00:1d.2/usb8/8-0:1.0
lrwxrwxrwx 1 root root 0 Okt  6 10:56 usb1 -> ../../../devices/pci0000:00/0000:00:1a.7/usb1
lrwxrwxrwx 1 root root 0 Okt  6 10:56 usb2 -> ../../../devices/pci0000:00/0000:00:1d.7/usb2
lrwxrwxrwx 1 root root 0 Okt  6 10:56 usb3 -> ../../../devices/pci0000:00/0000:00:1a.0/usb3
lrwxrwxrwx 1 root root 0 Okt  6 10:56 usb4 -> ../../../devices/pci0000:00/0000:00:1a.1/usb4
lrwxrwxrwx 1 root root 0 Okt  6 10:56 usb5 -> ../../../devices/pci0000:00/0000:00:1a.2/usb5
lrwxrwxrwx 1 root root 0 Okt  6 10:56 usb6 -> ../../../devices/pci0000:00/0000:00:1d.0/usb6
lrwxrwxrwx 1 root root 0 Okt  6 10:56 usb7 -> ../../../devices/pci0000:00/0000:00:1d.1/usb7
lrwxrwxrwx 1 root root 0 Okt  6 10:56 usb8 -> ../../../devices/pci0000:00/0000:00:1d.2/usb8

BEARBEITEN:

tokam@localhost:~$ lsusb -t
/:  Bus 08.Port 1: Dev 1, Class=root_hub, Driver=uhci_hcd/2p, 12M
/:  Bus 07.Port 1: Dev 1, Class=root_hub, Driver=uhci_hcd/2p, 12M
/:  Bus 06.Port 1: Dev 1, Class=root_hub, Driver=uhci_hcd/2p, 12M
    |__ Port 1: Dev 2, If 0, Class=Human Interface Device, Driver=usbhid, 12M
    |__ Port 1: Dev 2, If 1, Class=Human Interface Device, Driver=usbhid, 12M
    |__ Port 1: Dev 2, If 2, Class=Human Interface Device, Driver=usbhid, 12M
/:  Bus 05.Port 1: Dev 1, Class=root_hub, Driver=uhci_hcd/2p, 12M
/:  Bus 04.Port 1: Dev 1, Class=root_hub, Driver=uhci_hcd/2p, 12M
/:  Bus 03.Port 1: Dev 1, Class=root_hub, Driver=uhci_hcd/2p, 12M
/:  Bus 02.Port 1: Dev 1, Class=root_hub, Driver=ehci-pci/6p, 480M
    |__ Port 3: Dev 3, If 0, Class=Video, Driver=uvcvideo, 480M
    |__ Port 3: Dev 3, If 1, Class=Video, Driver=uvcvideo, 480M
    |__ Port 5: Dev 51, If 0, Class=Hub, Driver=hub/4p, 480M
        |__ Port 1: Dev 52, If 0, Class=Hub, Driver=hub/4p, 480M
            |__ Port 2: Dev 54, If 0, Class=Human Interface Device, Driver=usbhid, 1.5M
            |__ Port 2: Dev 54, If 1, Class=Human Interface Device, Driver=usbhid, 1.5M
        |__ Port 2: Dev 53, If 0, Class=Mass Storage, Driver=usb-storage, 480M
/:  Bus 01.Port 1: Dev 1, Class=root_hub, Driver=ehci-pci/6p, 480M

8
Ich glaube nicht, dass diese Funktion zum Laden des Schlafes etwas mit Ubuntu zu tun hat. Windows und Ubuntu erledigen das für mich auf meinem Laptop. Stattdessen sollte es im BIOS eine Einstellung geben, um die USB-Anschlüsse während des Ruhezustands auszuschalten.
TheWanderer

1
Bist du sicher? Google hat mir einige Informationen zum Keyword "usb suspend ubuntu" angezeigt. Ich bin mir aber noch nicht hundertprozentig sicher, wie ich es richtig machen soll. hamwaves.com/usb.autosuspend/en askubuntu.com/questions/80638/…
Tokam

1
Nun, Sie können sie deaktivieren, aber das ist, während Ubuntu selbst ausgeführt wird. Wenn Sie Skripts ausführen möchten, bevor der Laptop in den Energiesparmodus wechselt, um die Ports zu deaktivieren, ist dies möglich. Es ist jedoch einfacher, zumindest die BIOS-Einstellungen für diese Option zu überprüfen.
TheWanderer

1
Mein BIOS unterstützt eine solche Option leider nicht.
Tokam

1
@tokam, könntest du die Frage bearbeiten und die Marke und das Modell des Laptops hinzufügen? Könnten Sie auch bestätigen, dass es sich nicht um einen USB-Power-Share-Anschluss handelt, wie hier erläutert: dell.com/support/article/ro/ro/robsdt1/SLN155147/EN ( Blitzsymbol )
user.dz

Antworten:


4

Der derzeitige Stolperstein mit OP-Links, Nachverfolgungskommentaren und vorgeschlagenen Antworten ist die statische Produkt-ID, 1b1a:7001aber die Bus- und Gerätenummern ändern sich ständig.

Die Lösung

Erstellen Sie ein Skript (einen beliebigen Namen) im Verzeichnis /etc/pm/sleep.d/und fügen Sie Folgendes ein:

#!/bin/bash
ZeroBUS=$(lsusb | grep 1b1a:7001 | cut -c  5-7 )

# Strip leading zeros
BUS=$(echo $ZeroBUS | sed 's/^0*//')

# Build "usbX" usb number
USB=usb$BUS

case $1 in
     suspend|suspend_hybrid|hibernate)
     echo "Powering off: " $USB
        echo $USB | sudo tee /sys/bus/usb/drivers/usb/unbind
        ;;
     resume|thaw)
        # No need to do anything here, kernel unsuspends USB devices
        # Show how to power on for interest sake but since device is
        # powered off the usb number will be blank.
        echo "Powering on: " $USB
        echo $USB | sudo tee /sys/bus/usb/drivers/usb/bind
        ;;
esac

sudo chmod +x file_nameMarkieren Sie die Datei als ausführbar, wobei "Dateiname" der von Ihnen gewählte Name ist.

Die Erklärung

Diese Lösung schaltet den gesamten USB-Hub aus, was in meinem Fall Telefon, drahtlose Maus, drahtlose Tastatur usw. bedeutete. Beim Aufrufen des Skripts über die Terminal-Eingabeaufforderung muss das sudo-Kennwort eingegeben werden. Hoffentlich werden beim Aufruf von Systemd Sudo-Kräfte vererbt. Ich konnte dies jedoch nicht testen, da ich keine kabelgebundene Maus besitze. Daher kann eine zusätzliche Verfeinerung für Sudo-Kräfte erforderlich sein.

Die Stromversorgung wird nicht physisch unterbrochen, wenn das BIOS eine konstante 5-V-Stromversorgung bereitstellt. Stattdessen werden die Geräte am Bus angewiesen, sich selbst auszuschalten. In meinem Fall funktionierten die drahtlose Tastatur und Maus nicht mehr und mussten auf die Laptop-Tastatur und das Touchpad zurückgreifen, um die Stromversorgung wiederherzustellen.

Sie können dies manuell testen, indem Sie das Skript aufrufen und die Parameter "suspend" übergeben. Das Übergeben des Parameters "resume" führt zu nichts, da das Gerät ausgeschaltet ist und keine Geräte-ID hat, um es wieder einzuschalten.


Einfachere Lösung zum Ausschalten aller USB-Anschlüsse

Ich bin vor kurzem auf ein Problem gestoßen, bei dem ein unbekannter Anschluss das Anhalten des Laptops verhinderte. Ich habe diese Lösung (Gutschrift im Code) gefunden, die ich geändert habe.

Erstellen Sie die Datei /lib/systemd/system-sleep/custom-xhci_hcdmit sudoPower und fügen Sie diesen Code ein:

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

Kann ich das Skript irgendwie testen, bevor ich das Notebook mit einem nicht dynamischen Echo-Befehl anhalte?
Tokam

Sie konnten den Bus und das Gerät, die auch in lsusb angezeigt werden, erfolgreich isolieren. Wie Sie jedoch bereits betont haben, ist das Verzeichnis nicht vorhanden. Wie in der Frage gezeigt, haben die Verzeichnisse eine andere Struktur als $ {BUS} - $ {DEVICE}. , und ich bin mir nicht sicher, ob das Suspending funktioniert, selbst wenn ich weiß, welches das richtige ist
Tokam 16.10.16

Ein Test, bei dem ich die Maus aus- und wieder eingesteckt habe, half, den Ordner zu identifizieren. Aber schauen Sie sich die Ausgabe des nächsten Tests an: Keine Berechtigung bedeutet: keine Berechtigung root @ localhost: ~ # echo suspend> /sys/bus/usb/devices/2-5.1.2:1.1/power/level -bash: / sys /bus/usb/devices/2-5.1.2:1.1/power/level: Keine Berechtigung
tokam 16.10.16

Die Maus hat eine LED an der Außenseite und einen Laser an der Unterseite. Mit einer Kombination beider Antworten konnte ich den Laser der Maus ausschalten, aber nicht die LED, die Licht in meine Schlafumgebung bringt. Vielleicht können wir die LED vom Kernel nicht ausschalten? Ich habe es an einem isolierten USB-Stecker für die Maus getestet.
Tokam

@tokam Nach vielen Recherchen und Tests habe ich es endlich geschafft, manuell auf meinem System zu arbeiten, aber ich habe nicht die Maus, um es zu testen. Hoffentlich klappt es!
WinEunuuchs2Unix

5

Suchen Sie den Bus und die Gerätenummer Ihrer Maus, indem Sie den Befehl lsusb(mit und ohne angeschlossene Maus ) eingeben, der nur angezeigt werden soll, wenn er angeschlossen ist. Notieren Sie sich die Nummern. In Ihrem Fall scheinen sie 6 und 6 zu sein

Geben Sie den Befehl aus sudo cp /etc/pm/sleep.d/novatel_3g_suspend /etc/pm/sleep.d/mouse_suspend(dies ist erforderlich, da geditbeim Start als Superuser keine Option zum Speichern unter mehr verfügbar ist.)

Geben Sie den Befehl gksu gedit /etc/pm/sleep.d/mouse_suspendÄndern Sie die Bus- und Gerätenummern so, dass sie denen entsprechen, die Sie zuvor notiert haben. Speichern Sie die resultierende Datei. Es wird ausgeführt, wenn Sie Ihren Laptop anhalten.

In Ihrem Fall sollten Sie BUS = X und DEVICE = Y in die Bus- und Gerätenummern ändern, die der betreffenden Maus entsprechen. Dies funktioniert so lange, bis Sie das Gerät an einen anderen Anschluss verschieben. In diesem Fall müssen Sie das Gerät erneut suchen und die Datei entsprechend anpassen.

BUS=X
DEVICE=Y

if [ ! -x /sys/bus/usb/devices/${BUS}-${DEVICE}/power/level ]; then
    exit 0
fi

case $1 in
     suspend|suspend_hybrid|hibernate)
    echo suspend > /sys/bus/usb/devices/${BUS}-${DEVICE}/power/level
        ;;
     resume|thaw)
    # No need to do anything here, kernel unsuspends USB devices
    :
        ;;
esac

Die Kommentare in der Datei (Zeilen, die mit # beginnen) sind irrelevant und können ignoriert werden.

Hinweis: Ich habe dies über Suspend auf einem Desktop getestet und es hat wie angekündigt funktioniert. Ich habe keinen Zugriff auf die gleiche Hardware, die Sie haben, aber ich musste das System über den Netzschalter wiederaufnehmen, sodass ich mir ziemlich sicher bin, dass dies für Sie funktionieren wird.

Bearbeitung basierend auf Kommentaren und Erweiterung der Frage:

Es scheint, dass dies die Informationen sind, die Sie benötigen, um fortzufahren: Bus 006 Device 006: ID 046d:c52b Logitech, Inc. Unifying Receiver


In meinem geditUbuntu 16.04 Vanilla Upgrade von 14.04 gibt es eine Save asOption unter dem FileMenü. Irgendwas muss mit deiner Konfiguration passiert sein ??? PS gute Antwort, ich werde es später versuchen.
WinEunuuchs2Unix

Ich habe Datei speichern als auch mit Ubuntu Mate.
Tokam

@ WinEunuuchs2Unix Interessant. Es scheint bei einer Neuinstallation nicht zu existieren. Vielleicht ist dies die Grundlage für eine neue Frage ...
Elder Geek

@ElderGeek Bei einem Update auf, Save Aswenn ich tippe gedit, wird das gesamte Hauptmenü der "Datei Bearbeiten Ansicht Suchwerkzeuge Dokumente Hilfe" angezeigt, aber wenn ich tippe, wird die Menüliste nicht angezeigt gksu gedit. HTH.
WinEunuuchs2Unix

1
@tokam Können Sie Ihre Frage mit der Ausgabe von lsusb -tund lsusbmit allen angeschlossenen Geräten aktualisieren, wie Sie sie normalerweise täglich verwenden. Das könnte uns helfen, den Hub zu visualisieren und was nicht.
WinEunuuchs2Unix
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.