iX 2/2016
S. 137
Praxis
Tools & Tipps
Aufmacherbild

Mit USB/IP Peripheriegeräte im LAN nutzen

Lange Leitung

USB hat sich längst zur generischen Schnittstelle fast aller Peripheriegeräte gemausert. Wer sie aber übers Netz nutzen möchte, muss tricksen – oder auf USB/IP zurückgreifen.

Multifunktionsgeräte, 3D-Drucker oder Prozessrechner – Geräte, die auf andere Schnittstellen als USB setzen, sind so gut wie ausgestorben. Doch der Standard beschränkt die maximale Kabellänge und sieht Routing nicht vor. Wer USB-Hardware aus großer Distanz ansprechen möchte, kann unter Linux und Windows auf USB/IP zurückgreifen – vorausgesetzt, er schließt das USB-Gerät an einen Linux-Rechner an.

Etwa im Jahr 2005 begann eine japanische Forschergruppe mit ersten Versuchen, Ethernet als Übertragungsmedium für USB zu nutzen (siehe „Alle Links“). Nach einigen Jahren als SourceForge-Projekt fanden die daraus entstandenen Treiber usbip Ende 2014 Eingang in die Mainline des Linux-Kernels 3.17.

Im Protokollstack des exportierenden Servers fängt der Stub-Treiber den Gerätezugriff ab und lenkt die Kommunikation zum Client um.

USB/IP orientiert sich bis heute am 2005 festgelegten Konzept (siehe Abbildung). Ein Fake-Gerätetreiber erbeutet die von den unteren Treiberebenen des USB-Stacks angelieferten Pakete und schiebt sie übers LAN Richtung Zielsystem. Im dortigen Treiberstack arbeitet seine Gegenstelle, die die eingehenden Pakete wieder in den USB-Workflow einspeist.

Ubuntu etwa bringt die erforderlichen Pakete ab 14.10 mit, Debian ab der Version 6 (Squeeze). Auch die auf RPM setzenden Linux-Distributionen haben die Treibermodule und Werkzeuge an Bord. Ist alles da, sind die passenden Kernel-Module usbip_host, vhci_hcd und usbip_core zu laden. Da die ersten beiden usbip_core benötigen, lädt modprobe usbip-host; modprobe vhci-hcd Letzteren gleich mit. Der für das Bereitstellen der USB-Geräte zuständige Dämon lässt sich durch Eingabe von usbipd –D starten. usbip list l listet die lokale USB-Hardware samt ihrer jeweiligen busid auf. Im Netz bereitstellen und damit für die Allgemeinheit freigeben kann man einzelne Geräte mit dem Befehl usbip bind –b <busid>.

Ab diesem Zeitpunkt lauscht usbipd auf Port 3240 und wartet auf Anfragen. Beenden lässt sich die Beziehung zwischen usbip und Gerät durch den Befehl usbip unbind –b <busid>. Bis dahin steht das Device unter exklusiver Verwendung des usbip und damit der lokalen Software nicht mehr zur Verfügung.

Clients existieren für Linux und Windows. Aufseiten des Linux-Clients ist das usbip-Paket ebenfalls erforderlich. Als Kernel-Modul ist hier lediglich vhci-hcd mit modprobe vhci-hcd zu laden. Der Dämon muss in dem Fall nicht gestartet werden. Stattdessen durchsucht man einfach den USB/IP-Server nach exportierten Geräten mit usbip list –r <server|ip-adresse>. Danach kann man jedes einzelne Device mit usbip attach –r <server|ip-adresse> –b <busid> einbinden.

Client bei Fuß

Der Windows-Client unterscheidet sich in der Syntax etwas vom Linux-Gegenstück. Er möchte, dass der Anwender ihn auf der cmd mit usbip –l <server|ip-adresse> auffordert, die exportierten Geräte aufzulisten und mit usbip –a <server|ip-adresse> <busid> das gewünschte Device zu importieren.

Da es auf dem Client als lokales USB-Gerät erscheint, kann jede Software auf dem System darauf zugreifen. Im Fall eines Multifunktionsgeräts von HP lief die Installation per hp-setup auf dem Linux-Client ohne Klagen durch. SimpleScan konnte es auch über WLAN ansprechen, arbeitete ob der hohen Latenz aber um den Faktor 4 bis 6 langsamer und beklagte sich zeitweise über Timeouts. Per Ethernet funktionierten Scans besser.

USB/IP kennt derzeit keinerlei Nutzerverifikation. Wer auch immer Kontakt mit dem Dämon aufnimmt, gilt als nutzungsberechtigt. Deshalb sollte das Netz gut abgesichert und die Firewall korrekt konfiguriert sein.

Ob der Stack mit der jeweiligen Hardware wirklich funktioniert, hängt auch vom Netz ab. Laut einem Benchmark der Entwickler halbiert sich die Transferrate bei einer Steigerung der Latenz um eine Millisekunde. Zudem hat auch die Treibersoftware mitzureden: Wenn die Anwendung die Kommunikation bei größeren Verzögerungen abbricht, wird sie mit USB/IP nicht zusammenarbeiten. Dass eine schnelle Verbindung zwischen den beiden Hosts die Wahrscheinlichkeit einer reibungslosen Kooperation erhöht, folgt aus der Logik. Denn USB ist als Kommunikationsstandard für latenzfreie Kabel vorgesehen. (sun)