Software: USB device redirector over IP
There are several pieces of client/server software that solve the problem of USB device redirect, but I could only find a single decent one that was open source; simply, USBIP.
Unfortunately, I’m sure they’d be happy to have someone write it, there is no Windows Kernel driver that is part of the USBIP project, so there is only a Windows USBIP client that can connect to USB devices served off of Linux.
Two major trustworthy, yet hacky, software shops released products to solve the USB device redirection issue: Eltima and FabulaTech. Cheesy company names aside, from the research I performed, it turns out that these look like the only two of the few products that allow the “serving” of USB devices off a Windows host that look like they weren’t developed by one man shops.
I have yet to test FabulaTech’s software, but Eltima’s does not allow more than one client to be connected to a served device at one time. This also means that the device becomes unavailable on the serving host when it is served out. I can imagine that this is a nearly impossible task to solve, picturing the idea of an I/O device trying to spit data to and from a system that didn’t request it. That should make the Kernel panic. A scripting API and/or a global hotkey feature would be great to allow a user to easily serve and un-serve a device. Hopefully you can configure the client to poll a server repeatedly at a set interval.
Eltima’s software does provide two great features: a password to connect to a device served, and encryption.
HP’s RGS is another solution which provides USB redirection as follows:
Remote USB for the RGS Receiver can be configured in one of three modes: Local USB devices are to be used exclusively on the local system. USB devices plugged into the Receiver system will not be "exported" to the Sender. Remote USB devices are to be used exclusively on the Sender system. USB devices plugged into the Receiver system will not be available for use on the Receiver. This is the case even when the Receiver is not connected to a Sender. This mode is recommended for Thin Clients. Local/Remote USB devices plugged into the Receiver system while the Receiver is not connected to a Sender will be used on the Receiver system. USB devices plugged in after the Receiver has connected to a Sender will be "exported" to the Sender. Local devices will not be exported for remote use unless they are are unplugged and plugged back in while the Receiver is connected to a Sender. Exported devices will not be available for local use unless they are are unplugged and plugged back in while the Receiver is not connected to a Sender. This mode is recommended for Workstations.
So, this isn’t a magic bullet either, but at least you could programmatically trigger a disconnect/reconnect of the device you wish to have mounted remotely after the connection occurs.
It seems like a tough situation to solve, yet RDP does it so elegantly. Finally, we turn our sites on RDP, and it’s underlying device magic, RemoteFX.
The Remote Desktop API is still available, but was packaged with Live Meeting and then SharedView in the Windows Vista client. It appears that this might be the best way to handle the situation. Too bad there aren’t any private solutions available.