USB-Ports beim Raspberry Pi an- und ausschalten (deaktivieren)

Kein Kommentar Autor: Jürgen (jdo)

Vor ein paar Tagen habe ich einen Beitrag veröffentlicht, wie Du mit einem Trick und einem externen USB-Hub die Stromzufuhr unter Linux kontrollieren kannst. Ich schalte damit ein Nachtlicht, das an meinem Server hängt. In einem Kommentar wurde geschrieben, dass ich mit hub-ctrl die Stromzufuhr der USB-Ports beim Raspberry Pi kontrollieren kann. Das hat mich neugierig gemacht. Die USB-Ports beim Raspberry Pi lassen sich schalten, aber nicht so, wie Du das vielleicht erwartest.

Hinweis: Ich habe zwei Programme ausprobiert, aber Du musst gar nichts kompilieren, um die USB-Ports zu deaktivieren. Wie das geht, zeige ich Dir am Ende des Beitrags.

Tipp: Experimentierst Du mit USB-Ports und dem Raspberry Pi, melde Dich am besten via SSH remote an. Warum? Du erwischt sonst Tastatur und Maus, die nicht mehr funktionieren … muss ich nicht weiter erklären, oder? 🙂

USB-Ports beim Raspberry Pi anschalten und wieder ausschalten

Es gibt mehrere Möglichkeiten und Programme, die USB-Ports beim Raspberry Pi zu deaktivieren und wieder zu aktivieren. Ich zeige Dir 3 verschiedene:

Stromzufuhr mittels hub-ctrl kontrollieren

Ich habe meinen Raspberry Pi 3+ mit dem aktuellen Raspbian gestartet und habe hub-ctrl heruntergeladen und kompiliert. Das ist nicht schwer. Du musst nur libusb-dev vorher installieren:

sudo apt-get install libusb-dev

und danach kannst Du die eine Datei hub-ctrl.c kompilieren:

gcc -o hub-ctrl hub-ctrl.c -lusb

Danach war ich mit nachfolgendem Befehl tatsächlich in der Lage, mein Nachtlicht zu schalten:

sudo ./hub-ctrl -h 1 -P 2 -p 0

Dabei stehen:

  • -h 1 für Hub 1
  • -P2 für Port 2
  • -p 0 für Strom aus
  • mit -p 1 versorgst Du den USB-Hub wieder mit Strom

ABER! Mit dem Programm kannst Du keine einzelnen Ports anschalten oder ausschalten, sondern nur den gesamten USB-Hub. Das bedeutet, dass alle 4 sichtbaren USB-Ports des Raspberry Pi entweder mit Strom versorgt werden, oder eben stromlos sind.

USB-Ports des Raspberry Pi mit hub-ctrl steuern

USB-Ports des Raspberry Pi mit hub-ctrl steuern

Hinweis: Mit diesem Befehl wird die Ethernet-Schnittstelle nicht deaktiviert, sondern wirklich nur die USB-Ports!

USB-Ports mit uhubctl steuern

Das Vorbild des Programms uhubctl ist sogar das oben genannte hub-ctrl.c. Ich erwähne es trotzdem, weil es ein bisschen übersichtlicher ist. Willst Du es auf dem Raspberry Pi installieren, musst Du zunächst folgendes Paket einspielen:

sudo apt-get install libusb-1.0-0-dev

Danach lädst Du das Programm herunter und erstellst es einfach mit make. Bei mir gab es eine Fehlermeldung, dass es sich nicht um ein Git Repository handelt, die Datei uhubctl wurde aber trotzdem erstellt und ich kann sie benutzen.

Sehr schick ist, dass der einzelne Befehl

sudo ./uhubctl

sehr auskunftsfreudig ist. In den Screenshots weiter unten siehst Du, was ich meine. Das Programm listet Details auf und das trägt sehr zur Übersichtlichkeit bei, beziehungsweise weiß ich schnell, welche Ports ich wo und wie schalten möchte. Beim Raspberry Pi ist das allerdings nicht so ganz ersichtlich, da ich Port 2 schalten will, um den kompletten USB-Hub zu deaktivieren. Mit lsusb -t findest Du das aber schnell heraus.

Willst Du die USB-Ports auf dem Raspberry Pi deaktivieren, führst Du diesen Befehl aus:

sudo ./uhubctl -p 2 -a 0 -l 1-1

Wie die erste Variante deaktiviert auch dieser Befehl den kompletten USB-Hub oder alle Ports. Du aktivierst sie wieder mit:

sudo ./uhubctl -p 2 -a 1 -l 1-1

Als Screenshot sieht die Geschichte wie folgt aus.

Mit uhubctl die USB-Ports auf dem Raspberry Pi deaktivieren

Mit uhubctl die USB-Ports auf dem Raspberry Pi deaktivieren

Nun könntest Du auf den Gedanken kommen, vielleicht doch die USB-Maus einzeln zu deaktivieren. Es ist ja genau aufgelistet, auf welchem Port sie geführt ist. Das habe ich natürlich versucht. Das Programm sendet den Strom-Aus-Befehl sogar an den Port, aber er hat keine Auswirkung. Ich habe einen Screenshot gemacht, der Dir zeigt, was passiert:

Strom ist auf Port-Ebene nicht schaltbar

Strom ist auf Port-Ebene nicht schaltbar

Hinweis: Auch der Befehl uhubctl deaktiviert die Ethernet-Schnittstelle nicht, sondern lediglich die USB-Ports!

Es funktioniert auch ohne zusätzliche Programme, ABER …

Willst Du alle USB-Ports beim Raspberry Pi deaktivieren, musst Du gar keinen zusätzlichen Programme kompilieren oder installieren. Da Du den kompletten Hub abschaltest, funktioniert das auch mit diesem Befehl:

sudo echo '1-1'|sudo tee /sys/bus/usb/drivers/usb/unbind

Du versorgst alle sichtbaren USB-Ports beim Raspberry Pi wieder mit Strom, indem Du den Befehl ausführst:

sudo echo '1-1'|sudo tee /sys/bus/usb/drivers/usb/bind

Vorsicht! Pass aber bei dieser Methode auf, dass damit auch der Ethernet-Port deaktiviert wurde. Versuche ich, lediglich 1-1.1.2 zu deaktivieren, leuchtet mein Nachtlicht weiter!

Will ich einen USB-Port schalten, brauche ich einen zusätzlichen oder externen Hub

Vielleicht reicht es Dir, wenn Du alle Ports komplett deaktivieren und wieder aktivieren kannst. Manche wollen die Ports auf dem Raspberry Pi vielleicht individueller steuern und da hilft dann nur ein externer Hub. Den kannst Du separat ansteuern. Es gibt übrigens auch Hubs, bei denen Du jeden Port einzeln schalten darfst.

Eine Liste mit kompatiblen Hubs findest Du übrigens auf der Github-Seite von uhubctrl. Sie hat nicht den Anspruch, vollständig zu sein. Aber solltest Du einen kaufen wollen, ist das zumindest ein guter Ansatzpunkt.

Unterm Strich wirst Du ein bisschen experimentieren müssen. Zumindest ist es mir so ergangen, bis ich das gewünschte Ergebnis erhalten habe. Es ist auf jeden Fall gut zu wissen, 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.




 Alle Kommentare als Feed abonnieren

Kommentare sind geschlossen.