USB/IP – Ein USB Gerät im LAN freigeben

Die Idee kam mir, als ich einen DVB-T2 Stick an meinen Server (TVHeadend) anschließen wollte. Da ich über keine Dachantenne verfüge, bin ich auf eine Zimmerantenne beschränkt. Leider ist der Empfang in dem Raum in dem sich der Server befindet mehr als bescheiden. Da ich kein Antennenkabel quer durch die ganze Wohnung ziehen wollte, musste eine andere Lösung her.

Darum reaktivierte ich einen ausrangierten Raspberry Pi 2B, um mit diesem per USB/IP einfach den DVB-T2 Stick mit dem Server zu verbinden. Somit bin ich bei der Positionierung der Zimmerantenne völlig frei (WLAN auf dem RPi vorausgesetzt).

Auch wenn ich die Anleitung an diesem Beispiel festmache, sollte es prinzipiell mit jedem USB Gerät funktionieren.
Da ich fast ausnahmslos Gentoo auf meinen Geräten einsetze, beziehen sich alle Installationsroutinen auf diese Distribution. Das Konzept sollte aber auf andere Distributionen übertragbar sein.

Testaufbau

  • USB/IP – Client – PC-Engines APU2 mit installiertem Gentoo Linux (Kernel: 4.18.14-gentoo / IP: 192.168.3.2)
  • USB/IP – Server – RPi 2B mit installiertem Gentoo Linux (Kernel: 4.14.76-v7 / RPi Git Version IP: 192.168.3.52)
  • Hauppage WinTV-dualHD Stick (USB ID: 2040:0265)
  • USBIP Version 4.13

Einrichtung Server

Man installiert auf dem Server das Paket USBIP:

emerge net-misc/usbip

Nun muss der Kernel entsprechend konfiguriert werden. Der Kernel des Servers muss nicht das angeschlossene und zu teilende USB Gerät unterstützen! Das wird erst auf der Client Seite notwendig.

<Device Drivers> 
    <*> USB support
        <*>   USB/IP support
           < >     VHCI hcd
           <*>     Host driver

Ist die Installation abgeschlossen und das Gerät mit dem entsprechen konfigurierten Kernel gestartet, geht es an die Einrichtung von USBIP.
Zuerst sorgt man dafür das das zu teilende Gerät auch eingesteckt ist und lässt sich die angeschlossen Geräte anzeigen:

usbip list -l

Das sollte nun alle angeschlossen Geräte auflisten.

- busid 1-1.1 (0424:ec00)
  Standard Microsystems Corp. : SMSC9512/9514 Fast Ethernet Adapter (0424:ec00)

- busid 1-1.4 (2040:0265)
  Hauppauge : unknown product (2040:0265)

Was wir nun brauchen um das Gerät freizugeben ist die ‚busid‘. In meinem Fall ist das die ‚1-1.4‘.

Man bindet nun das Gerät ein, welches freigeben werden soll:

usbip bind -b 1-1.4

Wenn alles funktioniert hat, sollte eine Info ausgegeben werden, dass der Vorgang erfolgreich war:

usbip: info: bind device on busid 1-1.4: complete

Ist alles soweit eingerichtet muss der USBIP Daemon gestartet werden:

usbipd -D

Der Parameter ‚-D‘ lässt ‚usbipd‘ im Hintergrund als Daemon laufen.

Nun können Clients auf das Gerät zugreifen. Es gilt zu beachten das USBIP keine Rechteverwaltung besitzt. Jeder im lokalen Netzwerk kann nun auf das Gerät zugreifen.

Einrichtung Client

Man installiert USBIP auf der Client Maschine:

emerge net-misc/usbip

Nun muss der Kernel entsprechend konfiguriert werden. Achtung – zusätzlich müssen auf der Client Maschine auch die passenden Kernel Module für das USB Gerät vorhanden sein!

<Device Drivers> 
    <*> USB support
        <*>   USB/IP support
           <*>     VHCI hcd
           (8)       Number of ports per USB/IP virtual host controller (NEW)
           (1)       Number of USB/IP virtual host controllers (NEW)
           < >     Host driver

Ist alles soweit konfiguriert kann man nun das entfernte USB Gerät einbinden. Dafür gibt man folgenden Befehl ein (‚-r xxx.xxx.xxx.xxx‘ ist die IP-Adresse des USBIP-Servers und ‚-b x-x.x‘ ist die BusID des freigegebenen USB Geräts auf dem Server):

usbip attach -r 192.168.3.52 -b 1-1.4

Nun sollte man mit folgendem Befehl überprüfen, ob das Gerät richtig eingebunden wurde:

usbip port

Das sollte folgende Ausgabe liefern:

Imported USB devices
====================
Port 00: <Port in Use> at High Speed(480Mbps)
       Hauppauge : unknown product (2040:0265)
       4-1 -> usbip://192.168.3.52:3240/1-1.4
           -> remote bus/dev 001/009

Nun kann das Gerät auf den Client verwendet werden.

Automatisierung

Leider ist die Einrichtung von USBIP nicht dauerhaft. Nach einem Neustart der einzelnen Systeme ist eine erneute Freigabe und Einbindung notwendig.
Um den Prozess zu automatisieren habe ich auf dem Server ein Shell Script erstellt ( /etc/local.d/usbipd.start ) welches beim Systemstart ausgeführt wird.

Das Script setzt voraus, dass das zu teilende USB-Gerät immer im gleichen Port steckt! Ändert sich der Port ist das Script dahingehend anzupassen.

Auf den Client dann das selbe Schauspiel (/etc/local.d/usbip.start):

#!/bin/bash
usbip attach -r 192.168.3.52 -b 1-1.4

Auch hier gilt, wenn sich die IP des Servers oder die BusID des Geräts ändern, muss das entsprechend angepasst werden!

Fazit

Mit USBIP kann man recht simpel ein USB-Gerät über das lokale Netzwerk freigeben. Gerade in meinem Fall hat es mir das Verlegen von Kabeln im ganzen Haus erspart.
Sicherlich kann man gerade die Automatisierung verbessern, aber so funktioniert es recht unkompliziert bei mir.

Hiermit ist dieses Tutorial abgeschlossen. Ich hoffe es war hilfreich für euch! Wenn Ihr mich unterstützen wollt, könnt ihr das sehr gerne hier tun.

Leave a Reply

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.