How To Set Up A USB-Over-IP Server And Client With OpenSUSE 11.2 - Page 2

3 Installing And Using USB/IP On The Client


First we must install usbip on the client. The steps are the same as on the server:

yast2 -i usbip

usbip expects the file containing the list of known USB devices (usb.ids) in the directory /usr/share/hwdata, but on OpenSUSE 11.2 it's located in /usr/share/usbip/usb.ids - therefore we create a symlink:

mkdir /usr/share/hwdata
ln -sf /usr/share/usbip/usb.ids /usr/share/hwdata/

Afterwards we load the vhci-hcd kernel module:

modprobe vhci-hcd

To check if it really got loaded, run:

lsmod | grep vhci_hcd

The output should be similar to this one:

client1:~ # lsmod | grep vhci_hcd
vhci_hcd               26576  0
usbip_common_mod       25232  1 vhci_hcd
client1:~ #

To make sure that the module gets loaded automatically whenever you boot the system, you can add it to the MODULES_LOADED_ON_BOOT line in /etc/sysconfig/kernel:

vi /etc/sysconfig/kernel

## Type:                string
## ServiceRestart:      boot.loadmodules
# This variable contains the list of modules to be loaded
# once the main filesystem is active
# You will find a few default modules for hardware which
# can not be detected automatically.




Now connect to the usbip server and get a list of available USB devices:

usbip -l

( is the IP address of the usbip server.)

You should find the SanDisk USB flash drive in the output (BUSID 2-5):

client1:~ # usbip -l
     2-5: SanDisk Corp. : Cruzer Micro 256/512MB Flash Drive (0781:5151)
        : /sys/devices/pci0000:00/0000:00:04.1/usb2/2-5
        : (Defined at Interface level) (00/00/00)
        :  0 - Mass Storage / SCSI / Bulk (Zip) (08/06/50)

client1:~ #

To attach that device to the client, run:

usbip -a 2-5

client1:~ # usbip -a 2-5
8 ports available

port 0 attached
client1:~ #

Now run...


... and you should find the remote USB device in the output on the client:

client1:~ # lsusb
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 001 Device 004: ID 0781:5151 SanDisk Corp. Cruzer Micro Flash Drive
client1:~ #

You can now use the remote USB device as if it was a local USB device (e.g. mount it, format it, write to it, read form it, etc.).


4 Detaching A Remote USB Device

A remote USB device can be detached as follows:



usbip --port

... to find out the port that the remote USB device uses on the client - in this case it's port 00:

client1:~ # usbip --port
8 ports available

Port 00: <Port in Use> at High Speed(480Mbps)
       SanDisk Corp. : Cruzer Micro 256/512MB Flash Drive (0781:5151)
       1-1 -> usbip://  (remote devid 00020002 (bus/dev 002/002))
       1-1:1.0 used by usb-storage
Port 01: <Port Available>
Port 02: <Port Available>
Port 03: <Port Available>
Port 04: <Port Available>
Port 05: <Port Available>
Port 06: <Port Available>
Port 07: <Port Available>
client1:~ #

We need the port number to detach the device:

usbip -d 00

client1:~ # usbip -d 00
8 ports available

port 0 detached
client1:~ #

On the server, we use the BUSID (2-5) to bind the USB device to the local system (the --other switch binds the device to the local system so that it is not available over the network anymore):


bind_driver --other 2-5

server1:~ # bind_driver --other 2-5
** (process:3484): DEBUG: write "del 2-5" to /sys/bus/usb/drivers/usbip/match_busid
** Message: bind 2-5 to other drivers than usbip, complete!

Now go back to the client and check if the remote USB device is still available:



If all goes well, it shouldn't be listed anymore:

client1:~ # lsusb
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
client1:~ #


Falko Timme

About Falko Timme

Falko Timme is an experienced Linux administrator and founder of Timme Hosting, a leading nginx business hosting company in Germany. He is one of the most active authors on HowtoForge since 2005 and one of the core developers of ISPConfig since 2000. He has also contributed to the O'Reilly book "Linux System Administration".

Share this page:

Suggested articles

1 Comment(s)

Add comment


By: D-cat

I found the repo compiles not functioning for me and so installed from source. After that, when I did manage to make the connection work, I tried to link a webcam. While the protocol functions seemed to work and the camera did turn on, the data transport lost almost everything. Aside from a few corner flashes of green indicating that it was trying, there was no picture. I ended up going back to using remote execution with NX. It's slower, but it works reliably. I am interested in this project and hope it can evolve to work well with real-time applications such as webcams.