USB-Ports beim Raspberry Pi ein- und ausschalten: uhubctl für Pi 3, 4 und 5
Die USB-Ports beim Raspberry Pi lassen sich per Software stromlos schalten und wieder einschalten. Das Werkzeug dafür heißt uhubctl und steckt in den Paketquellen von Raspberry Pi OS. Es gibt aber eine Grenze, die in der Hardware liegt: Auf dem Pi selbst schaltest Du immer alle USB-Ports zusammen, nie einen einzelnen. Willst Du ein einzelnes Gerät schalten, brauchst Du einen externen Hub, der das kann. Wie das auf Raspberry Pi 3, 4 und 5 funktioniert, welche Befehle Du brauchst und wo die Fallen liegen, zeige ich Dir hier.
Angefangen hat das Ganze mit einem Beitrag über ein Nachtlicht, das ich per USB-Hub an meinem Server schalte. In einem Kommentar kam der Hinweis, dass so etwas auch direkt auf dem Raspberry Pi geht. Das hat mich neugierig gemacht, und die Grundaussage von damals gilt heute noch: Es funktioniert, aber nicht so, wie Du das vielleicht erwartest.
Tipp: Experimentierst Du mit den USB-Ports, melde Dich am besten per SSH an. Sonst erwischt Du Tastatur und Maus, die danach nicht mehr funktionieren. Muss ich nicht weiter erklären, oder?
Was auf dem Raspberry Pi geht und was nicht
Ein USB-Hub kann laut USB-Spezifikation drei Dinge: gar keine Stromschaltung, alle Ports gemeinsam schalten (ganged) oder jeden Port einzeln (per-port). Die internen Hubs des Raspberry Pi melden zwar teilweise Einzelschaltung, verdrahtet sind die Ports aber gemeinsam. Deshalb gehen auf dem Pi immer alle vier Ports zusammen aus. Das ist keine Software-Beschränkung, sondern Platinendesign, und die Entwickler von uhubctl beschreiben es genau so in ihrer Dokumentation. Der Stand pro Modell:
| Modell | Strom schaltbar? | Wie | Besonderheit |
|---|---|---|---|
| Raspberry Pi B+, 2B, 3B | Ja, alle Ports gemeinsam | Hub 1-1, Port 2 | Port 1 desselben Hubs versorgt Ethernet und WLAN, den lässt Du in Ruhe |
| Raspberry Pi 3B+ | Ja, alle Ports gemeinsam | Hub 1-1, Port 2 | Zweiter Hub 1-1.1 hängt dahinter, Netzwerk an dessen Port 1 |
| Raspberry Pi 4B | Ja, alle Ports gemeinsam | Hub 1-1 (USB 2) und Hub 2 (USB 3) | Braucht aktuelle VL805-Firmware, siehe unten |
| Raspberry Pi 5 | Ja, alle Ports gemeinsam | Vier logische Hubs, Strom fällt erst, wenn alle aus sind | Hub-Nummern hängen von OS und Platinenrevision ab |
| Raspberry Pi Zero, Zero 2 W | Nein | Nicht in der Liste der unterstützten Geräte, es gibt keinen internen Hub |
Wichtig für alle Modelle: Der Netzwerkanschluss bleibt beim Schalten über uhubctl unangetastet. Bei den älteren Modellen hängt Ethernet zwar am selben Hub, aber an einem anderen Port.
uhubctl installieren
2019 musste ich uhubctl noch selbst kompilieren. Das ist vorbei. Das Programm liegt in den Paketquellen von Debian und damit auch in Raspberry Pi OS. Bookworm liefert Version 2.5.0, Trixie Version 2.6.0. Letztere ist auch die aktuelle Veröffentlichung des Projekts (Stand September 2026).
sudo apt update
sudo apt install uhubctlNur wenn Du eine neuere Version brauchst als die aus den Paketquellen, baust Du sie selbst. Dafür brauchst Du libusb und pkgconf:
sudo apt install git build-essential libusb-1.0-0-dev pkgconf
git clone https://github.com/mvp/uhubctl
cd uhubctl
make
sudo make installDanach liegt das Programm als /usr/sbin/uhubctl im System. Der Aufruf mit ./uhubctl aus dem Quellordner, wie im alten Beitrag beschrieben, ist damit überflüssig.
USB-Ports mit uhubctl ausschalten und einschalten
Ohne Parameter listet uhubctl alle Hubs auf, die es schalten kann, samt der Geräte an den Ports. Das ist sehr auskunftsfreudig und der erste Schritt, weil Du daraus die Hub-Adresse (Option -l) ablesen kannst.
sudo uhubctl
Die Aktionen heißen off, on, cycle und toggle, alternativ 0 bis 3. cycle schaltet aus, wartet kurz (einstellbar mit -d) und schaltet wieder ein. Das ist praktisch, wenn sich ein USB-Gerät aufgehängt hat und Du es aus der Ferne neu starten willst, etwa einen SDR-Stick, eine Webcam oder einen Funk-Dongle.
Raspberry Pi B+, 2B, 3B und 3B+
Bei diesen Modellen sitzt alles an Hub 1-1. Port 2 schaltet die vier sichtbaren USB-Buchsen, Port 1 gehört dem Netzwerk. Ausschalten:
sudo uhubctl -l 1-1 -p 2 -a offWieder einschalten:
sudo uhubctl -l 1-1 -p 2 -a onNun könntest Du auf den Gedanken kommen, vielleicht doch nur die USB-Maus zu deaktivieren. Sie ist ja genau aufgelistet, samt Port. Das habe ich damals natürlich versucht. Das Programm sendet den Befehl sogar an den Port, aber er hat keine Auswirkung. Der Screenshot zeigt, was passiert:

