uhubctl
ist ein Dienstprogramm zur Steuerung der USB-Stromversorgung pro Port auf intelligenten USB-Hubs. Als Smart Hub wird ein Hub bezeichnet, der die Leistungsumschaltung pro Port implementiert.
Die ursprüngliche Idee für diesen Code wurde von hub-ctrl.c von Niibe Yutaka inspiriert: https://www.gniibe.org/development/ac-power-control-by-USB-hub
Beachten Sie, dass nur sehr wenige Hubs tatsächlich die Leistungsumschaltung pro Port unterstützen. Einige davon werden nicht mehr hergestellt und sind möglicherweise schwer zu finden.
Dies ist eine Liste bekannter kompatibler USB-Hubs:
Hersteller | Produkt | Häfen | USB | VID:PID | Freigeben | EOL |
---|---|---|---|---|---|---|
Acer | BE270U-Monitor (siehe) | 4 | 3,0 | 2109:2811 | 2016 | |
AmazonBasics | HU3641V1 (RPi-Problem) | 4 | 3,0 | 2109:2811 | 2013 | |
AmazonBasics | HU3770V1 (RPi-Problem) | 7 | 3,0 | 2109:2811 | 2013 | |
AmazonBasics | HU9003V1EBL, HUC9003V1EBL | 7 | 3.1 | 2109:2817 | 2018 | |
AmazonBasics | HU9002V1SBL, HU9002V1EBL, HU9002V1ESL (Hinweis) | 10 | 3.1 | 2109:2817 | 2018 | |
AmazonBasics | HUC9002V1SBL, HUC9002V1EBL, HUC9002V1ESL | 10 | 3.1 | 2109:2817 | 2018 | |
AmazonBasics | U3-7HUB (funktioniert nur für 1 Ladeanschluss) | 7 | 3,0 | 2109:2813 | 2020 | |
Anker | AK-68ANHUB-BV7A-0004 (Hinweis) | 7 | 3,0 | 2109:0812 | 2014 | |
Apfel | Pro Display XDR MWPE2LL/A (interner USB-Hub) | 4 | 2.0 | 05AC:9139 | 2019 | |
Apfel | Thunderbolt Display 27" (interner USB-Hub) | 6 | 2.0 | 2011 | 2016 | |
Apfel | USB-Tastatur mit Ziffernblock (interner USB-Hub) | 3 | 2.0 | 2011 | ||
Asus | Z77 Sabertooth Motherboard (onboard USB-Hub) | 6 | 2.0 | 2012 | ||
Asus | Z87-PLUS Motherboard (onboard USB-Hub) | 4 | 3,0 | 2013 | 2016 | |
Aukey | CB-C59 | 4 | 3,0 | 2109:2813 | 2017 | |
B+B SmartWorx | UHR204 | 4 | 2.0 | 0856:DB00 | 2013 | |
B+B SmartWorx | USH304 | 4 | 3,0 | 04B4:6506 | 2017 | 2019 |
Basler | 2000036234 | 4 | 3,0 | 0451:8046 | 2016 | |
Belkin | F5U101 | 4 | 2.0 | 0451:2046 | 2005 | 2010 |
Belkin | F5U238UKCRL-MOB | 4 | 2.0 | 0409:0059 | 2004 | 2010 |
BenQ | PD2700U 4K-Monitor (funktioniert nur im USB2-Modus) | 4 | 3,0 | 05E3:0610 | 2018 | |
BenQ | PD3220U | 4 | 3.1 | 05E3:0610 | 2019 | |
Bytecc | BT-UH340 (Warnung) | 4 | 3,0 | 2109:8110 | 2010 | |
Centech | CT-USB4HUB HUB erneut versuchen | 4 | 3,0 | 0424:2744 | 2017 | |
Circuitco | Beagleboard-xM (interner USB-Hub) | 4 | 2.0 | 0424:9514 | 2010 | |
Club3D | CSV-3242HD Dockingstation mit zwei Displays | 4 | 3,0 | 2109:2811 | 2015 | |
Coolgear | USBG-12U2ML | 12 | 2.0 | 05e3:0607 | 2015 | |
Zypresse | CY4608 HX2VL Devkit (Hinweis) | 4 | 2.0 | 04B4:6570 | 2012 | |
D-Link | DUB-H4 rev D,E (schwarz). Hinweis: Rev. A, C, F werden nicht unterstützt | 4 | 2.0 | 05E3:0608 | 2012 | |
D-Link | DUB-H7 rev A (silber) | 7 | 2.0 | 2001:F103 | 2005 | 2010 |
D-Link | DUB-H7 rev D,E (schwarz). Rev. B, C, F, G werden nicht unterstützt | 7 | 2.0 | 05E3:0608 | 2012 | |
Dell | P2416D 24" QHD-Monitor (Hinweis) | 4 | 2.0 | 2017 | ||
Dell | S2719DGF 27" WQHD Gaming-Monitor | 5 | 3,0 | 0424:5734 | 2018 | |
Dell | UltraSharp 1704FPT 17" LCD-Monitor | 4 | 2.0 | 0424:A700 | 2005 | 2015 |
Dell | UltraSharp U2415 24-Zoll-LCD-Monitor | 5 | 3,0 | 2014 | ||
Dell | UltraSharp U3419W 34" gebogener Monitor | 6 | 3,0 | 2020 | ||
Dell | Wyse 3040 (-f erforderlich) | 6 | 3,0 | 2017 | ||
Entsperren | 62537 | 4 | 3,0 | 2017 | 2021 | |
Entsperren | 87445 (Anmerkung) | 4 | 2.0 | 05E3:0608 | 2009 | 2013 |
Elecom | U2H-G4S | 4 | 2.0 | 2006 | 2011 | |
Gigabyte | G27Q-Monitor (siehe | 4 | 3,0 | 2109:0817 | 2020 | |
GlobalScale | ESPRESSObin SBUD102 V5 | 1 | 3,0 | 1D6B:0003 | 2017 | |
Hardkernel | ODROID-C4 (Hinweis) | 4 | 3,0 | 2020 | ||
Hawking-Technologie | UH214 | 4 | 2.0 | 2003 | 2008 | |
Hewlett Packard | USB-C-Dock G5 5TW10AA | 5 | 3,0 | 03F0:076B | 2019 | |
Hewlett Packard | P5Q58UT | 3 | 3,0 | 2019 | ||
Inateck | HB2025A (nur USB2) | 4 | 3.1 | 2109:2822 | 2021 | |
IOI | U3H415E1 | 4 | 3,0 | 2012 | ||
j5create | JUH377 (Anmerkung) | 7 | 3,0 | 2016 | ||
j5create | JUH470 (Hinweis) | 3 | 3,0 | 05E3:0610 | 2014 | |
Entsaftete Systeme | 6HUB-01 | 7 | 3,0 | 0BDA:0411 | 2014 | 2018 |
KUNBUS GmbH | RevPi Connect (+) / S / SE | 2 | 2.0 | 0424:9514 | 2018 | |
KUNBUS GmbH | RevPi Connect 4 | 2 | 3,0 | 2022 | ||
KUNBUS GmbH | RevPi Core 3 / S / SE | 2 | 2.0 | 0424:9514 | 2017 | |
LG Electronics | 27MD5KL-B-Monitor | 4 | 3,0 | 043E:9A60 | 2019 | |
LG Electronics | 27GL850-B-Monitor | 4 | 3,0 | 0451:8142 | 2019 | |
LG Electronics | 27UK850-W-Monitor | 2 | 3,0 | 2018 | ||
LG Electronics | 27UN83A-W-Monitor | 2 | 3,0 | 0451:8142 | 2020 | |
LG Electronics | 38WK95C-W-Monitor | 4 | 3,0 | 0451:8142 | 2018 | |
Lenovo | ThinkPad Ultra Dockingstation (40A20090EU) | 6 | 2.0 | 17EF:100F | 2015 | |
Lenovo | ThinkPad Ultra-Dockingstation (40AJ0135EU) | 7 | 3.1 | 17EF:3070 | 2018 | |
Lenovo | ThinkPad X200 Ultrabase 42X4963 | 3 | 2.0 | 17EF:1005 | 2008 | 2011 |
Lenovo | ThinkPad X6 Ultrabase 42W3107 | 4 | 2.0 | 17EF:1000 | 2006 | 2009 |
Lenovo | ThinkPlus 4-in-1 USB-C-Hub 4X90W86497 | 3 | 3,0 | 2021 | ||
Lenovo | ThinkVision T24i-10 Monitor | 4 | 2.0 | 17EF:0610 | 2018 | |
Lenovo | USB-C-zu-4-Port-USB-A-Hub | 4 | 2.0 | 17EF:103A | 2020 | |
Lindy | USB-Seriell-Konverter mit 4 Anschlüssen | 4 | 1.1 | 058F:9254 | 2008 | |
Linksys | USB2HUB4 (Hinweis) | 4 | 2.0 | 2004 | 2010 | |
Maplin | A08CQ | 7 | 2.0 | 0409:0059 | 2008 | 2011 |
Metadot | Das Keyboard 4 | 2 | 3,0 | 2014 | ||
Mikrochip | EVB9512 | 2 | 2.0 | 2009 | ||
Mikrochip | EVB-USB2517 | 7 | 2.0 | 2008 | ||
Mikrochip | EVB-USB2534BC | 4 | 2.0 | 2013 | ||
Mikrochip | EVB-USB5807 | 7 | 3,0 | 2016 | ||
Moxa | Uport-407 | 7 | 2.0 | 110A:0407 | 2009 | |
NVIDIA | Jetson Nano B01 (Details) | 4 | 3,0 | 2019 | ||
NVIDIA | Jetson Xavier NX (Details) | 4 | 3,0 | 2020 | ||
Phidgets | HUB0003_0 | 7 | 2.0 | 1A40:0201 | 2017 | |
Philips | 346B1C UltraWide 34" gebogener Monitor | 4 | 3,0 | 05E3:0610 | 2019 | |
Steckbar | USB3-HUB7BC | 7 | 3,0 | 2109:0813 | 2015 | |
Steckbar | USB3-HUB7C (funktioniert nur für 2 Ladeanschlüsse) | 7 | 3,0 | 2109:0813 | 2015 | |
Steckbar | USBC-HUB7BC (funktioniert für 6/7 Ports, nicht für den ganz rechten) | 7 | 3,0 | 2109:0817 | 2021 | |
Steckbar | USB3-HUB10-C2 (funktioniert nur für 2 Ladeanschlüsse) | 10 | 3,0 | 2014 | ||
Port Inc | NWUSB01 | 4 | 1.1 | 0451:1446 | 1999 | 2003 |
Raspberry Pi | B+, 2B, 3B (siehe unten) | 4 | 2.0 | 2011 | ||
Raspberry Pi | 3B+ (siehe unten) | 4 | 2.0 | 0424:2514 | 2018 | |
Raspberry Pi | 4B (siehe unten) | 4 | 3,0 | 2109:3431 | 2019 | |
Raspberry Pi | 5 (siehe unten) | 4 | 3,0 | 1d6b:0002 | 2023 | |
Renesas | uPD720202 PCIe USB 3.0-Host-Controller | 2 | 3,0 | 2013 | ||
Rosewill | RHUB-210 | 4 | 2.0 | 0409:005A | 2011 | 2014 |
Rosonway | RSH-518C (Hinweis) | 7 | 3,0 | 2109:0817 | 2021 | |
Rosonway | RSH-A10 (siehe) | 10 | 3,0 | 0bda:0411 | 2020 | |
Rosonway | RSH-A13 (Warnung) | 13 | 3.1 | 2109:2822 | 2021 | |
Rosonway | RSH-A16 (Hinweis, Warnung) | 16 | 3,0 | 0bda:0411 | 2020 | |
Rosonway | RSH-A104 (nur USB2) | 4 | 3.1 | 2109:2822 | 2022 | |
Rosonway | RSH-A107 (auch bekannt als A107-5) | 7 | 3.1 | 0bda:5411 | 2022 | |
Rosonway | RSH-ST07C (nur 4) | 7 | 3,0 | 2109:2822 | 2023 | |
Sanwa-Versorgung | USB-HUB14GPH | 4 | 1.1 | 2001 | 2003 | |
Seagate | Backup Plus Hub STEL8000100 | 2 | 3,0 | 0BC2:AB44 | 2016 | |
Seeed Studio | reTerminal CM4104032 | 2 | 2.0 | 0424:2514 | 2021 | |
StarTech | DKT30CSDHPD3 USB-C-Reisedock | 3 | 3,0 | 2109:2817 | 2018 | |
StarTech | HB30A4AIB (Warnung) | 4 | 3,0 | 2109:2817 | 2018 | |
Sunix | SHB4200MA | 4 | 2.0 | 0409:0058 | 2006 | 2009 |
Systemgespräche | Sugoi USB2-HUB4X | 4 | 2.0 | 2007 | ||
Targus | PA095UZ | 2 | 2.0 | 2004 | ||
Targus | PAUH212/PAUH212U | 7 | 2.0 | 2004 | 2009 | |
Texas Instruments | TUSB4041PAPEVM | 4 | 2.1 | 0451:8142 | 2015 | |
UUGear | MEGA4 (für Raspberry Pi 4B) | 4 | 3,0 | 2109:0817 | 2021 | |
VirtualHere | USB3 4-Port-Hub (Hinweis) | 4 | 3,0 | 2024 |
Diese Tabelle ist keineswegs vollständig. Wenn Ihr Hub mit uhubctl
funktioniert, aber oben nicht aufgeführt ist, melden Sie es bitte, indem Sie ein neues Problem unter https://github.com/mvp/uhubctl/issues öffnen, damit wir es zur unterstützten Tabelle hinzufügen können. Geben Sie in Ihrem Bericht bitte das genaue Produktmodell an, fügen Sie die Ausgabe von uhubctl
hinzu und testen Sie die VBUS-Off-Unterstützung, wie unten in den FAQ beschrieben.
Beachten Sie, dass viele moderne Motherboards über integrierte Root-Hubs verfügen, die diese Funktion unterstützen – Sie müssen möglicherweise nicht einmal einen externen Hub kaufen.
Wenn Sie einen USB 3.0-Hub an den USB3-Upstream-Port angeschlossen haben, wird dieser als zwei unabhängige virtuelle Hubs erkannt: USB2 und USB3, und Ihre USB-Geräte werden je nach ihren Fähigkeiten und Verbindungsgeschwindigkeit an den virtuellen USB2- oder USB3-Hub angeschlossen. Um die Stromversorgung solcher Hubs zu steuern, ist es erforderlich, die Stromversorgung sowohl der virtuellen USB2- als auch der USB3-Hubs aus-/einzuschalten, damit die Änderungen beim Aus-/Einschalten wirksam werden. uhubctl
wird versuchen, dies automatisch zu tun (es sei denn, Sie deaktivieren dieses Verhalten mit der Option -e
).
Während die meisten Hubs die Daten-USB-Verbindung unterbrechen, kann es sein, dass einige den VBUS zum Port immer noch nicht unterbrechen, was bedeutet, dass das angeschlossene Telefon möglicherweise weiterhin über den Port aufgeladen wird, der durch uhubctl
ausgeschaltet wird.
Dieses Dienstprogramm wurde zum Kompilieren und Arbeiten unter Linux (Ubuntu/Debian, Redhat/Fedora/CentOS, Arch Linux, Gentoo, openSUSE, Buildroot), FreeBSD, NetBSD, SunOS und MacOS getestet.
Während uhubctl
unter Windows kompiliert wird, funktioniert die USB-Stromumschaltung unter Windows nicht, da libusb
den winusb.sys
-Treiber verwendet, der laut Microsoft die erforderlichen USB-Steuerungsanforderungen nicht unterstützt. Dies kann behoben werden, wenn libusb
anfängt, andere Treiber unter Windows zu unterstützen.
Beachten Sie, dass es dringend empfohlen wird, pkg-config
installiert zu haben (viele Plattformen bieten es standardmäßig an).
Zuerst müssen Sie die Bibliothek libusb-1.0 installieren (Version 1.0.12 oder höher, 1.0.16 oder höher wird empfohlen):
sudo apt-get install libusb-1.0-0-dev
sudo yum install libusb1-devel
sudo zypper install libusb-1_0-devel
brew install libusb
oder sudo port install libusb-devel
sudo pkgin install libusb1 gmake pkg-config
So rufen Sie die uhubctl-Quelle ab und kompilieren sie:
git clone https://github.com/mvp/uhubctl
cd uhubctl
make
Dies sollte uhubctl
Binärdatei generieren. Sie können es als /usr/sbin/uhubctl
in Ihrem System installieren, indem Sie Folgendes verwenden:
sudo make install
Beachten Sie, dass Sie auf einigen Betriebssystemen (z. B. FreeBSD/NetBSD) stattdessen gmake
zum Erstellen verwenden müssen.
Unter MacOS können Sie außerdem uhubctl
mit allen erforderlichen Abhängigkeiten auf einmal installieren, indem Sie auf Homebrew tippen:
brew tap mvp/uhubctl https://github.com/mvp/uhubctl
brew install uhubctl
Um vom Master-Zweig aus zu erstellen/zu installieren, verwenden Sie --HEAD
:
brew install uhubctl --HEAD
️ Verwenden Sie unter Linuxsudo
oder konfigurieren Sie die USB-Berechtigungen wie unten beschrieben!
So listen Sie alle unterstützten Hubs auf:
uhubctl
Sie können die Stromversorgung eines oder mehrerer USB-Anschlüsse wie folgt steuern:
uhubctl -a off -p 2
Dies bedeutet, dass Sie den Standard-Smart Hub verwenden und die Stromversorgung an Port 2 ( -p 2
) ausschalten ( -a off
oder -a 0
). 2
Aktionen sind off
/ on
1
cycle
/ toggle
(oder 0
3
. cycle
bedeutet, den Strom auszuschalten, eine gewisse Verzögerung zu warten (konfigurierbar mit -d
) und ihn dann wieder einzuschalten. Ports können durch Kommas getrennt aufgelistet werden und können für Bereiche verwendet werden -
z. B. 2
, oder 2,4
, oder 2-5
, oder 1-2,5-8
.
️ Das Ausschalten integrierter USB-Anschlüsse kann dazu führen, dass Ihre Tastatur oder Maus nicht mehr funktioniert. Seien Sie also vorsichtig, welche Anschlüsse Sie ausschalten!
Wenn Sie mehr als einen intelligenten USB-Hub angeschlossen haben, sollten Sie mithilfe des Parameters -l
(Standort) einen bestimmten Hub zur Steuerung auswählen. Um Hub-Standorte zu finden, führen Sie einfach uhubctl
ohne Parameter aus. Hub-Standorte sehen wie folgt aus: bx.yz
, wobei b
die USB-Busnummer und x
, y
, z
... die Portnummern für alle Hubs in der Kette sind, beginnend beim Root-Hub für einen bestimmten USB-Bus. Diese Adresse ist halbstabil – sie ändert sich nicht, wenn Sie ein USB-Gerät vom selben physischen USB-Anschluss trennen/wieder anschließen (oder aus-/einschalten) (diese Methode wird auch im Linux-Kernel verwendet).
Unter Linux sollten Sie udev
USB-Berechtigungen konfigurieren (andernfalls müssen Sie es als Root mit sudo uhubctl
ausführen).
Ab Linux Kernel 6.0 gibt es eine Standardschnittstelle zum Ein- und Ausschalten von USB-Hub-Ports, und uhubctl
wird versuchen, diese (anstelle von libusb
) zum Festlegen des Portstatus zu verwenden. Aus diesem Grund gibt es zusätzliche Regeln für Kernel 6.0+. Es schadet nicht, diese Regeln auf Systemen zu haben, auf denen ältere Kernel-Versionen laufen.
Um USB-Berechtigungen zu korrigieren, führen Sie zunächst sudo uhubctl
aus und notieren Sie sich alle vid:pid
für Hubs, die Sie steuern müssen. Fügen Sie dann udev-Regeln wie unten zur Datei /etc/udev/rules.d/52-usb.rules
hinzu (ersetzen Sie 2001
durch Ihre Hub-Anbieter-ID oder entfernen Sie ATTR{idVendor}
-Filter vollständig, um allen USB-Hub-Zugriff zu ermöglichen):
SUBSYSTEM=="usb", DRIVER=="usb", MODE="0666", ATTR{idVendor}=="2001"
# Linux 6.0 or later (its ok to have this block present for older Linux kernels):
SUBSYSTEM=="usb", DRIVER=="usb",
RUN="/bin/sh -c "chmod -f 666 $sys$devpath/*-port*/disable || true""
Beachten Sie, dass bei USB3-Hubs einige Hubs unterschiedliche Hersteller-IDs für USB2- und USB3-Komponenten desselben Chips verwenden und beide Berechtigungen benötigen, damit uhubctl ordnungsgemäß funktioniert. Für Raspberry Pi 4B müssen Sie beispielsweise diese beiden Zeilen hinzufügen (oder den idVendor-Filter entfernen):
SUBSYSTEM=="usb", DRIVER=="usb", MODE="0666", ATTR{idVendor}=="2109"
SUBSYSTEM=="usb", DRIVER=="usb", MODE="0666", ATTR{idVendor}=="1d6b"
Wenn Ihnen der weit geöffnete Modus 0666
nicht gefällt, können Sie den Zugriff nach Gruppen wie folgt einschränken:
SUBSYSTEM=="usb", DRIVER=="usb", MODE="0664", GROUP="dialout"
# Linux 6.0 or later (its ok to have this block present for older Linux kernels):
SUBSYSTEM=="usb", DRIVER=="usb",
RUN+="/bin/sh -c "chown -f root:dialout $sys$devpath/*-port*/disable || true""
RUN+="/bin/sh -c "chmod -f 660 $sys$devpath/*-port*/disable || true""
und fügen Sie dann zugelassene Benutzer zur dialout
-Gruppe hinzu:
sudo usermod -a -G dialout $USER
Damit Ihre udev
-Regeländerungen wirksam werden, starten Sie neu oder führen Sie Folgendes aus:
sudo udevadm trigger --attr-match=subsystem=usb
Zur Vereinfachung finden Sie hier eine gebrauchsfertige udev-Regel.
Gemäß der USB 2.0-Spezifikation können USB-Hubs keine Stromumschaltung, eine gemeinsame Stromumschaltung (alle Ports gleichzeitig) oder eine pro Port (einzelne) Stromumschaltung anzeigen. Beachten Sie, dass uhubctl
standardmäßig nur USB-Hubs erkennt, die die Umschaltung der Stromversorgung pro Port unterstützen (Sie können es jedoch mit der Option -f
zwingen, den Betrieb auf nicht unterstützten Hubs zu versuchen). Mit sudo lsusb -v
können Sie herausfinden, welche Art von Stromumschaltung Ihre Hardware unterstützt:
Keine Leistungsumschaltung:
wHubCharacteristic 0x000a
No power switching (usb 1.0)
Per-port overcurrent protection
Gebündelte Leistungsschaltung:
wHubCharacteristic 0x0008
Ganged power switching
Per-port overcurrent protection
Stromumschaltung pro Port:
wHubCharacteristic 0x0009
Per-port power switching
Per-port overcurrent protection
uhubctl
unterstützt wird?sudo uhubctl
aus. Wenn Ihr Hub nicht aufgeführt ist, wird er nicht unterstützt. Alternativ können Sie sudo lsusb -v
ausführen und prüfen, ob Per-port power switching
. Wenn Sie eine solche Zeile in der lsusb-Ausgabe nicht sehen, wird der Hub nicht unterstützt.uhubctl
den Strom an diesem Anschluss auszuschalten, und prüfen Sie, ob das Telefon nicht mehr aufgeladen wird, die USB-Leuchte nicht mehr leuchtet oder der USB-Lüfter nicht mehr dreht. Wenn sich VBUS nicht ausschaltet, hat Ihr Hub-Hersteller keine Schaltung eingebaut, um die Stromversorgung tatsächlich zu unterbrechen. Ein solcher Hub würde immer noch funktionieren, um die USB-Datenverbindung zu unterbrechen, aber er kann die Stromversorgung nicht ausschalten, und wir berücksichtigen dieses unterstützte Gerät nicht.Nach dem Ausschalten des USB-Anschlusses empfängt udev kein Ereignis und behält daher die Gerätedateien bei. Der Versuch, auf die Gerätedateien zuzugreifen, führt jedoch zu einem E/A-Fehler.
Dies ist ein Linux-Kernel-Problem und wurde seit uhubctl 2.5.0 für Systeme mit Linux-Kernel 6.0 oder höher behoben.
Wenn Sie noch Linux 5.x oder älter verwenden, können Sie diesen Workaround für dieses Problem verwenden:
sudo uhubctl -a off -l ${location} -p ${port}
sudo udevadm trigger --action=remove /sys/bus/usb/devices/${location}.${port}/
Die Gerätedatei wird von udev entfernt, das USB-Gerät ist jedoch weiterhin in lsusb
sichtbar. Beachten Sie, dass der Pfad /sys/bus/usb/devices/${location}.${port}
nur existiert, wenn das Gerät an diesem Port erkannt wurde. Wenn Sie den Strom wieder einschalten, sollte das Gerät ordnungsgemäß neu aufgelistet werden (ein erneuter Aufruf von udevadm
ist nicht erforderlich).
Einige Gerätetreiber im Kernel werden überrascht, wenn das USB-Gerät ausgeschaltet wird, und versuchen automatisch, es wieder einzuschalten.
Dies ist ein Linux-Kernel-Problem und wurde seit uhubctl 2.5.0 für Systeme mit Linux-Kernel 6.0 oder höher behoben.
Wenn Sie noch Linux 5.x oder älter verwenden:
Sie können die Option -r N
verwenden, wobei N eine Zahl zwischen 10 und 1000 ist, um dieses Problem zu beheben. uhubctl
wird mehrmals schnell hintereinander versuchen, den Strom auszuschalten, und dies sollte unterdrückt werden.
Das Deaktivieren der USB-Autorisierung für das betreffende Gerät vor dem Ausschalten mit uhubctl
sollte helfen:
echo 0 > sudo tee /sys/bus/usb/devices/${location}.${port}/authorized
Wenn es sich bei Ihrem Gerät um einen USB-Massenspeicher handelt, sollte auch der Aufruf udisksctl
vor dem Aufruf uhubctl
hilfreich sein:
sudo udisksctl power-off --block-device /dev/disk/...`
sudo uhubctl -a off ...
Viele Hub-Hersteller bauen ihre USB-Hubs mit einfachen 4-Port-USB-Chips. Um beispielsweise einen 7-Port-Hub zu erstellen, werden zwei 4-Port-Hubs in Reihe geschaltet – ein Port geht durch die Reihenschaltung verloren, sodass es sich um einen 4+4-1=7-Port-Hub handelt. Ebenso könnte ein 10-Port-Hub als drei miteinander verkettete 4-Port-Hubs aufgebaut werden, was 4+4+4-2=10 nutzbare Ports ergibt.
Beachten Sie, dass Sie niemals versuchen sollten, den Energiestatus von Ports zu ändern, die zur Reihenschaltung interner Hubs verwendet werden. Dies würde die internen Schaltkreise des Hubs verwirren und zu unvorhersehbarem Verhalten führen.
Dies ist die Einschränkung des Raspberry Pi-Hardwaredesigns. Um dieses Problem zu umgehen, können Sie einen beliebigen externen USB-Hub aus der oben aufgeführten Liste der unterstützten Geräte kaufen, ihn an einen beliebigen USB-Anschluss des Raspberry Pi anschließen und die Stromversorgung seiner Anschlüsse unabhängig steuern. Außerdem gibt es unterstützte Hubs, die speziell für Raspberry Pi entwickelt wurden, z. B. UUGear MEGA4.
Als Referenz verfügen unterstützte Raspberry Pi-Modelle über die folgende interne USB-Topologie:
Einzelner Hub 1-1
, Ports 2-5 gekoppelt, alle gesteuert von Port 2
:
uhubctl -l 1-1 -p 2 -a 0
Der Versuch, die Ports 3
, 4
, 5
zu steuern, führt zu keinem Ergebnis. Port 1
steuert die Stromversorgung für Ethernet+WLAN.
Haupt-Hub 1-1
, alle 4 Ports gekoppelt, alle gesteuert von Port 2
(schaltet auch die sekundären Hub-Ports aus). Port 1
verbindet Hub 1-1.1
unten, Port 2
und 3
sind außen verkabelt, Port 4
nicht verkabelt.
uhubctl -l 1-1 -p 2 -a 0
Sekundärer Hub 1-1.1
(verkettet mit Haupt-Hub): 3 Ports, Port 1
wird für Ethernet+WLAN verwendet und die Ports 2
und 3
sind außen verkabelt.
️ Wenn Ihre VL805-Firmware älter als00137ad
ist (überprüfen Sie dies mitsudo rpi-eeprom-update
), müssen Sie die Firmware aktualisieren, damit die Stromumschaltung auf RPi 4B funktioniert.
USB2-Hub 1
, 1 Port, verbindet nur Hub 1-1
unten.
USB2-Hub 1-1
, 4 Ports gekoppelt, dual zu USB3-Hub 2
unten:
uhubctl -l 1-1 -a 0
USB3-Hub 2
, 4 Ports gekoppelt, dual zu USB2-Hub 1-1
oben:
uhubctl -l 2 -a 0
USB2-Hub 3
, 1 Port, OTG-Controller. Stromumschaltung wird nicht unterstützt.
Raspberry Pi 5 verfügt über zwei USB2-Anschlüsse und zwei USB3-Anschlüsse (insgesamt 4). Diese Ports sind mit 4 verschiedenen USB-Hubs 1
, 2
, 3
, 4
in wirklich seltsamer Konfiguration verbunden (aber je nach Betriebssystem und HW-Revision können die Hubs 2
, 3
, 4
, 5
von Interesse sein). Wenn ein USB3-Gerät an die blaue Buchse angeschlossen ist, wird es am USB3-Hub 2
oder 4
erkannt. Wenn ein USB2-Gerät an eine beliebige Buchse oder ein USB3-Gerät an eine schwarze Buchse angeschlossen ist, wird es am USB2-Hub 1
oder 3
erkannt. Unabhängig vom USB2/USB3-Verbindungstyp sind blaue Buchsen immer Port 1
und schwarze Buchsen immer Port 2
.
Jeder der 4 USB-Onboard-Hubs gibt an, die Stromversorgung pro Port zu unterstützen, aber das stimmt nicht. In Wirklichkeit sind beim Raspberry Pi 5 alle 4 Ports in einer Gruppe zusammengefasst, obwohl sie zu 4 verschiedenen logischen USB-Hubs gehören.
Um die VBUS-Stromversorgung auszuschalten, muss sie für alle integrierten Hubs und Ports deaktiviert werden mit:
uhubctl -l 2 -a 0
uhubctl -l 4 -a 0
Um es wieder einzuschalten:
uhubctl -l 2 -a 1
uhubctl -l 4 -a 1
Beachten Sie, dass die VBUS-Stromversorgung nur dann abfällt, wenn alle Ports ausgeschaltet sind. Wenn Sie einen einzelnen Port aktivieren, wird VBUS für alle vier Ports wiederhergestellt.
Projekt | Beschreibung |
---|---|
Morsecode-USB-Licht | Flashen Sie eine Nachricht im Morsecode mit USB-Licht |
Webcam-USB-Licht | Schalten Sie die LED ein/aus, wenn die Webcam ein-/ausgeschaltet ist |
Kino-Leuchtkasten | Schalten Sie die Cinema Lightbox über die iOS Home-App ein/aus |
Build-Statusleuchte | Erstellen Sie in weniger als 10 Minuten eine Build-Statusanzeige |
Buildenlights | GitLab/GitHub-Projekt-Build-Status als grüne/rote Ampel |
Wetterstation | Setzen Sie die Wetterstation zurück, wenn sie einfriert |
sysmoQMOD | Setzen Sie die Mobilfunkmodems bei Bedarf zurück |
Smog-Sensor | Raspberry Pi-basierter Smog-Sensor-Power-Reset |
Schrecklicher Cluster | Schalten Sie die Raspberry Pi-Clusterknoten nach Bedarf ein/aus |
Idealer Musikserver | Schalten Sie nicht verwendete USB-Anschlüsse aus, um die Audioqualität zu verbessern |
USB-Laufwerke ohne Phantomlast | Betreiben Sie USB-Laufwerke nur bei Bedarf, um Strom zu sparen |
Datenwiederherstellung von USB-Laufwerken | Daten von einer defekten USB-Festplatte wiederherstellen |
Steuern Sie die Stromversorgung des 3D-Druckers | OctoPrint-Web-Plugin zur USB-Stromsteuerung |
USB-Lüfter für Raspberry Pi | Steuern Sie den USB-Lüfter, um eine Überhitzung des Raspberry Pi zu vermeiden |
Raspberry Pi-Reboot-Router | Router automatisch neu starten, wenn das Internet nicht funktioniert |
Steuern Sie die USB-Lampe mit Sprache | Sprachsteuerung der USB-Lampe mit Siri und Raspberry Pi |
Steuern Sie den USB-LED-Streifen | Steuerung des USB-betriebenen LED-Lichtstreifens |
Brauen Sie Bier mit Raspberry Pi | Automatisiertes Bierbrausystem mit Raspberry Pi |
Webcam-On-Air-Zeichen | Ein Schild lässt automatisch aufleuchten, wenn die Webcam verwendet wird |
Mach es selbst PPPS | Löten Sie Drähte in Ihrem USB-Hub, um uhubctl zu unterstützen |
Open-Source-PPPS-Hub | Open-Source-Hardwareprojekt für uhubctl-kompatiblen Hub |
Python-Wrapper für uhubctl | Modul zur Verwendung von uhubctl mit Python |
labgrid | Framework zum Testen von eingebettetem Linux auf Hardware |
Copyright (C) 2009-2024 Vadim Mikhailov
Diese Datei kann unter den Bedingungen der GNU General Public License Version 2 verbreitet werden.