The old README led with the adapter's defects and the reasoning behind each workaround, which is the wrong order for someone who just wants their controller to work. The new README leads with the symptoms a user actually hits, then install, use, configure and troubleshoot. Ships as README.md in the package docs and doubles as the repository landing page, so there is only one document to keep current. Co-Authored-By: Claude <noreply@anthropic.com> |
||
|---|---|---|
| packaging | ||
| src | ||
| .gitignore | ||
| Makefile | ||
| README.md | ||
dualbox-wii
Makes the SZMy-power "Dual Box WII" USB adapter work properly on Linux.
If you plug a Wii Classic Controller into one of these adapters, you have probably hit at least one of these problems:
- The D-pad skips through menus. Pressing a direction once registers twice, so Steam's controller setup wizard binds one press to two prompts and saves a scrambled mapping. Re-running the wizard produces the same broken result every time.
- There are no stick clicks. The Classic Controller has no L3 or R3, so any game that needs them is unplayable.
- The two ports behave like two different controllers. Which socket you plug into changes which device the game sees.
- Random bumper presses. The adapter emits phantom LB and RB presses when a controller is seated or when the connection is loose.
This package fixes all four. It runs a small background service that reads the adapter and presents a single clean virtual controller to your system.
What you get
Your Wii pad appears to every game as an ordinary wired Xbox 360 controller. Nothing needs configuring in Steam or anywhere else, because every game already knows what a 360 pad is.
| Feature | Behaviour |
|---|---|
| D-pad | Fires exactly once per press |
| L3 (left stick click) | Press left trigger and left bumper together |
| R3 (right stick click) | Press right trigger and right bumper together |
| Ports | Either port works, and both map to the same controller |
| Unplugging | The controller stays visible to running games |
Triggers and bumpers still work normally on their own. Pressing them together is what produces a stick click, and when it does, neither the trigger nor the bumper action fires.
The "unplugging" row is worth explaining. Normally, if your controller comes loose mid-game, the game sees the controller vanish and you lose your player slot, often along with your progress in that session. This service keeps the virtual controller present at all times. If the pad is unplugged, the game simply sees a controller sitting still, and you can plug back in and carry on.
Requirements
- Debian 13 or similar, with systemd
- Python 3.9 or newer
- Root access to install
No Python libraries are needed beyond the standard library.
Installing
Build the package and install it:
make deb
sudo dpkg -i dualbox-wii_1.0.0_all.deb
That is all. The service starts immediately and runs automatically from then on, including after reboots. Plug in your controller and it works.
To check it is running:
systemctl status dualbox-wii
Using it
There is nothing to set up. Do not run Steam's controller configuration wizard for this adapter, because it will save a broken D-pad mapping. Your controller should just work in Big Picture mode and in games.
If a game lets you pick a controller type, choose Xbox.
Configuration
Most people never need this. Settings live in /etc/default/dualbox-wii:
DAEMON_ARGS="--window 0.04 --min-press 0.035"
| Option | Default | What it does |
|---|---|---|
--window |
0.04 | How close together the trigger and bumper must be pressed to count as a stick click |
--min-press |
0.035 | Presses shorter than this are treated as adapter glitches and ignored |
--vendor, --product |
1d79, 0301 | USB ID of the adapter to look for |
After editing, apply the change with:
sudo systemctl restart dualbox-wii
Raising --window makes the stick click easier to trigger but adds a little
delay to the triggers and bumpers. Lowering it does the opposite. Only the
triggers and bumpers are affected. Face buttons, sticks and the D-pad are never
delayed.
Troubleshooting
The controller does nothing.
Check the service is running with systemctl status dualbox-wii. If it is, the
most likely cause is the controller not being fully seated in the adapter. This
hardware is fussy about that, and a loose connection looks exactly like a dead
controller.
Random bumper presses in game. The software filters the short glitches this adapter produces, but the underlying cause is usually intermittent contact. Reseat the controller, try the other port, and check the cable.
The stick click does not trigger.
Press and hold the trigger, then the bumper, rather than trying to hit both at
the exact same instant. If it still misses, raise --window to 0.06.
Games see two controllers. This should not happen, because the service takes exclusive control of the adapter. If it does, you probably have a second copy of the daemon running from an older manual install.
Viewing logs.
sudo journalctl -u dualbox-wii -f
Uninstalling
sudo dpkg -r dualbox-wii
Use dpkg -P instead of -r if you also want to remove
/etc/default/dualbox-wii.
Building from source
make # check the sources
make deb # build the .deb
make clean # remove build output
make install installs the files directly without building a package, honouring
DESTDIR and prefix, which is useful on distributions that do not use dpkg.
Hardware notes
This targets the adapter with USB ID 1d79:0301, which reports itself as
SZMy-power LTD CO. Dual Box WII. Other adapters can be tried with --vendor
and --product, but the button layout is specific to this one, so results will
vary.
The controller identity is not visible to software. The adapter presents the same profile no matter what is plugged into it, and the button layout it exposes matches a Wii Classic Controller Pro.
License
MIT. See packaging/copyright.