USB passthrough with Tripp Lite USB 2.0 over Cat5


Recommended Posts

I'm having an issue with USB Passthrough of a Tripp Lite USB 2.0 over Cat5.

 

Here's the rundown:

1) The device is basically a USB NIC that talks over an ethernet cable to a usb hub on the other side of the network cable.

2) The device shows up in an ssh session with lsusb resulting in:

Bus 003 Device 013: ID 0b95:1780 ASIX Electronics Corp. AX88178

3) The device works fine with my Win 8.1 Pro Surface tablet.

4) I can see the device with the same driver in my Win 8.1 VM, except the device cannot start (Code 10).

5) Even though I can see it using an lsusb call, in VMman, the device shows up as Device: Blank, Identification: Blank, Driver: none, Vendor: Unknown, Product: Unknown.

6) I've done all the basic troubleshooting (restarting host, restarting VM, reinstalling drivers, trying different drivers, etc.)

 

I *think* it has to do with the USB controller in my XML settings.

 

<domain type='kvm' id='2'>

  <name>Gaming</name>

  <uuid>50c291fb-b433-a522-fae8-fb576a964cc7</uuid>

  <memory unit='KiB'>19531776</memory>

  <currentMemory unit='KiB'>19531252</currentMemory>

  <vcpu placement='static'>4</vcpu>

  <resource>

    <partition>/machine</partition>

  </resource>

  <os>

    <type arch='x86_64' machine='pc-i440fx-2.1'>hvm</type>

    <boot dev='hd'/>

    <boot dev='cdrom'/>

    <bootmenu enable='yes' timeout='3000'/>

  </os>

  <features>

    <acpi/>

    <apic/>

    <pae/>

  </features>

  <clock offset='localtime'>

    <timer name='rtc' tickpolicy='catchup'/>

    <timer name='pit' tickpolicy='delay'/>

    <timer name='hpet' present='yes'/>

  </clock>

  <on_poweroff>destroy</on_poweroff>

  <on_reboot>restart</on_reboot>

  <on_crash>restart</on_crash>

  <devices>

    <emulator>/usr/bin/qemu-system-x86_64</emulator>

    <disk type='file' device='cdrom'>

      <driver name='qemu' type='raw'/>

      <source file='/mnt/cache/iso/Win81Pro.iso'/>

      <backingStore/>

      <target dev='hdc' bus='ide'/>

      <readonly/>

      <alias name='ide0-1-0'/>

      <address type='drive' controller='0' bus='1' target='0' unit='0'/>

    </disk>

    <disk type='file' device='cdrom'>

      <driver name='qemu' type='raw'/>

      <source file='/mnt/cache/iso/virtio-win-0.1-81.iso'/>

      <backingStore/>

      <target dev='hdd' bus='ide'/>

      <readonly/>

      <alias name='ide0-1-1'/>

      <address type='drive' controller='0' bus='1' target='0' unit='1'/>

    </disk>

    <disk type='block' device='disk'>

      <driver name='qemu' type='raw'/>

      <source dev='/dev/disk/by-id/ata-Samsung_SSD_840_PRO_Series_S1ATNSAF906981Z'/>

      <backingStore/>

      <target dev='hdc' bus='virtio'/>

      <alias name='virtio-disk2'/>

      <address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x0'/>

    </disk>

    <controller type='usb' index='0'>

      <alias name='usb0'/>

      <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x2'/>

    </controller>

    <controller type='pci' index='0' model='pci-root'>

      <alias name='pci.0'/>

    </controller>

    <controller type='ide' index='0'>

      <alias name='ide0'/>

      <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x1'/>

    </controller>

    <interface type='bridge'>

      <mac address='52:54:00:15:fb:47'/>

      <source bridge='br0'/>

      <target dev='vnet0'/>

      <model type='virtio'/>

      <alias name='net0'/>

      <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>

    </interface>

    <serial type='pty'>

      <source path='/dev/pts/0'/>

      <target port='0'/>

      <alias name='serial0'/>

    </serial>

    <console type='pty' tty='/dev/pts/0'>

      <source path='/dev/pts/0'/>

      <target type='serial' port='0'/>

      <alias name='serial0'/>

    </console>

    <input type='tablet' bus='usb'>

      <alias name='input0'/>

    </input>

    <input type='mouse' bus='ps2'/>

    <input type='keyboard' bus='ps2'/>

    <graphics type='vnc' port='5900' autoport='yes' websocket='5700' listen='0.0.0.0'>

      <listen type='address' address='0.0.0.0'/>

    </graphics>

    <video>

      <model type='cirrus' vram='9216' heads='1'/>

      <alias name='video0'/>

      <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/>

    </video>

    <hostdev mode='subsystem' type='usb' managed='no'>

      <source>

        <vendor id='0x0b95'/>

        <product id='0x1780'/>

        <address bus='3' device='6'/>

      </source>

      <alias name='hostdev0'/>

    </hostdev>

    <memballoon model='virtio'>

      <alias name='balloon0'/>

      <address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x0'/>

    </memballoon>

  </devices>