Raspberry Pi 4
Der Pi 4 hat einen USB-3-Chip (VL805) und damit zwei Hubs, die dieselben Buchsen bedienen: Hub 1-1 für USB 2 und Hub 2 für USB 3. Alle vier Ports hängen gemeinsam, deshalb brauchst Du keine Port-Angabe:
sudo uhubctl -l 1-1 -a off
sudo uhubctl -l 2 -a offMit -a on geht der Strom wieder an. Voraussetzung ist eine VL805-Firmware ab Stand 00137ad. Ob Du sie hast, zeigt sudo rpi-eeprom-update; ist die Firmware älter, funktioniert das Schalten nicht, und Du musst das EEPROM zuerst aktualisieren. Bei einem Raspberry Pi OS, das Du regelmäßig aktualisierst, ist das längst passiert. Wie Du Updates automatisch einspielen lässt, steht im Beitrag zu unattended-upgrades auf dem Raspberry Pi.
Raspberry Pi 5
Der Pi 5 hat zwei USB-2- und zwei USB-3-Buchsen, die intern an vier logischen Hubs hängen. Je nach Betriebssystem und Platinenrevision heißen sie 1 bis 4 oder 2 bis 5. Jeder dieser Hubs behauptet, seine Ports einzeln schalten zu können. Stimmt aber nicht: Die Spannung fällt erst, wenn alle Ports auf allen Hubs aus sind, und sobald ein einziger Port wieder an ist, liegt an allen vier Buchsen wieder Strom an. Laut Dokumentation reicht es, die beiden USB-3-Hubs abzuschalten:
sudo uhubctl -l 2 -a off
sudo uhubctl -l 4 -a offUnd wieder an:
sudo uhubctl -l 2 -a on
sudo uhubctl -l 4 -a onPassen die Hub-Nummern bei Dir nicht, hilft die Ausgabe von sudo uhubctl ohne Parameter: Die blauen Buchsen sind immer Port 1, die schwarzen immer Port 2 des jeweiligen Hubs.
uhubctl ohne sudo benutzen
Standardmäßig braucht uhubctl Root-Rechte. Für Skripte, Cronjobs oder Home Assistant ist das lästig. Die Lösung ist eine udev-Regel in /etc/udev/rules.d/52-usb.rules. Seit Linux 6.0 gibt es dafür eine Standard-Schnittstelle im Kernel, die uhubctl bevorzugt nutzt, deshalb hat die Regel zwei Teile. Die einfachste Variante gibt jeden Hub für alle Nutzer frei:
SUBSYSTEM=="usb", DRIVER=="hub|usb", MODE="0666"
# Linux 6.0 oder neuer:
SUBSYSTEM=="usb", DRIVER=="hub|usb", \
RUN="/bin/sh -c \"chmod -f 666 $sys$devpath/*port*/disable || true\""Willst Du es enger fassen, ergänzt Du ATTR{idVendor}==”…” mit der Hersteller-ID des Hubs aus der uhubctl-Ausgabe. Beim Pi 4 sind das zwei IDs (2109 für USB 3 und 1d6b für USB 2), also zwei Zeilen. Eine fertige Regel mit Gruppenrechten für dialout liegt im Repository von uhubctl. Danach die Regeln neu laden oder neu starten:
sudo udevadm trigger --attr-match=subsystem=usbOhne Zusatzprogramm: Treiber trennen ist nicht Strom abschalten
Im Netz findest Du oft den Tipp, den USB-Hub einfach vom Treiber zu lösen:
echo '1-1' | sudo tee /sys/bus/usb/drivers/usb/unbindUnd zurück:
echo '1-1' | sudo tee /sys/bus/usb/drivers/usb/bindAuf meinem Raspberry Pi 3B+ ging damit 2019 tatsächlich das Nachtlicht aus, weil der komplette Hub 1-1 abgeklemmt wurde. Zwei Haken hat die Methode aber: Erstens hängt bei den älteren Modellen der Netzwerkanschluss am selben Hub, der Pi war danach also ohne Ethernet. Nur einen Unterport wie 1-1.1.2 zu trennen, brachte nichts, das Licht leuchtete weiter. Zweitens trennt unbind nur die Datenverbindung zum Treiber. Ob die Spannung an der Buchse wirklich fällt, hängt vom Modell ab; beim Pi 4 bleibt sie laut Nutzerberichten an. Wenn es Dir um Strom geht, nimm uhubctl.
Der Vorläufer: hub-ctrl
Das erste Programm, das ich 2019 ausprobiert habe, war hub-ctrl, eine einzelne C-Datei, die Du mit libusb-dev kompilierst und die das Vorbild für uhubctl war. Auf meinem Raspberry Pi 3B+ mit dem damaligen Raspbian konnte ich damit mein Nachtlicht schalten:
sudo ./hub-ctrl -h 1 -P 2 -p 0- -h 1 steht für Hub 1
- -P 2 für Port 2
- -p 0 für Strom aus, mit -p 1 geht er wieder an

