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¶
Last modified: |
2021-12-31 22:57:58 |
Size: |
684 |
MD5: |
50ecc19bff2a59887cc5999d0f61253a |
SHA256: |
401b8073e8426a4d6242795b08ff32b61e8f289d8bfc20a937b0cad185565f11 |
GPG signature: |
Last modified: |
2021-12-31 22:57:58 |
Size: |
229 |
MD5: |
1a372ab3324974bf7b5fe3b072e126fd |
SHA256: |
93fee7289b02a7ff3f2d6d0d6588c8cc003a5c7f7259c10d3835f8bd138b855b |
GPG signature: |