Before we begin, download the GamePad Test homebrew which will help visualise motion and pressure-sensitive information received by RPCS3 and can be used for troubleshooting. [Source]
Using DualShock 3 controller
On Windows
Currently there are 2 methods of setting up your DualShock 3 (and SIXAXIS) to RPCS3:
- Using RPCS3's dedicated DualShock 3 pad handler by installing the official DualShock 3 driver from Sony. (recommended)
- Using RPCS3's XInput pad handler together with the third-party tool ScpToolkit.
Both approaches have advantages and disadvantages so here's a quick comparison between them:
Using dedicated DualShock 3 pad handler | Using XInput pad handler |
---|---|
Non-intrusive and simple installation | Slightly complex installation instructions |
Can be used in combination with other XInput devices in RPCS3 | Currently cannot be used in combination with other XInput devices in RPCS3 |
No Bluetooth connectivity | Bluetooth connectivity present |
No support for third-party DS3 controllers (e.g. PANHAI) | Some third-party DS3 controllers may work |
Need to uninstall third-party tools that access the DualShock 3 such as ScpToolkit | Does not work with Nefarius's version of ScpToolkit, need to use the original version linked below |
Preferable for users who already have original ScpToolkit v1.2.2.175 installed |
Using dedicated DualShock 3 pad handler
The recommended method is to use RPCS3's dedicated DualShock 3 pad handler. This is done by installing the official DualShock 3 driver from Sony and then allowing RPCS3 to handle the controller. While this option lets users take advantage of all features such as pressure-sensitive buttons and motion controls, bluetooth functionality will be unavailable. To use RPCS3's dedicated DualShock 3 pad handler:
- Disable all third-party tools accessing the DualShock 3 controller (such as ScpToolkit).
- Download the DualShock 3 drivers v3.0.0.0 for Windows and install it. [Source]
- After completion of the installation, restart your PC.
- Connect the controller using a USB cable and press the PS button (in the middle of the pad) to allow the DualShock 3 to start sending reports to RPCS3.
- Select RPCS3's dedicated DualShock 3 pad handler in the Gamepad Settings menu.
Resetting the controller
DualShock 3 can sometimes become unresponsive when the PC is restarted with it being connected. This can manifest in the following ways:
- All 4 lights are blinking.
- Controller appears as disconnected
- Controller appears as connected, but none of the buttons work
To fix this, turn the controller around and press the Reset button on the back. It is located in the bottom of a small, circular hole at the center of the controller, next to a larger screw-hole. You'll need a thin, long stick to reach it.
Using XInput pad handler with ScpToolkit
The alternative method is to use the XInput pad handler along with ScpToolkit. This option carries various benefits and drawbacks as mentioned in the table above. To use the XInput pad handler for the DualShock 3:
- Download ScpToolkit v1.2.0.160 along with Update v1.2.2.175.
- Extract ScpToolkit v1.2.0.160 and place the ScpServer folder in the location of your choice.
- Extract Update v1.2.2.175 over ScpServer folder and overwrite all files when prompted.
- Connect your controller to your PC using a USB cable or Bluetooth and let Windows automatically install the generic driver.
- Launch the ScpDriver.exe found in
ScpServer/bin/
and click Install. - Navigate to
ScpServer/bin/Win64/
and launch SCPUser.exe. Test whether the input from your controller is correctly recognised. If the input is not recognised, restart your PC and try again. - Once the input is correctly working, download the modified XInput wrapper and copy the XInput1_3.dll from the
x64
folder to your RPCS3 folder and place it next to the rpcs3.exe. - Select RPCS3's XInput pad handler in the Gamepad Settings menu.
Notes:
- As stated in the comparison above, this method prevents RPCS3 from recognising other XInput controllers. However, if users move XInput1_3.dll out of the RPCS3 folder, RPCS3 will be able to recognise both XInput and DualShock 3 controllers at the same time. However, doing so will cause the DualShock 3 controller to lose pressure-sensitive buttons and motion controls, behaving like a regular XInput device.
- Currently only one application can receive pressure-sensitive information over SCP interface, so if you already have something else running that uses this information (for example, another emulator) then DualShock 3 controller in RPCS3 may behave as a regular XInput device, or in some cases one of the two applications may crash.
- If SCPUser.exe crashes with the error The application was unable to start correctly (0xc0000142) in step 6, download this fork of the modified XInput wrapper and copy the XInput1_3.dll from the
x64
folder to theWin64
folder and place it next to the SCPUser.exe. If this resolves the issue and your controller is detected, copy this .dll to your RPCS3 folder instead.
On Linux
The DualShock 3 on Linux works with HIDAPI, allowing for the controller to work through USB as well as Bluetooth. To use the DualShock 3 Backend, users need to create a file called /etc/udev/rules.d/99-ds3-controllers.rules
(you will need root permissions to create this file), and fill it with the following:
# DualShock 3 over USB KERNEL=="hidraw", ATTRS{idVendor}=="054c", ATTRS{idProduct}=="0268", MODE="0666" # DualShock 3 over Bluetooth KERNEL=="hidraw*", KERNELS=="*054C:0268*", MODE="0666"
After this you must either:
- restart your computer for these settings to apply or
- run
sudo udevadm control --reload-rules
and replug in your controller
This will allow RPCS3 to communicate with the DualShock 3. Users can then select RPCS3's dedicated DualShock 3 pad handler in the Gamepad Settings menu.
Using DualShock 4 controller
On Windows
The DualShock 4 on Windows works with HIDAPI, allowing for the controller to work through USB as well as Bluetooth. There aren't any additional steps required and the controller should just work with RPCS3's dedicated DualShock 4 pad handler. However, please note that third-party tools like ScpToolkit or DS4Windows may interfere with RPCS3 and it is recommended to disable all such tools.
On Linux
The DualShock 4 on Linux works with HIDAPI, allowing for the controller to work through USB as well as Bluetooth. To use the DualShock 4 Backend, users need to create a file called /etc/udev/rules.d/99-ds4-controllers.rules
(you will need root permissions to create this file), and fill it with the following:
# DualShock 4 over USB KERNEL=="hidraw*", ATTRS{idVendor}=="054c", ATTRS{idProduct}=="05c4", MODE="0666" # DualShock 4 Wireless Adapter over USB KERNEL=="hidraw*", ATTRS{idVendor}=="054c", ATTRS{idProduct}=="0ba0", MODE="0666" # DualShock 4 Slim over USB KERNEL=="hidraw*", ATTRS{idVendor}=="054c", ATTRS{idProduct}=="09cc", MODE="0666" # DualShock 4 over Bluetooth KERNEL=="hidraw*", KERNELS=="*054C:05C4*", MODE="0666" # DualShock 4 Slim over Bluetooth KERNEL=="hidraw*", KERNELS=="*054C:09CC*", MODE="0666"
After this you must either
- restart your computer for these settings to apply or
- run
sudo udevadm control --reload-rules
and replug in your controller
This will allow RPCS3 to communicate with the DualShock 4. Users can then select RPCS3's dedicated DualShock 4 pad handler in the Gamepad Settings menu.
Analog sticks not centered with evdev pad handler
When using the evdev pad handler on Linux, some users may encounter cases where the analog sticks of the controller are not centered but stuck in the corner of the movement zone. This issue occurs when incorrect drivers are used for the controller.
Usually, analog sticks have a range from -x
to +x
while triggers use only a positive range from 0
to +x
. However, some controllers use positive ranges for analog sticks as well which does not directly work with RPCS3's implementation. Hence, the following workaround is required:
- Navigate to
~/.config/rpcs3/
and openevdev_positive_axis.yml
. If this file does not exist in the directory, create it. - Change the following lines from false to true:
Before After ABS_X: false ABS_Y: false ABS_RX: false ABS_RY: false
ABS_X: true ABS_Y: true ABS_RX: true ABS_RY: true
This is not an exhaustive list of options available. Users are requested to toggle other options as required by their specific controller or driver.