Repository navigation
Troubleshooting
Find solutions for common OpenJoystickDriver (OJD) problems: a controller that is not detected, a game that does not see the controller, and crashes.
Note: This page applies to OpenJoystickDriver 0.6.0-alpha.1 and later. Version 0.5.0-beta.4 and earlier do not have all of the features on this page.
- Controller Is Not Detected
- Game Does Not See the Controller
- App Crashes Or Does Not Start
- Further Reading
This section explains what to check when OJD does not list your controller or shows no input.
- Make sure OJD runs. Look for the menu bar item.
- Open Overview and check Input Monitoring. OJD cannot read a controller without it. For more information, see Permissions.
- If Input Monitoring needs attention, click Request....
- Allow it in System Settings.
- Click Restart OpenJoystickDriver.
- Reconnect the controller. OJD never reconnects a Bluetooth controller by itself.
Each connection mode has its own VID:PID. A controller in USB mode and the same controller in Bluetooth mode look like different devices. A dongle has its own ID too.
- Find the VID:PID of your controller. For more information, see Finding your controller ID.
- Look for it in Supported controllers.
The built-in catalog has 696 records. A record without a physical test is unverified. An unverified controller may work, may partly work, or may not work.
- Xbox One or Xbox Series controller on USB: These controllers need the OJD driver extension. In Overview, check the Xbox USB Driver card. If it shows Approval needed, click Open System Settings and approve it. If it shows Needs attention, click Repair Xbox USB Driver. For more information, see Xbox USB driver extension.
- Clone or fake controller: It may report itself in a way the catalog does not cover. For more information, see Clone and fake controllers.
- Dongle: A dongle problem is separate from a controller problem. Test the controller in another connection mode if it has one.
-
Runtime disconnected: Run
ojd service start, then runojd status. - SDL sees 0 controllers: Grant Input Monitoring and Accessibility, restart OJD, and try again.
-
Xbox USB driver extension install fails: Rebuild the signed app, then run
ojd extension activate. -
Input stays held, or the status says Needs attention: Release the controls. Then check the controller input health with
ojd status --json.
Run the following command to see the runtime state.
ojd statusFor more information about ojd, see Using the command line.
If the controller is still missing, report it. For more information, see Reporting a bug.
This section explains what to check when a controller works in OJD but not in a game or app.
- Open the Input Test window for the controller. For more information, see Testing a controller.
- Press buttons. If Input Test shows no input, see Controller is not detected.
- In Overview, check Accessibility. OJD needs it to publish the virtual controller.
OJD publishes a virtual controller. Each app reads it with its own API. One tester saw apps that use the Apple Game Controller framework, the browser Gamepad API, or System Settings read it. The maintainer did not check this. Apps that use SDL may not read it.
OJD cannot add SDL to other apps. Each app ships its own SDL version.
One tester saw these results with the Xbox virtual profile. This is not a guarantee.
| App | Result |
|---|---|
| Steam | Shows a phantom controller with no input |
| CrossOver and Wine | No controller |
| RPCS3 | Sees a controller, no input |
| OpenEmu | Buttons map to wrong controls |
The design of OJD is to pick the virtual profile by itself. Use this step only to find out whether the profile is the cause. If a profile fixes a game, report it.
- In Controllers, select the controller.
- In Advanced, find Virtual HID profile. It appears only for controllers that OJD publishes.
- Choose Automatic or one of the two profiles.
- Test the game again.
OpenEmu worked with the Generic profile in the same test. Steam with that profile was erratic and slow to respond. The override applies to every controller of that model.
Some controllers have a Switch Pro mode. In that mode macOS reads the controller itself, and OJD does not publish a virtual controller. One tester saw RPCS3, the browser, and System Settings work in that mode. HD rumble in that mode drives only the linear haptics. Not verified for other controllers.
For more information, see Game and app compatibility.
This section explains what to do when OJD crashes, does not start, or reports a damaged profile library.
-
Open the Console pane, or run the following command.
ojd log show --lines 200
-
Note what you did before the crash.
-
Report it. For more information, see Reporting a bug.
OJD clears its log files at each start. Copy the logs before you start OJD again.
If OJD crashes at every start, two global profiles may be active for one controller model. This is a known issue.
- Quit OJD.
- Move
~/Library/Application Support/OpenJoystickDriver/ActiveProfiles.jsonto another folder. - Open OJD.
Unplugging a USB controller or dongle may crash OJD. Open OJD again. Restart OJD if stale virtual controllers stay in System Settings.
OJD reads each profile file in Profiles/ and the list of active profiles in ActiveProfiles.json. It does not change a file when it finds damage. While damage exists, OJD blocks every change to your profiles until you repair it.
OJD shows two kinds of damage in the Profiles pane. To repair both from the command line, run ojd profile recover.
OJD keeps the valid profiles and marks the damaged profile Needs attention.
- Select the damaged profile.
- Click Delete Damaged Profile....
- In the alert, click Delete.
OJD saves a backup before it changes the file.
If OJD cannot read ActiveProfiles.json, the pane shows Damaged active profile list, and no profile is active.
- Click Back Up & Reset Active Profiles....
- In the alert, click Back Up & Reset.
OJD saves a backup and then writes an empty list. Your profiles are kept, and none of them is active after this step.
Each backup is beside the file it copies: in ~/Library/Application Support/OpenJoystickDriver/Profiles/ for a profile, and in ~/Library/Application Support/OpenJoystickDriver/ for ActiveProfiles.json. The name has the form FILE.backup-DATE-TIME-ID. The time is local time.
A backup is a copy of the file as it was before repair. To recover data, open the copy in a text editor. For more information, see Profile file reference.
- Home
- Start here
- Controllers
- Games
- Remapping
- Your Mac
- Command line
- Help
- Advanced