</domain>

Link to comment

I tried adding the following for preparation of adding a GPU passthrough on this same VM, thinking maybe theses USB controllers would help and the XML saves successfully, but when I go to start the VM, it simply says "error"

 

		<controller type='usb' index='0' model='ich9-ehci1'>
		<alias name='usb0'/>
		<address type='pci' domain='0x0000' bus='0x02' slot='0x01' function='0x7'/>
	</controller>
	<controller type='usb' index='0' model='ich9-uhci1'>
		<alias name='usb0'/>
		<master startport='0'/>
		<address type='pci' domain='0x0000' bus='0x02' slot='0x01' function='0x0' multifunction='on'/>
	</controller>
	<controller type='usb' index='0' model='ich9-uhci2'>
		<alias name='usb0'/>
		<master startport='2'/>
		<address type='pci' domain='0x0000' bus='0x02' slot='0x01' function='0x1'/>
	</controller>
	<controller type='usb' index='0' model='ich9-uhci3'>
		<alias name='usb0'/>
		<master startport='4'/>
		<address type='pci' domain='0x0000' bus='0x02' slot='0x01' function='0x2'/>
	</controller>

Link to comment

Those USB-over-Ethernet adapters have been the cause of all of my USB passthrough issues.  They would randomly disconnect/reset and cause the attached device (flirc in my case) to obtain a new device ID.  I have since moved away from them and got active USB extension cables and have not had a single issue.

 

I think I mention it here:  http://lime-technology.com/forum/index.php?topic=36508.0

 

John

Link to comment

So of course I decide to keep messing around after I've already started the Amazon return process and purchased new Active USB extenders.  Turns out, it was the controller issue I originally thought it was.  To get around the vague "error" messages I was getting when trying to start my VM after changes,  I started my vm using virsh create on CLI. This would give me a more detailed error on what was failing, but unfortunately, this destroys the xml file, so it was a good thing I kept a backup. 

 

Long story short, adding the <controller> parts, recommended in Jonp's KVM passthrough pointers post, allowed the USB over cat5 to start properly within Windows.  As an aside, I had to remove all of the <address> portions, otherwise there were conflicts and the XML wouldn't save. 

 

The USB extender software that I needed to install on my Windows VM picked up my Razer Copperhead mouse, and HP keyboard right away.  I'm curious to see performance with my Logitech G930 headset tonight when I get home.

 

The USB over Cat5 extender that I'm using is the Tripp Lite 4-port USB 2.0 over Cat5.  It remains to be seen if this is reliable.

 

The reason I wanted to go this route instead of Active USB extenders is I reaaaally didn't want to run new USB cabling through my house, and if I got this to work, since it's a single device on the host side, anything I plug in on the remote side will show up without having to reboot the vm.  I need to test this further, but so far this appears to be true.

 

