Driver Conflict Between Xbox Controller Dongle And USB WiFi
I’m a gamer using Xbox One Controller. One of the issues I faced recently since I migrated my daily driver from Windows to Linux is to connect my controller to the machine to actually game. It needs a few tinkering to work, unlike how convenient it is to plug-and-play on Windows, which is pretty fine because I’d never got a chance to understand those driver stuff if it wasn’t because the accidental conflict between the controller dongle and my USB WiFi stick.
TLDR
If you use xone
to wirelessly connect your controller, and you happen to have a USB WiFi on your machine, you want to make sure your WiFi driver isn’t mt76x2u
. Use one with chip from Realtek or Intel, or still MediaTek but with careful pick, so that the driver of that chip doesn’t conflict.
And blacklist the mt76x2u
as instructed in xone
.
The Problem
My desktop runs Debian Testing (trixie
at the moment). I got an official Xbox One Controller with wireless dongle/adapter. I got a USB WiFi with unknown chip initially, which turned out to be a MediaTek chip. I’d like to use the controller wirelessly so the xone Xbox Controller driver is the pick.
When I installed the xone driver following the guides, my machine wireless connection was immediately cut, as if my WiFi usb is never plugged in.
I need a machine with my wireless controller connected and a working WiFi.
Troubleshoot
Why My Network Was Down Immediately
This wasn’t hard to figure out. Take a quick look into how the driver is installed, at the end of the installation script, a few lines are interesting:
|
|
It removed a kernel module called mt76x2u
, and inside the install/modprobe.conf
, it configures to blacklist that module too, which explains why restarting machine didn’t bring my WiFi back.
A quick search of that driver name showed that it is a MediaTek USB support module. Further experiments to uninstall xone driver, reload that mt76x2u
driver, then manually remove the driver mt76x2u
reproduced the recovered network connection and immediate cut again. It proves that my USB WiFi really depends on that module, when direct hardware information check gives no clue what chip it uses (it’s cheap, random usb device).
What If That Module Was Not Blacklisted
With the cause discovered, I immediately decided to see if someone else had the problem and what they did. I did find a similar one, though it’s with xone’s precedent driver xow
. But according the poster, both his USB WiFi and the dongle worked correctly even with that blacklist line removed… so does it mean I can do the same?
I immediately removed the line that unloads the kernel module in the script, and the line to blacklist across reboot. When installing xone without --release
flag, the module was built in debug mode, sending message to dmesg
, giving us a chance to see how kernel handles both devices.
“Recent version of dmesg
provides a ‘follow’ option which works like tail -F
” so that dmesg output can be monitored with dmesg -wH
. But if your version of dmesg
doesn’t have that option you need to manually poll.
This is what it looks like when plugging in the usb WiFi alone:
|
|
This is what it looks like when both devices are plugged in. In this situation, despite of the error messages, the network still works. Very interestingly, the conflict comes from the fact that, the controller dongle is recognized, and is instructed by kernel to work as a WiFi device lol.
|
|
A further experiment to uninstall xone
but keep mt76x2u
module, with only the dongle controller plugged-in, without the real WiFi device, shows that … the Xbox controller dongle can really act as a WiFi receiver lol, although there’s obviously a auth incompatibility and switch, maybe because of the 2.4GHz and 5GHz version of my WiFi.
|
|
Finally, if mt76x2u
is disabled and xone
is installed, the controller can connect just fine, with another set of message in dmesg
showing the negotiation is successful.
What Did I Do
With the cause uncovered, I simply choosed to purchase a new WiFi that doesn’t use mt76x2u
driver, from RealTek. There’s a nice summary from the community of USB WiFi chipset compatibility for Linux. I just picked one from it and search for usb WiFi with that chip.
I once thought about adding a wireless NIC via PCI-E to the motherboard directly but a few days ago I’ve already messed up the board when upgrading my GPU from NVidia to AMD, so I’d like to keep it running for a while to see if it stablizes, before introducing another varaible. But PCI version of NIC is also an option for you.
Either way, don’t use a conflicted version of NIC, and blacklist mt76x2u
when you found an alternative.