No description
Find a file
foleosoft d86cf836f2 Replace the technical README with a user-facing one
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>
2026-08-13 11:19:05 -04:00
packaging Initial release of dualbox-wii 2026-08-13 11:12:43 -04:00
src Replace the technical README with a user-facing one 2026-08-13 11:19:05 -04:00
.gitignore Initial release of dualbox-wii 2026-08-13 11:12:43 -04:00
Makefile Replace the technical README with a user-facing one 2026-08-13 11:19:05 -04:00
README.md Replace the technical README with a user-facing one 2026-08-13 11:19:05 -04:00

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.