Make AIC8800 WiFi 6 / Bluetooth USB dongles work on Linux.
Cheap WiFi 6 USB dongles built on the AICSemi AIC8800D80 chip show up on Linux as a tiny USB disk holding a Windows installer, instead of a network card:
$ lsusb
Bus 001 Device 120: ID 1111:1111 Pandora International Ltd. 88M80
aicswitch sends the dongle the same vendor command the Windows tool uses, so it turns into a real WiFi + Bluetooth adapter. A udev rule does this automatically every time you plug it in.
Your dongle needs aicswitch if any of these apply:
lsusbshowsID 1111:1111 Pandora International Ltd. 88M80- A small USB drive called "Wifi Driver" containing
Wifi6_install.exeappears when you plug it in dmesgshowsscsi ... Direct-Access LGX WIFI6andusb-storage, but no network interfaceejectandusb_modeswitchdon't make the WiFi adapter appear
Tested with the AICSemi AIC8800D80 chip (WiFi 6 + Bluetooth 5) sold under brands like LGX and in no-name "WiFi 6 USB adapter" sticks.
Switcher plus the WiFi/Bluetooth driver (recommended):
curl -fsSL https://limitedio.github.io/aicswitch/install.sh | sudo sh -s -- --driverOnly the switcher, if you already have an AIC8800 driver:
curl -fsSL https://limitedio.github.io/aicswitch/install.sh | sudo shThen unplug the dongle and plug it back in. To remove aicswitch, run curl -fsSL https://limitedio.github.io/aicswitch/uninstall.sh | sudo sh (add -s -- --driver to also remove the driver).
Every release ships static binaries and packages for x86_64, i686, aarch64, armv7, armv6, riscv64 and ppc64le:
| Distro | File | Install |
|---|---|---|
| Debian, Ubuntu, Mint, Raspberry Pi OS | .deb |
sudo apt install ./aicswitch_*.deb |
| Fedora, RHEL, openSUSE | .rpm |
sudo dnf install ./aicswitch-*.rpm |
| Arch, Manjaro | .pkg.tar.zst |
sudo pacman -U aicswitch-*.pkg.tar.zst |
| Alpine | .apk |
sudo apk add --allow-untrusted aicswitch_*.apk |
| Anything else | aicswitch-linux-<arch>.tar.gz |
static binary, no dependencies |
make
sudo make install # PREFIX=/usr/local, UDEVDIR=/etc/udev/rules.dYou only need a C compiler and libc.
You normally never run it yourself, because udev runs it for you. To run it by hand:
sudo aicswitch # find and switch every attached AIC dongle
sudo aicswitch /dev/sg1 # switch a specific SCSI generic device
aicswitch --versionAfter switching, the dongle shows up as a69c:8d80 aicsemi AIC Wlan, and as a69c:8d81 AICSemi AIC 8800D80
once the driver has loaded its firmware.
- The dongle starts in "driver CD" mode as USB mass storage (vendor
AIC, modelWIFI6). - udev matches the
1111:1111SCSI generic device and runsaicswitch /dev/sgN. - aicswitch sends the 16-byte vendor SCSI command
FD 00 00 00 00 00 00 00 00 00 00 00 00 00 00 F2withSG_IO. This command was found by disassemblingUsb_Driver.dllfrom the Windows installer stored on the dongle. A standard SCSI eject does not switch these units, which is whyusb_modeswitch/ejectrules don't help. - The dongle reconnects as
a69c:8d80, and the AIC8800 driver uploads firmware and creates awlx…interface plus anhciBluetooth controller.
aicswitch only handles the mode switch. The WiFi/Bluetooth kernel driver is
shenmintao/aic8800d80 (GPL), which --driver installs through DKMS
so it survives kernel updates. If Secure Boot is enabled, you have to sign the module or turn Secure Boot off.
If your dongle has a different storage-mode USB ID, add it to ids[] in src/aicswitch.c
and to 99-aicswitch.rules.in, then open a PR.