If anyone has any questions, let me know.  Here's my working XML.  Going to be adding a new vid card tonight for GPU passthrough.

 

<domain type='kvm' id='24'>
  <name>Gaming</name>
  <uuid>50c291fb-b433-a522-fae8-fb576a964cc7</uuid>
  <memory unit='KiB'>17301504</memory>
  <currentMemory unit='KiB'>4000000</currentMemory>
  <vcpu placement='static'>4</vcpu>
  <resource>
    <partition>/machine</partition>
  </resource>
  <os>
    <type arch='x86_64' machine='pc-q35-2.1'>hvm</type>
    <boot dev='hd'/>
    <boot dev='cdrom'/>
    <bootmenu enable='yes' timeout='3000'/>
  </os>
  <features>
    <acpi/>
    <apic/>
    <pae/>
  </features>
  <cpu mode='host-passthrough'>
    <topology sockets='2' cores='2' threads='1'/>
  </cpu>
  <clock offset='localtime'>
    <timer name='rtc' tickpolicy='catchup'/>
    <timer name='pit' tickpolicy='delay'/>
    <timer name='hpet' present='yes'/>
  </clock>
  <on_poweroff>destroy</on_poweroff>
  <on_reboot>restart</on_reboot>
  <on_crash>restart</on_crash>
  <devices>
    <emulator>/usr/bin/qemu-system-x86_64</emulator>
    <disk type='block' device='disk'>
      <driver name='qemu' type='raw'/>
      <source dev='/dev/disk/by-id/ata-Samsung_SSD_840_PRO_Series_S1ATNSAF906981Z'/>
      <backingStore/>
      <target dev='hdc' bus='virtio'/>
      <alias name='virtio-disk2'/>
      <address type='pci' domain='0x0000' bus='0x02' slot='0x02' function='0x0'/>
    </disk>
    <controller type='sata' index='0'>
      <alias name='sata0'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x1f' function='0x2'/>
    </controller>
    <controller type='pci' index='0' model='pcie-root'>
      <alias name='pcie.0'/>
    </controller>
    <controller type='pci' index='1' model='dmi-to-pci-bridge'>
      <alias name='pci.1'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x1e' function='0x0'/>
    </controller>
    <controller type='pci' index='2' model='pci-bridge'>
      <alias name='pci.2'/>
      <address type='pci' domain='0x0000' bus='0x01' slot='0x01' function='0x0'/>
    </controller>
    <controller type='usb' index='0' model='ich9-ehci1'>
      <alias name='usb0'/>
      <address type='pci' domain='0x0000' bus='0x02' slot='0x04' function='0x7'/>
    </controller>
    <controller type='usb' index='0' model='ich9-uhci1'>
      <alias name='usb0'/>
      <master startport='0'/>
      <address type='pci' domain='0x0000' bus='0x02' slot='0x04' function='0x0' multifunction='on'/>
    </controller>
    <controller type='usb' index='0' model='ich9-uhci2'>
      <alias name='usb0'/>
      <master startport='2'/>
      <address type='pci' domain='0x0000' bus='0x02' slot='0x04' function='0x1'/>
    </controller>
    <controller type='usb' index='0' model='ich9-uhci3'>
      <alias name='usb0'/>
      <master startport='4'/>
      <address type='pci' domain='0x0000' bus='0x02' slot='0x04' function='0x2'/>
    </controller>
    <interface type='bridge'>
      <mac address='52:54:00:15:fb:47'/>
      <source bridge='br0'/>
      <target dev='vnet0'/>
      <model type='virtio'/>
      <alias name='net0'/>
      <address type='pci' domain='0x0000' bus='0x02' slot='0x01' function='0x0'/>
    </interface>
    <serial type='pty'>
      <source path='/dev/pts/2'/>
      <target port='0'/>
      <alias name='serial0'/>
    </serial>
    <console type='pty' tty='/dev/pts/2'>
      <source path='/dev/pts/2'/>
      <target type='serial' port='0'/>
      <alias name='serial0'/>
    </console>
    <input type='mouse' bus='ps2'/>
    <input type='keyboard' bus='ps2'/>
    <graphics type='vnc' port='5900' autoport='yes' websocket='5700' listen='0.0.0.0'>
      <listen type='address' address='0.0.0.0'/>
    </graphics>
    <video>
      <model type='cirrus' vram='9216' heads='1'/>
      <alias name='video0'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x0'/>
    </video>
    <hostdev mode='subsystem' type='usb' managed='no'>
      <source>
        <vendor id='0x0b95'/>
        <product id='0x1780'/>
        <address bus='3' device='6'/>
      </source>
      <alias name='hostdev0'/>
    </hostdev>
    <memballoon model='virtio'>
      <alias name='balloon0'/>
      <address type='pci' domain='0x0000' bus='0x02' slot='0x03' function='0x0'/>
    </memballoon>
  </devices>
