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:~ #


Share this page:

1 Comment(s)

Add comment

Please register in our forum first to 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.