Auch hier galt: nur der ganze Hub, nie ein einzelner Port. Heute gibt es keinen Grund mehr, hub-ctrl zu benutzen. uhubctl kann dasselbe, kennt die neueren Pi-Modelle und kommt fertig aus den Paketquellen.
Einzelne USB-Ports schalten: nur mit externem Hub
Vielleicht reicht es Dir, alle Ports gemeinsam aus- und wieder einzuschalten. Willst Du ein einzelnes Gerät steuern, führt kein Weg an einem externen USB-Hub vorbei, der Einzelschaltung wirklich unterstützt. Den steckst Du an eine beliebige Buchse des Pi und sprichst seine Ports dann über -l und -p einzeln an. Genau so mache ich es mit dem Nachtlicht an meinem Server.
Eine Liste mit kompatiblen Hubs findest Du auf der GitHub-Seite von uhubctl. Sie hat nicht den Anspruch, vollständig zu sein, aber wenn Du einen kaufen willst, ist sie der beste Ausgangspunkt. Es gibt dort auch Hubs, die speziell für den Raspberry Pi gebaut sind, etwa den UUGear MEGA4 für den Pi 4. Zwei Dinge solltest Du vor dem Kauf wissen: Viele Hubs melden zwar Einzelschaltung, kappen aber nur die Datenleitung und nicht die Spannung. Und größere Hubs sind intern oft aus mehreren 4-Port-Chips zusammengesetzt; die Ports, die die Chips untereinander verbinden, darfst Du nicht schalten.
Wofür sich das lohnt
Strom sparst Du mit dem Abschalten kaum; der Pi selbst zieht ein Vielfaches dessen, was eine leere USB-Buchse kostet. Sinnvoll ist das Schalten für andere Dinge: Eine Webcam-LED oder ein USB-Lüfter lassen sich per Cronjob oder abhängig von der CPU-Temperatur ein- und ausschalten. Ein hängender USB-Stick, ein Funkempfänger oder ein 3D-Drucker-Adapter startet mit -a cycle neu, ohne dass jemand am Gerät ziehen muss. Das ist Gold wert, wenn der Pi irgendwo ohne Tastatur läuft und Du ihn nur über SSH erreichst, am besten unter einer festen IP-Adresse.
Unterm Strich musst Du ein bisschen experimentieren, bis Du die richtige Hub-Adresse für Dein Modell gefunden hast. Die Ausgabe von sudo uhubctl und lsusb -t helfen dabei. Gut zu wissen ist auf jeden Fall, dass es überhaupt funktioniert.
Nette Pi-Konstellation
Suchst Du ein VPN für den Raspberry Pi? NordVPN* bietet einen Client, der mit Raspberry Pi OS (32-Bit / 64-Bit) und Ubuntu für Raspberry Pi (64-Bit) funktioniert.
Aktualisiert am 08.09.2026 von Henry. Fakten geprüft.

Alle Kommentare als Feed abonnieren




















