HeadsetControl
HeadsetControl copied to clipboard
Corsair virtuoso
cant get the corsair virtuoso to work added it like the other corsair headsets
I downloaded the iCUE software on my Macbook but it seems broken. Also some complaints from other users on the Corsair forums the past month about this. If anybody has a Windows PC, that would be helpful..
I need more information, like what OS you have, what you have tried (with sudo/without etc.), and what is the error message.
However it could be, that the virtuso has a different protocol. That would mean that it's protocol also has to be analyzed, like with the other devies.
@Sapd I'm running Ubuntu 18.04. I added the Virutoso device to corsair_void.c
following the Wiki instructions. Using sudo
, I can get most of the commands to return:
Found Corsair Void (Pro)!
Success!
The battery level command hangs indefinitely. No commands have any observable effect on the headset, so I figured probably different protocol.
Curiously, the device ID changed between when I looked at it yesterday and today. Possibly this is due to a firmware update from messing around with the iCUE mac software. The iCUE software barely works, so I'm not sure how to move forward with this in absence of a PC.
@Sapd I managed to get iCUE working when connected directly to the headset over USB. However, I'm having trouble making sense of the USB traffic and finding the pattern we need.
Using wireshark,
There's two URB CONTROL packets of length 40(submit) and 34(complete) that get sent out to the device everytime sidetone changes. But nothing changes between the packets except for the IO ID.
There's a lot of passive background traffic with byte lengths 32, 88, 288, and 96, but I can't really tell if these are related to the sidetone or not.
The 96 packet has 64 bytes of 'leftover capture data' which matches the message size I think you are sending with hid_send_feature_report
. But it says URB_INTERRUPT (completed) and matches a request with length 32.
I'm not sure how to go any further here. Any tips for me?
@nkconnor When I tried it in the past with Wireshark I had the issue of not seeing the packet payload. You have probably the same problem. Try it with usblyzer https://github.com/Sapd/HeadsetControl/wiki/Development
I think would have to look again into getting capturing working with wireshark and writing a wiki entry some time. There are probably scripts for capturing HID devices.
I think usblyzer only supports Windows
Right, I forgot about that.
Okay, I just tried it again in Wireshark and it was no problem at all (probably because I have much more experience now than when I first wrote the software). However I did it in a windows VM, as I didn't want to disable SIP for Wireshark on my Mac.


When you look in the data, you can clearly see some change.
If you don't see any value change, make sure the sidetone actually changes (so don't keep your headset just on the table). Because I noticed the same problem, and then also noticed that the headset simply bugged.
For filtering I used these arguments
usb.bInterfaceClass == HID && usb.endpoint_address.direction != IN && usb.src == host && usb.setup.wLength == 64
Note that I added a length, as I noticed that a lot of keep-alive (or some other noise) packages were sent with a different length.
You can also see, that the data in the image is highly similar to the implementation in corsair_void.c:
unsigned char data[64] = { 0xFF, 0x0B, 0, 0xFF, 0x04, 0x0E, 0xFF, 0x05, 0x01, 0x04, 0x00, num, 0, 0, 0, 0 };
(Just the 6-th byte, counting from 0, is in my capture a 0x01 instead of 0xFF is different. Probably software update or some feature activated?)
Thanks for getting this far in here. Very strange, I get really good info from Wireshark when I turn sidetone or other features on/off, but really can't see anything meaningful when adjusting the value/slider.
Possibly SIP or something else I'm doing is interfering..
Thanks for getting this far in here. Very strange, I get really good info from Wireshark when I turn sidetone or other features on/off, but really can't see anything meaningful when adjusting the value/slider.
Possibly SIP or something else I'm doing is interfering..
Did you see a SET_REPORT packet with length 100 (decimal; 64 in hex)? Also try the mute button. I noticed when trying to mute/unmute, it will send the sidetone packet first, too (for some reason with sidetone set when mute activated, and unset/set 0 if unmuted).
I think maybe found the issue. All recorded traffic has usb.dst == "host"
.. there is no recorded traffic with usb.src == "host"
(like your filter shows)
The Wireshark wiki says, that you have to deactivate SIP if you have Catalina. Probably it's this. Otherwise I guess you'll have to use Virtualbox or some other VM solution for capturing.
I have this headset and a working test Win VM. How can I be of assistance?
@themoosman You can find a tutorial here https://github.com/Sapd/HeadsetControl/wiki/Development
I have a Virtuoso too, this is what I was able to get
Side-tone full up:
Side-tone all the way down:
wLength = 2
Try to select only the HID-devices on the left side.
Usually it should be a report. So check those packets, too.
Alsamixer is able to control the sidetone correctly on the Virtuoso, the same way as the iCue software does, now the only thing that I am interested is in check the remaining battery
BTW, I tried selecting only the HID devices and still showing nothing, don't know if I am doing something wrong
@joseant79 : what does your alsamixer output look like?
Forgot to subscribe here. Also curious how you are able to get this to work in alsamixer @joseant79
It works for me, too! I had to make sure the multi-channel input selection was made and then adjust the first 'Headset' in alsa. There's a patch to rename that to 'Sidetone' pending I think.
Hi, i just came here to tell that i have my virtuoso se working on ubuntu 20.04 out of the box. Issues i noticed:
- low volume (in comparisement to windows 10), firefox (youtube) however is extremely loud in comparisement
- ~~very annoying sidetone (still trying to configure to disable this)~~ Press the physical microphone button longer (betwen 6 and 10 seconds)
- The slightest thing triggers the microphone to enable again.
I use this is combination with the realtek ALC 892 onboard sound on a Gigabyte GA-H170-HD3 motherboard
@vuurvoske you probably have multiple volume channels causing the volume discrepancy. Check Ubuntu sound settings
It was working well out of the box, just cranked the sidetone up and then press the mic button for 5 seconds and voila!
Anyone had any luck with these headphones and turning off the LED's in linux?
Ok looking at the wireshark data it seems like the data is quite weird having the first 2 and last 2 bytes swapped as well as having a truncated 0x1 as the 5th byte when the value is 100%. So it starts at 0x10400 and goes down to 0xd600 represented at 0x0004 and 0x00d6 respectively.
However as others have shown the sidetone does work in alasmixer and as such the alsa implementation code is mirrored on github here so it might be easier to reconsturct the alsa code that deconstruct the iCUE USB stream
Any way to get the battery level in Ubuntu ?
@Sapd I'm running Ubuntu 18.04. I added the Virutoso device to
corsair_void.c
following the Wiki instructions. Usingsudo
, I can get most of the commands to return:Found Corsair Void (Pro)! Success!
The battery level command hangs indefinitely. No commands have any observable effect on the headset, so I figured probably different protocol.
Curiously, the device ID changed between when I looked at it yesterday and today. Possibly this is due to a firmware update from messing around with the iCUE mac software. The iCUE software barely works, so I'm not sure how to move forward with this in absence of a PC.
In my case the command headsetcontrol -b
return Battery: Unavailable
when I change the volume form the headset.
Does this help? https://github.com/ckb-next/ckb-next/issues/785
Does this help? ckb-next/ckb-next#785
The report itself not. Someone needs to take a look at it with WireShark https://github.com/Sapd/HeadsetControl/wiki/Development#adding-a-new-headset for turning off LED or getting the Battery level. (Sidetone can not be supported as outlined some posts above, as it is controlled by an audio/volume channel).
So the Corsair Virtuoso support is not yet done on this application? I'd have to edit the source code to get it working?
For some reason pipewire did not show the 'sidetone' slider here. What should I do for it to show?