Hey dude wheres my virtual sound device – dude !!

A project to integrate skype with the Windows based PBX 3CX threw a bit of a curved ball this morning – but thankfully the answer was at hand. Having run a pilot with a couple of Linksys IP phones communicating with a Windows based PBX as mentioned – the time had come to set up a virtual machine running the software for an extended pilot. Having previous done all of this on a physical xp machine and having it all working – I was anticipating relatively few problems but two did crop up.

Firstly – when installing the digi usbanywhere drivers on this xp sp3 virtual machine – the installtion did not complete and the usb host controllers that should have been installed were marked with an exclamation.

Fix number one – from Digi web site

AnywhereUSB workaround for Virtual Machine installation. Status says “Connected to this computer” but the “AnywhereUSB Host Controller” in Device Manager has a yellow warning icon, error code 39.

Does the virtual machine have the file “USBD.SYS” in the “…system32drivers” folder? If not, the following workaround is required:

1. Make sure Windows is configured to show file extensions.

For XP, in My Computer, click “Tools / Folder Options” then click the “View” tab. Scroll down and uncheck “Hide extensions for known file types” (unless it’s already unchecked) then click OK. For Vista and Server 2008, go to “Computer”, click “Organize, Folder and Search Options” then click the “View” tab. Scroll down and uncheck “Hide extensions for known file types” (unless it’s already unchecked) then click OK.

2. Search the Windows disc that matches the virtual machine’s Operating System for the file “USBD.SY_”.

The exact location of “USBD.SY_” varies, depending on the Windows Operating System:

XP 32-bit: “i386” folder
XP 64-bit: “IA64” folder
Server 2003: “i386” folder
Server 2003 R2: “i386DRIVER.CAB”
Server 2008: “sourcesinstall.wim5WindowsSystem32drivers”
Vista: “sourcesinstall.wim5WindowsSystem32drivers”

3. Copy “USBD.SY_” and paste it in the “…system32drivers” folder on the virtual machine, then RENAME that file to “USBD.SYS”. Be sure to paste it in the “drivers” subfolder, not “system32”.

4. Reboot the virtual machine.

5. After Windows loads, the AnywhereUSB Host Controller(s) and AnywhereUSB/RealPortUSB Root Hub(s) component(s) in Windows Device Manager should successfully install automatically.

In my case I was able to pick up the missing file from the cache folder (make sure you search all folders – including system and hidden).

The other problem was the reason why I was looking for the ability to get usb devices to pick up on the virtual machine. The skype gateway function on the 3cX PBX requires skype – Skype requires an soundcard to install and operate correctly and VMWARE ESX  does not provide for virtual soundcards in virtual machines. Kind of a killer that but !!!

So in this case Fix number two was in order to satisfy the skype requirement for a sound device and the idea in this case was to provide a usb sound card via the USB Anywhere/5 unit that I tested a few weeks ago here and use a skype USB handset or other device to provide the sound for the 3cX skype gateway. Testing without the sound card made the call through the configured skype gateway but presented nothing but noise when the call connected. Once the usb anywhere issue in fix one was corrected – the vm was rebooted and then left to finish configuring – I usuall have a usb disk attached to the usb anywhere at first to confirm that the disk is recognised and accessible in the vm before trying a new device.

Plugging in the usb skype headset allowed it to be picked up and the drivers – which were cmedia and in xp already meant that I could see the device in windows control panel – and was able to test a call. The downside was that the USB skype phone that was being tested was not particular good quality and I though that the sound quality was unacceptable.


In this case it may be that an alternative device may be required – or that the usbanywhere / voip phone combination may not be robust enough for the particular application I am planning – so further testing may be required to confirm if this is a workable solution.