Buttons and sticks work in Cemu, but aiming with gyro does nothing — or the controller does not even appear under GamePad motion source. In issue #671 a Switch Pro Controller hit exactly that wall, and the trail is instructive: the checks below are the ones that matter, in the order that finds the fault fastest. One honest note before we start: modern Cemu has a native motion path of its own, and at the end of this page we tell you when to use it instead. BetterJoy’s DSU route is a tool, not a tollbooth.
How the pieces connect (so the checks make sense)
In the BetterJoy setup, buttons reach Cemu through the virtual XInput controller, while motion travels separately: BetterJoy runs a Cemuhook/DSU server on your PC, and Cemu connects to it as a client. Two independent paths means gyro can fail while buttons work perfectly — and the fix is almost always in the motion path: the server, the address, or the slot.
Check 1: The server is running, at the right address
Start BetterJoy with your controller connected and look at its console: you should see the server start line, Starting server on 127.0.0.1:26760. The defaults from the project’s wiki are serverIP = 127.0.0.1 and serverPort = 26760. In Cemu’s DSU client settings, the server address must match exactly — 127.0.0.1, port 26760. A single wrong digit in the port is the most common silent failure, because Cemu does not complain; it simply shows no motion device. If the console never shows the server starting, fix detection first with our controller not detected guide.
Check 2: The right slot under GamePad motion source
The DSU server exposes controller slots, and Cemu’s GamePad motion source must point at the slot your controller actually occupies — the #671 symptom was a Pro Controller present everywhere except there. In Cemu’s input settings, open the motion source dropdown and select the DSU controller entry rather than leaving it on a default or empty slot. With Joy-Cons joined in BetterJoy, remember they present as one controller: pick that combined entry. If the dropdown is entirely empty, Cemu is not reaching the server at all — go back to Check 1, and type the address by hand instead of trusting a remembered value.
A related slot trap catches two-controller households: each physical controller occupies its own DSU slot, so a second player’s profile pointing at slot 1 gives them buttons with no motion while player one works perfectly. If motion fails for exactly one of two pads, compare the motion-source slot in each profile before changing anything else — it is a thirty-second check that looks, from the player’s seat, identical to a dead gyro.
Check 3: The wiki’s motion reset and calibration basics
The project’s FAQ entry for “motion controls don’t work / work badly” gives a disarmingly simple fix: turn the controller off and back on while everything is running — hold Home or Capture for 2 seconds to disconnect, then press a button to reconnect. Do this with Cemu open and the DSU client configured, so the motion stream renegotiates cleanly. The same wiki section’s calibration advice applies if motion works but feels wrong: in Cemu’s input profile, turn off “Also use for buttons/axes” for the motion source and set the deadzone to 0; both settings distort gyro input when left on. If aiming works but pointing the controller fills BetterJoy’s console with Duplicate timestamp enqueued, that is a separate queue problem covered in its own guide.
Check 4: When the config itself is the problem
In #671, after the standard checks, the resolution was a complete reinstall of Cemu — the emulator’s own configuration had become the fault. Before you go that far, back up your Cemu folder, and treat reinstall as the last step, not the first. The lesson of that thread is the ordering: port and slot first (five minutes), emulator reinstall last.
The honest alternative: Cemu’s native SDL motion
Cemu 2.x can read Switch controller motion natively: in Input Settings, choose the SDLController API for your Pro Controller and tick Use motion — no BetterJoy, no DSU server. Current community guidance treats this as the first thing to try for Cemu-only play, and if it works for your setup, it is the simpler stack. The BetterJoy route still earns its place when the SDL path misbehaves on your system, when you want one setup that also feeds other emulators, or when you specifically need dual Joy-Con motion with your choice of which hand supplies the gyro — the case the Ryujinx family’s own README still names BetterJoy (or DS4Windows) as required. If you are setting up from scratch, our gyro guide explains the three gyro modes (DSU server, gyro-to-mouse, gyro-to-stick) and when each fits; the program itself is on the download page, and more fixes are indexed on the troubleshooting hub.
FAQ
Buttons work but there is no motion tab option at all. Why?
Your input profile is probably using XInput only. Motion arrives through the DSU client, which must be configured separately with the 127.0.0.1:26760 server — the two paths are independent by design.
Motion works in the Cemu settings preview but not in game. What now?
Check that the game’s controller profile actually assigns the motion source — profiles are per-game in Cemu. Also verify “Also use for buttons/axes” is off and the deadzone is 0, per Check 3.
Should I just switch to SDL motion permanently?
If you only play Cemu and SDL motion works with your controller, yes — fewer moving parts. Keep the BetterJoy route in mind for multi-emulator setups and dual Joy-Con motion, where it remains the documented path.
