Citrix USB Composite device splitting with IGEL OS – the WHY and HOW! Digital Dictation and more..

By Fredrik Brattstig @virtualbrat

Is a USB device a USB device? Yepp, it sure is, but one USB device to the human eye can actually be multiple USB devices, it’s just that all devices are combined in one peripheral and one cable. Looking at a dictation device, for instance my Philips Speechmike III:

This is the Philips Speechmike III 3500, as you can see, it is one device and one cable. But this peripheral actually contains a mouse, an audio in, an audio out, (actually that is not true, it’s multiple audio in and out interfaces), and a keyboard like thing with all the buttons. Plus, it contains light controls. All of those addressable functions are combined into one single USB cable.

Digital dictation devices are used in healthcare allowing the clinician to speak and make a digital recording about ex a patient’s health condition. This is all technology that has many years of history, not really state of the art. Today there are options to do digital dictation and voice recognition using handheld wireless devices eg smartphone like equipment. But, as the dictation devices apparently is very robust, they have survived for quite some years, and lots of hospitals are still using them.

When it comes to use these devices in a VDI environment, the optimal solution is to use virtual channels and client side plus server-side applications that interact over the channel. This gives the best experience and least work to get ti set up. In IGEL OS it’s as easy as a checkbox or App installation of for instance the Philips extension, and possibly Nuance virtual channel, and match with the correct versions on your VDA and you are good to go with digital dictation in your VDI desktop. Though, in some use cases, like if there is a double hop scenarion (IGEL Endpoints-> VDI Desktop->Published dictation application, or the application running on your VDI desktop doesn’t support the virtual channels provided by the peripheral vendor, then “Slit Composite USB Redirection” might come in handy.

The concept of Split Composite USB Redirection is basically to break down the peripheral device into subcomponents. Looking at a Philips Speechmike III 3500 using the lsusb tool in IGEL OS you will get some information about the peripheral device. Here is a sample output from my IGEL OS 11 device with the Speechmike attached:

lsusb showing the USB devices connected to my system

The Philips Speechmike present itself with the Vendor ID (VID)=0911 and the Product ID (PID)= 0c1c. Great, now we know the VID and PID of the device we want to USB redirect.
Now, as we are about to split the device, by the way, why are we doing that?
The reason for the splitting of the device is that we know that this device contains multiple interfaces eg. Audio in, Audio out, Mouse and keyboard.
We want to leave the IGEL OS endpoint to be in charge of the Audio and Mouse interfaces, but we want to forward the keyboard (buttons). This is because Audio and mouse has dedicated virtual channels in the Citrix Workspace App, these interfaces are better suited to use the virtual channels to communicate between the endpoint and the VDI desktop. I just happen to know that the 4th interface on my Speechmike is the interface we want to forward. If you are uncertain, your dictation device manufacturer should know what interface that represents the buttons.
You can get a list of the interfaces by running lsusb -vv (very verbose list of USB devices):

The Philips Speechmike III present itself with the Vendor ID (VID)=0911 and the Product ID (PID)= 0c1c. Great, now we know the VID and PID of the device we want to USB redirect.
Now, as we are about to split the device, by the way, why are we doing that?
The reason for the splitting of the device is that we know that this device contains multiple interfaces eg. Audio in, Audio out, Mouse and keyboard.
We want to leave the IGEL OS endpoint to be in charge of the Audio and Mouse interfaces, but we want to forward the keyboard (buttons). This is because Audio and mouse has dedicated virtual channels in the Citrix Workspace App, these interfaces are better suited to use the virtual channels to communicate between the endpoint and the VDI desktop. I just happen to know that the 4th interface on my Speechmike is the interface we want to forward. If you are uncertain, your dictation device manufacturer should know what interface that represents the buttons.
You can get a list of the interfaces by running lsusb -vv (very verbose list of USB devices) (as you can see in the example below my command was lsusb -d 0911:0c1c -vv as it will only list my Speechmike III data):

OK, now we have a list of all the interfaces and its characteristics. the value bInterfaceNumber is what we are looking for. I can see that my Speechmike has 7 (0->6) interfaces and interface 3-6 is a HID interface. we get this by running the command lsusb -d 0911:0c1c -vv | grep -e bInterfaceNumber -e HID, sadly it doesn’t tell which ones is the buttons, and that’s why you need to find that information out from the vendor:


As i now know the VendorID, ProductID and i know that I need to split the device and only forward the buttons = Interface 4, how would i configure that on the IGEL OS endpoint?

Here is the configuration i made at Sessions->Citrix->Citrix Global->Native USB Redirection
First of all, I enable Native USB Redirection, and i set the default rule to Deny (Otherwise every USB device will be forwarded to the VDA), then i created a new device rule, where I set the Rule to “Connect” (The options are Allow or Connect. If i select Allow, the USB device will get mapped if it is inserted in the USB port after I connected my Citrix session, I choose Connect as that will allow the USB device to be forwarded if it is inserted in the USB port before connecting to my Citrix session.
I set the Vendor ID to 0911 and the Product ID to 0c1c, and then in the Extra Config i set split=01 intf=04 which tells that I want to split the deice and only forward interface number 4 to the VDA desktop.

Great! Now we have a good coverage on why and how to split Composite USB devices. This can be very useful to know when you have devices and/or applications that do not support the vendor dedicated virtual channels. Another example would be to do dictation in a double hop scenario. This can also be used to split eg. headsets with buttons, or any other USB device that has HID components.

To validate that I can control the Philips Speechmike III in my Citrix session, i have been using a test application provided by Philips in their Speechmike SDK. It’s called SPMikeCtl Test, and it will be able to detect the Speechmike, it will list any keys that are pressed and if the gyro detects lift up or laydown, and it will allow you to cycle the LED lights on the device. It will also be able to read information from the device firmware, like firmware version, model and serial number etc. It has a feature to flash the dictation devices firmware, but i have not tested this yet.

The above screenshots show the information in the Philips test app, and also shows the device mapped in Windows VDA while connected.

Read more at the Citrix Product Documentation: https://docs.citrix.com/en-us/citrix-workspace-app-for-linux/configure-xenapp.html#composite-usb-device-redirection

Thats it for today! Stay well!

/Fred