</domain>

Link to comment

Here's an update after testing, so that people know what to expect with the Tripp Lite 4-port USB 2.0 over cat5.

 

1) The local device is a usb to gigabit nic.  The remote side is a usb server hub.  There is a program that starts at logon that makes the connection to the remote hub.  This prevents you from being able to login with devices on the extended hub.  Why they didn't design it as a service instead of an application is beyond me.  This won't be an issue if you have auto-logon.

2) It did not work with my Logitech G930 gaming headset.  I thought this might be an issue as their specs did explain that it does not work with isochronous data transfers (items such as cameras and speakers sometimes use this).  As I couldn't find any mention one way or another on Logitech's website, I figured I'd give it a shot.  Once I plugged in the wireless headset adapter usb, it broke the mouse and keyboard from working.

3) When the headset wasn't plugged in, and I was logged on, the keyboard and mouse worked flawlessly for the time that I used it.  At that point, though, I didn't really need a USB 2.0 extender, which made the purchase unnecessarily expensive ($150).

 

I'm returning this cat5 extender, going with some active usb extenders, and running them through my house this weekend.  I plan on putting a powered hub on the other end.

 

Link to comment

+1 on the usb extenders+powered hub. I use the 40+ ft Monoprice version and they work quite well.

 

Here's an update after testing, so that people know what to expect with the Tripp Lite 4-port USB 2.0 over cat5.

 

1) The local device is a usb to gigabit nic.  The remote side is a usb server hub.  There is a program that starts at logon that makes the connection to the remote hub.  This prevents you from being able to login with devices on the extended hub.  Why they didn't design it as a service instead of an application is beyond me.  This won't be an issue if you have auto-logon.

2) It did not work with my Logitech G930 gaming headset.  I thought this might be an issue as their specs did explain that it does not work with isochronous data transfers (items such as cameras and speakers sometimes use this).  As I couldn't find any mention one way or another on Logitech's website, I figured I'd give it a shot.  Once I plugged in the wireless headset adapter usb, it broke the mouse and keyboard from working.

3) When the headset wasn't plugged in, and I was logged on, the keyboard and mouse worked flawlessly for the time that I used it.  At that point, though, I didn't really need a USB 2.0 extender, which made the purchase unnecessarily expensive ($150).

 

I'm returning this cat5 extender, going with some active usb extenders, and running them through my house this weekend.  I plan on putting a powered hub on the other end.

Link to comment

relectant,

 

I know that this does not apply to your application but figured I would mention it as it may help other avoid long USB runs.

 

If your USB devices that you want to attach to your VMs are merely remote control IR receivers (i.e. flircs), you could always op to get an IF-RF converter like this:  http://www.amazon.com/Next-Generation-Remote-Control-Extender/dp/B000C1Z0HA/ref=sr_1_1?ie=UTF8&qid=1418297050&sr=8-1&keywords=ir+rf+converter

 

I have never tried this but it gets really good reviews.  I'm starting to wish I went this route first.

 

John

Link to comment

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.