Connect a Nintendo Switch Controller doesn't work

When I plug it in I have the pop up saying “Microsoft Inc. Pro Controller connected”, but then nothing.

In the “controller” tabs of the settings, nothing. On steam, still nothing.

I tried this : doesn’t work (Hopefully) helpful instructions about using a Switch Pro controller with Steam client on Arch Linux · GitHub . I even tried with code 0666 instead of 0660.

I checked steam but it’s supposedly accepting nintendo controllers.

using LLM advices (I know but i’m stuck and it sucks) here is its analysis : Your lsusb output confirms the Nintendo Switch Pro Controller (ID 057e:2009) is physically connected, but it’s not appearing in /proc/bus/input/devices or /dev/input/ as a joystick. This means the kernel is detecting the USB device but not creating an input device for it, which is why Steam and KDE settings don’t recognize it. Idfk how useful it is

I have tried this : sudo modprobe hid-nintendo and the same with xbot (llm advice saying this controller might have wrong drivers installed)

It appears on lsusb :

❯ lsusb
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 001 Device 002: ID 174f:2459 Syntek Integrated Camera
Bus 001 Device 003: ID 057e:2009 Nintendo Co., Ltd Switch Pro Controller
Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 003 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 003 Device 003: ID 0cf3:e300 Qualcomm Atheros Communications QCA61x4 Bluetooth 4.0
Bus 004 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub

And here is another part of the analysis of the LLM after doing sudo dmesg | tail

Your dmesg output reveals the core issue:

[  500.896121] usb 1-2: Product: Pro Controller
[  500.896125] usb 1-2: Manufacturer: Microsoft Inc.

Your Konix controller is identifying itself as a “Microsoft Inc. Pro Controller” to the kernel. This means it’s emulating an Xbox controller, not a Nintendo Switch Pro Controller. As a result, the hid-nintendo module won’t bind to it—it’s expecting a Nintendo vendor ID (057e), but the device is reporting a Microsoft vendor ID (045e is typical for Xbox, but your lsusb shows 057e:2009).
This is a firmware/emulation quirk of your Konix controller. It’s likely using a generic USB HID descriptor that makes it appear as an Xbox controller to the OS, but the actual vendor/product IDs (057e:2009) are Nintendo’s.

Here is the reference to my controller : https://www.konix-interactive.com/products/mha-blue-nintendo-switch-wired-controller/?lang=en, it works on windows. Here the lights doesn’t even light on.

No answer on the official Discord Server.

Any idea on how to connect it ? I’m dying to try silksong

Additional Informations from fastfetch :

OS: CachyOS x86_64
Host: 82KU (IdeaPad 3 15ALC6)
Kernel: Linux 7.0.5-2-cachyos
Uptime: 10 hours, 3 mins
Packages: 1874 (pacman)
Shell: fish 4.7.1
Display (LEN9051): 1920x1080 in 16", 60 Hz [Built-in]
DE: KDE Plasma 6.6.5
WM: KWin (Wayland)
WM Theme: Breeze
Theme: Breeze (Sweet) [Qt], Breeze-Dark [GTK2], Breeze [GTK3]
Icons: breeze-dark [Qt], breeze-dark [GTK2/3/4]
Font: Noto Sans (10pt) [Qt], Noto Sans (10pt) [GTK2/3/4]
Cursor: breeze (24px)
Terminal: konsole 26.4.1
CPU: AMD Ryzen 5 5500U (12) @ 4.06 GHz
GPU: AMD Lucienne [Integrated]
Memory: 3.39 GiB / 5.64 GiB (60%)
Swap: 1014.85 MiB / 5.64 GiB (18%)
Disk (/): 113.74 GiB / 234.38 GiB (49%) - btrfs
Local IP (wlan0): XXX.XXX.XXX.XXX
Battery (L20L3PF0): 100% [AC Connected]
Locale: en_GB.UTF-8

Alright, I managed to find a solution.

My controller is a cheap third-party “Switch Pro Controller” clone (KOKIX/Konix).
The issue is that Linux detects it as a Nintendo controller, but it actually uses a weird mixed/proprietary protocol and no driver gets attached automatically.

Symptoms I had:

  • Controller vibrates on plug-in

  • No LEDs

  • Not detected in Steam

  • No /dev/input/js0

  • No controller visible in evtest

  • lsusb shows:

    ID 057e:2009 Nintendo Co., Ltd Switch Pro Controller
    
  • usb-devices showed:

    Driver=(none)
    

The fix was to force the controller to use the Xbox xpad driver.

Temporary test:

sudo modprobe xpad
echo 057e 2009 | sudo tee /sys/bus/usb/drivers/xpad/new_id

After reconnecting the controller:

  • /dev/input/js0 appeared

  • Steam detected it

  • evtest showed a Generic X-Box pad

You can verify with:

sudo evtest

Persistent fix:
Create this script:

sudo nano /usr/local/bin/kokix-xpad.sh

Content:

#!/bin/sh

modprobe xpad
echo "057e 2009" > /sys/bus/usb/drivers/xpad/new_id

Make it executable:

sudo chmod +x /usr/local/bin/kokix-xpad.sh

Then create a systemd service:

sudo nano /etc/systemd/system/kokix-xpad.service

Content:

[Unit]
Description=Bind Kokix controller to xpad
After=multi-user.target

[Service]
Type=oneshot
ExecStart=/usr/local/bin/kokix-xpad.sh

[Install]
WantedBy=multi-user.target

Enable it:

sudo systemctl daemon-reload
sudo systemctl enable kokix-xpad.service

Then reboot.

After reboot the controller should work automatically as an Xbox controller.

Notes:

  • Some extra buttons (Capture/+ button) still do not work on Linux because the controller firmware does not expose them correctly.

  • Home button works.

  • Sticks/buttons/triggers work correctly in Steam and games.