Skip to main content

Using the PS5 DualSense with Arch Linux

·614 words·3 mins· ·
Dualsense Arch Linux

The DualSense wireless controller is supposed to work out of the box for Linux, Windows and MacOS but this isn’t really the case.

  • During testing, only MacOS worked seamlessly out of the box which is kind of ironic given the whole gaming on MacOS thing.
  • On Windows, some of the controls were not mapped properly which was annoying. I had to install additional mapping software like DualSenseX. The worst part is probably the fact that there exists a paid version of this software which is on Steam. I am aware of open source alternatives such as DS4Windows but I haven’t tried it.
  • Getting it working properly on Linux was the most tedious experience out of all of operating systems tested.

The testing involved pairing the device and visiting https://gamepadtest.com/ and pressing all the buttons on the controller to see what effect they have. Usually when it’s broken it means you press one button and the website shows you pressed/moved either the wrong button/joystick or more than one of them. Not sure how the second case occurs, but it somehow does.

The main part of this post is dedicated to getting the controller work on Arch Linux since that is currently my daily driver.

Firstly, check your bluez package version. As per this recent (as of writing) thread, both versions 5.70 and 5.69 are broken with respect to connecting to the controller. As such you will need to downgrade the following packages bluez bluez-libs bluez-utils to version 5.68. Make sure to downgrade to that version and only that version because in my research I found similar issues reported with earlier versions. The easiest way to downgrade is to install the downgrade package which makes it ridiculously easy to down/upgrade packages. It even helps you add packages to the pacman ignore list.

Then run lsmod | grep hid. If you see the line hid_playstation, then you’re all good. If not, run

# modprobe hid-playstation

to load the appropriate kernel module for the controller. Afterwards, running lsmod | grep hid should return a list similar to the following one:

hidp                   36864  0
hid_logitech_hidpp     77824  0
bluetooth            1114112  45 btrtl,hidp,btmtk,btintel,btbcm,bnep,btusb,rfcomm
hid_logitech_dj        40960  0
mac_hid                12288  0
hid_playstation        45056  0
led_class_multicolor    16384  1 hid_playstation
ff_memless             20480  1 hid_playstation
usbhid                 77824  2 hid_logitech_dj,hid_logitech_hidpp

It’s normal to notice more than one module to appear since there are dependencies present. To make the kernel load the module on boot, create/update the following file:

# vim /etc/modules-load.d/hid-playstation.conf

# add the following line to the file:
hid_playstation

Then, create/update the following file:

# vim /etc/bluetooth/input.conf

# add the following line to the file:
UserspaceHID=true

Then restart your computer for good measure. Apparently running systemctl restart bluetooth.service should also work but I haven’t tested that method directly.

Afterwards, you can using bluetoothctl to connect to the controller. Then run scan on to show all Bluetooth events. To enable the controller’s pairing mode, hold the the PlayStation logo button as well as the small button in the upper middle right region with a torch/loud sound icon next to it for five seconds. The light on the controller should start pulsing blue in sequences of two. Then look for a new event with the name DualSense wireless controller in it and copy paste the MAC address associated with it and run connect [address]. The pairing should be successful.

To play games, it’s recommended to use Steam with proton since it seamlessly maps everything for you. If you don’t want to use Steam, there is a CLI mapper tool called dualsensectl which is installed via the dualsensectl-git package on the AUR. However, I have not tested that tool.

For more information, see the Arch wiki page for Gamepads.

Reply by Email