Navigation

USB-over-IP mit usbipd

Mit USB-over-IP kann man über das Netzwerk auf ein entferntes USB-Gerät zugreifen, als ob es am lokalen Rechner angeschlossen wäre.

Es gibt dafür einige kommerzielle Lösungen, unter Linux geht das auch mit freier Software.

Ich benutze das z.B., um über einen Raspberry Pi Zero meinen USB-Scanner über WLAN ansprechen zu können.

Warning

usbipd kennt weder Authentifizierung noch Verschlüsselung. Alle exportierten Geräte sind vom ganzen Netzwerk aus zugänglich und alle übertragenen Daten können mitgelesen werden.

Die folgende Anleitung bezieht sich auf Raspbian Light 10.3 (usbip-utils 2.0), sollte so ähnlich aber auch mit anderen Distributionen funktionieren.

Note

Alle Befehle hier benötigen root-Privilegien. Sie können unter Raspbian mit z.B.

sudo -i

eine root-Shell bekommen.

Server

Installation

Zuerst installieren wir die Pakete usbip und hwdata:

apt install usbip hwdata

Note

Unter Ubuntu müssen Sie statt usbip das Paket linux-tools-generic installieren:

apt install linux-tools-generic hwdata

Das Paket hwdata ist nicht unbedingt nötig. Wenn es nicht installiert ist, werden keine Hersteller- und Produktnamen im Klartext angezeigt, sondern nur die zugehörigen IDs.

Als nächstes laden wir das Kernel-Modul usbip_host:

modprobe usbip_host

Damit es in Zukunft beim Systemstart automatisch geladen wird, fügen wir es zur Datei /etc/modules hinzu:

echo 'usbip_host' >> /etc/modules

Test

Zur Kontrolle können wir uns dir vorhandenen USB-Geräte anzeigen lassen:

usbip list -l

Die Ausgabe sieht bei mir so aus:

- busid 1-1 (04a9:190f)
 Canon, Inc. : CanoScan LiDE 220 (04a9:190f)

Jetzt starten wir den Dämon usbipd im Debug-Modus:

usbipd -d

Um den Dämon statt dessen im Hintergrund zu starten, nehemn wir:

usbipd -D

Um ein Gerät zu exportieren, rufen wir usbip bind mit der Bus-ID des Geräts auf, z.B.:

usbip bind -b 1-1

für die Webcam im obigen Beispiel.

Alle Geräte anzeigen, die der Rechner exportiert:

usbip list -r localhost

Mit der Option unbind können wir den Export des Geräts wieder stoppen:

usbip unbind -b 1-1

Helfer-Skript

Um die Arbeit mit usbipd etwas einfacher zu machen, habe ich ein kleines Shell-Skript geschrieben, Sie finden es unter dem Namen usbip-bind im im Abschnitt “Downloads”.

Damit können Sie in der Datei /usr/local/etc/usbip/server.conf Geräte- oder Bus-IDs angeben (eine pro Zeile). Mit

usbip-bind bind

werden alle zugehörigen Geräte exportiert, mit

usbip-bind unbind

wird der Export wieder gestoppt.

Die im nächsten Abschnitt vorgestellte ¸*.service`-Datei benutzt dieses Skript als /usr/local/bin/usbip-bind:

cp usbip-bind /usr/local/bin/usbip-bind

systemd

Damit usbipd automatisch beim Hochfahren startet, fügen wir einen entsprechenden dienst für systemd hinzu.

Eine passende *.service-Datei finden Sie im Abschnitt “Downloads”. Laden Sie dort die Datei usbipd.service herunter und kopieren sie nach /lib/systemd/system/usbipd.service:

cp usbipd.service /lib/systemd/system/usbipd.service

Die *.service-Datei benutzt das im vorherigen Abschnitt vorgestellt Helfer-Skript. Beim Start werden die in /usr/local/etc/usbip/server.conf angegebenen Geräte exportiert, beim Stopp werden sie “unexportiert”.

Um z.B. das Gerät mit der Bus-ID 1-1 zu exportieren, schreiben Sie die ID in die Datei:

mkdir -p  /usr/local/etc/usbip
echo 1-1 > /usr/local/etc/usbip/usbip-server.conf

Jetzt können Sie usbipd mit systemd starten:

systemctl start usbipd

Mit

usbip list -r localhost

sollten nach dem Start die exportierten Geräte angezeigt werden.

Um den Dämon zu stoppen benutzen Sie

systemctl stop usbipd

Wenn Sie jetzt usbip list benutzen, sollten Sie eine Fehlermeldung bekommen:

usbip list -r localhost
usbip: error: could not connect to localhost:3240: System error

Um systemd zu sagen, dass der Dämon beim Systemstart automatisch gestartet werden soll, benutzen Sie

systemctl enable usbipd

Mit

systemctl disable usbipd

deaktivieren Sie den automatischen Start wieder.

Client

Auf dem Client müssen sie wieder usbip und hwdata installieren:

apt install usbip hwdata

Note

Unter Ubuntu müssen Sie statt usbip das Paket linux-tools-generic installieren:

apt install linux-tools-generic hwdata

Dann müssen Sie das Kernel-Modul vhci-hcd laden:

modprobe vhci-hcd

Wenn Sie es automatisch beim Systemstart laden wollen, fügen Sie es zur Datei ` /etc/modules` hinzu:

echo 'usbip_host' >> /etc/modules

Wenn auf dem Rechner mein-rechner ein usbipd läuft, können Sie mit

usbip list -r mein-rechner

nachschauen, welche Geräte der Rechner exportiert. Mit

usbip attach -r mein-rechner -b 1-1

können Sie das Gerät mit der Bus-ID 1-1 von Rechner mein-rechner importieren und dann benutzen, als ob es lokal angeschlossen wäre.

Um alle importierten Geräte anzuzeigen, benutzen Sie

usbip port

Das Gerät mit der Port-ID 0 entfernen können Sie mit

usbip detach -p 0

Die Port-ID entnehmen Sie der Ausgabe von usbip port

Bei Problemen hilft es manchmal, das Kernel-Modul vhci-hcd neu zu laden:

modprobe -r vhci-hcd
modprobe vhci-hcd

Downloads

usbip-bind

Last modified:

2021-12-31 22:57:58

Size:

684

MD5:

50ecc19bff2a59887cc5999d0f61253a

SHA256:

401b8073e8426a4d6242795b08ff32b61e8f289d8bfc20a937b0cad185565f11

GPG signature:

usbip-bind.gpg

usbipd.service

Last modified:

2021-12-31 22:57:58

Size:

229

MD5:

1a372ab3324974bf7b5fe3b072e126fd

SHA256:

93fee7289b02a7ff3f2d6d0d6588c8cc003a5c7f7259c10d3835f8bd138b855b

GPG signature:

usbipd.service.gpg