An up-to-date 3DS homebrew application that lets you use your Nintendo 3DS as a wireless controller for Windows and Linux.
- Use your 3DS as a wireless gamepad for PC games and emulators
- Cross-platform support for Windows and Linux
- Support for all buttons, Circle Pad, and C-Stick
- Configurable server IP and port
- Low latency wireless connection
- Battery level indicator
- LCD toggle option to save battery
Q: Why Create this?
- A: A similar application exists but is no longer maintained or functional.
Q: Why is linux so much more complicated to setup?
- A: i honestly don't fucking know. i'm not the person to ask.
- Nintendo 3DS with custom firmware (CFW)
- Homebrew Launcher access
- Wi-Fi connection (same network as PC)
- Windows or Linux
- Python 3.6+
- Windows: ViGEmBus driver
- Linux: uinput kernel module
- Copy
3ds_controller.3dsxto your 3DS SD card in/3ds/folder - Launch Homebrew Launcher on your 3DS
- Run the 3DS Controller application
- Install ViGEmBus driver
- Install Python 3.6+
- Install required packages:
pip install vgamepad - Run the PC receiver:
python pc.py
- Load uinput module:
sudo modprobe uinput - Install dependencies:
sudo apt-get install libudev-dev pip install python-uinput - Run PC receiver with root privileges:
su - modprobe python-uinput python3 path/to/pc.py
- Start PC receiver script
- Launch 3DS Controller on your 3DS
- Set the IP address in the 3DS app to match your PC's IP
- Connect and start using your 3DS as a controller
| 3DS Input | PC Controller Output |
|---|---|
| A/B/X/Y Buttons | A/B/X/Y Buttons |
| Circle Pad | Left Analog Stick |
| C-Stick | Right Analog Stick |
| D-Pad | D-Pad |
| L/R Buttons | LB/RB (Left/Right Bumpers) |
| ZL/ZR Buttons | LT/RT (Left/Right Triggers) |
| Start/Select | Start/Back |
- Config file at
/config.inion SD card - Edit to change server IP and port
- Default port: 8888
- Listens on all interfaces on port 8888
- Debug mode:
python pc.py --debug
- DevkitPro and DevkitARM
- 3DS development libraries (libctru)
- Make utility
- Python 3.6+
- Windows: ViGEmBus driver
- Linux: uinput module and headers
-
Install DevkitPro with 3DS support
# Windows: Download from https://devkitpro.org/wiki/Getting_Started # Linux/macOS wget https://apt.devkitpro.org/install-devkitpro-pacman chmod +x ./install-devkitpro-pacman sudo ./install-devkitpro-pacman sudo dkp-pacman -S 3ds-dev -
Install CIA building tools (makerom and bannertool)
# Windows # Download makerom and bannertool from: # - makerom: https://github.com/3DSGuy/Project_CTR/releases # - bannertool: https://github.com/Steveice10/bannertool/releases # Add both to your PATH # Linux/macOS git clone https://github.com/3DSGuy/Project_CTR.git cd Project_CTR/makerom make sudo cp makerom /usr/local/bin git clone https://github.com/Steveice10/bannertool.git cd bannertool make sudo cp output/*/bannertool /usr/local/bin -
Set environment variables (if needed)
export DEVKITPRO=/opt/devkitpro export DEVKITARM=${DEVKITPRO}/devkitARM -
Clone repository
git clone https://github.com/icicle1133/3ds-controller.git cd 3ds-controller -
Build application
# For 3DSX file make clean make # For CIA file make cia -
Output files:
3ds_controller.3dsx(Homebrew format)3ds_controller.cia(CIA format for installation via FBI)
- Install Python 3.6+
- Install packages:
pip install vgamepad - Install ViGEmBus driver
- Run:
python pc.py
- Install dependencies:
sudo apt-get install python3-dev libudev-dev - Install packages:
pip install python-uinput - Load uinput:
sudo modprobe uinput - Run:
sudo python pc.py
- Add ability to save multiple server configurations
- Add multiple device connections for local multiplayer
- Re-add keyboard/touchscreen support like CTurt's 3ds Controller had.
This project is protected by the PolyForm Noncommercial License