DualShock4 not connecting with Bluetooth after reinstall

After reinstalling my system (SSD died. I reinstalled from the latest ISO at time of writing), I am now unable to use my PS4 controller trough Bluetooth (wired it works fine, but doesn’t work with Bluetooth)

  • I’ve tried both the plasma bluetooth panel and bluetoothctl
  • I’ve tried resetting the controller by pushing the hidden reset button for five/ten seconds
  • The controller does work, it pairs fine with my phone
  • The Bluetooth on the computer works, it connects to my Bluetooth headphones (though now it also has some issues with audio dropping every few seconds)
  • Yes, I’ve read the Archwiki on Bluetooth devices (and followed this thread https://bbs.archlinux.org/viewtopic.php?id=270465)
  • Yes, I’ve updated the system in the last 2 day
  • Yes, I’ve looked many times at the bluetooth and pipewire process to see they are running
  • I’ve tried installing the bluez-utils-compat and bluez-plugins-ps3 packages

Some of the information I could get

In the bluetooth process there is this error entry

set 03 11:35:59 woods bluetoothd[21431]: src/service.c:service_probe() input-hid profile probe failed for 41:42:2A:76:00:F3
set 03 11:37:00 woods bluetoothd[21431]: src/service.c:service_probe() input-hid profile probe failed for 41:42:2A:76:00:F3
`/etc/bluetooth/main.conf` is
[General]

# Default adapter name
# Defaults to 'BlueZ X.YZ'
#Name = BlueZ

# Default device class. Only the major and minor device class bits are
# considered. Defaults to '0x000000'.
Class = 0x000100

# How long to stay in discoverable mode before going back to non-discoverable
# The value is in seconds. Default is 180, i.e. 3 minutes.
# 0 = disable timer, i.e. stay discoverable forever
#DiscoverableTimeout = 0

# Always allow pairing even if there are no agent registered
# Possible values: true, false
# Default: false
#AlwaysPairable = false

# How long to stay in pairable mode before going back to non-discoverable
# The value is in seconds. Default is 0.
# 0 = disable timer, i.e. stay pairable forever
#PairableTimeout = 0

# Use vendor id source (assigner), vendor, product and version information for
# DID profile support. The values are separated by ":" and assigner, VID, PID
# and version.
# Possible vendor id source values: bluetooth, usb (default) or false (disabled)
#DeviceID = bluetooth:1234:5678:abcd

# Do reverse service discovery for previously unknown devices that connect to
# us. For BR/EDR this option is really only needed for qualification since the
# BITE tester doesn't like us doing reverse SDP for some test cases, for LE
# this disables the GATT client functionally so it can be used in system which
# can only operate as peripheral.
# Defaults to 'true'.
#ReverseServiceDiscovery = true

# Enable name resolving after inquiry. Set it to 'false' if you don't need
# remote devices name and want shorter discovery cycle. Defaults to 'true'.
#NameResolving = true

# Enable runtime persistency of debug link keys. Default is false which
# makes debug link keys valid only for the duration of the connection
# that they were created for.
#DebugKeys = false

# Restricts all controllers to the specified transport. Default value
# is "dual", i.e. both BR/EDR and LE enabled (when supported by the HW).
# Possible values: "dual", "bredr", "le"
#ControllerMode = dual
ControllerMode = bredr

# Maximum number of controllers allowed to be exposed to the system.
# Default=0 (unlimited)
#MaxControllers=0

# Enables Multi Profile Specification support. This allows to specify if
# system supports only Multiple Profiles Single Device (MPSD) configuration
# or both Multiple Profiles Single Device (MPSD) and Multiple Profiles Multiple
# Devices (MPMD) configurations.
# Possible values: "off", "single", "multiple"
#MultiProfile = off

# Permanently enables the Fast Connectable setting for adapters that
# support it. When enabled other devices can connect faster to us,
# however the tradeoff is increased power consumptions. This feature
# will fully work only on kernel version 4.1 and newer. Defaults to
# 'false'.
FastConnectable = true

# Default privacy setting.
# Enables use of private address.
# Possible values for LE mode: "off", "network/on", "device"
# Possible values for Dual mode: "off", "network/on", "device",
# "limited-network", "limited-device"
#
# - off: Local privacy disabled.
#
# - network/on: A device will only accept advertising packets from peer
# devices that contain private addresses. It may not be compatible with some
# legacy devices since it requires the use of RPA(s) all the time.
#
# - device: A device in device privacy mode is only concerned about the
# privacy of the device and will accept advertising packets from peer devices
# that contain their Identity Address as well as ones that contain a private
# address, even if the peer device has distributed its IRK in the past.

# - limited-network: Apply Limited Discoverable Mode to advertising, which
# follows the same policy as to BR/EDR that publishes the identity address when
# discoverable, and Network Privacy Mode for scanning.
#
# - limited-device: Apply Limited Discoverable Mode to advertising, which
# follows the same policy as to BR/EDR that publishes the identity address when
# discoverable, and Device Privacy Mode for scanning.
#
# Defaults to "off"
#Privacy = off

# Specify the policy to the JUST-WORKS repairing initiated by peer
# Possible values: "never", "confirm", "always"
# Defaults to "never"
JustWorksRepairing = always

# How long to keep temporary devices around
# The value is in seconds. Default is 30.
# 0 = disable timer, i.e. never keep temporary devices
#TemporaryTimeout = 30

# Enables the device to issue an SDP request to update known services when
# profile is connected. Defaults to true.
#RefreshDiscovery = true

# Default Secure Connections setting.
# Enables the Secure Connections setting for adapters that support it. It
# provides better crypto algorithms for BT links and also enables CTKD (cross
# transport key derivation) during pairing on any link.
# Possible values: "off", "on", "only"
# - "off": Secure Connections are disabled
# - "on": Secure Connections are enabled when peer device supports them
# - "only": we allow only Secure Connections
# Defaults to "on"
#SecureConnections = on

# Enables D-Bus experimental interfaces
# Possible values: true or false
#Experimental = false

# Enables kernel experimental features, alternatively a list of UUIDs
# can be given.
# Possible values: true,false,<UUID List>
# Possible UUIDS:
# d4992530-b9ec-469f-ab01-6c481c47da1c (BlueZ Experimental Debug)
# 671b10b5-42c0-4696-9227-eb28d1b049d6 (BlueZ Experimental Simultaneous Central and Peripheral)
# 15c0a148-c273-11ea-b3de-0242ac130004 (BlueZ Experimental LL privacy)
# 330859bc-7506-492d-9370-9a6f0614037f (BlueZ Experimental Bluetooth Quality Report)
# a6695ace-ee7f-4fb9-881a-5fac66c629af (BlueZ Experimental Offload Codecs)
# 6fbaf188-05e0-496a-9885-d6ddfdb4e03e (BlueZ Experimental ISO socket)
# Defaults to false.
#KernelExperimental = false

# The duration to avoid retrying to resolve a peer's name, if the previous
# try failed.
# The value is in seconds. Default is 300, i.e. 5 minutes.
#RemoteNameRequestRetryDelay = 300

[BR]
# The following values are used to load default adapter parameters for BR/EDR.
# BlueZ loads the values into the kernel before the adapter is powered if the
# kernel supports the MGMT_LOAD_DEFAULT_PARAMETERS command. If a value isn't
# provided, the kernel will be initialized to it's default value.  The actual
# value will vary based on the kernel version and thus aren't provided here.
# The Bluetooth Core Specification should be consulted for the meaning and valid
# domain of each of these values.

# BR/EDR Page scan activity configuration
#PageScanType=
#PageScanInterval=
#PageScanWindow=

# BR/EDR Inquiry scan activity configuration
#InquiryScanType=
#InquiryScanInterval=
#InquiryScanWindow=

# BR/EDR Link supervision timeout
#LinkSupervisionTimeout=

# BR/EDR Page Timeout
#PageTimeout=

# BR/EDR Sniff Intervals
#MinSniffInterval=
#MaxSniffInterval=

[LE]
# The following values are used to load default adapter parameters for LE.
# BlueZ loads the values into the kernel before the adapter is powered if the
# kernel supports the MGMT_LOAD_DEFAULT_PARAMETERS command. If a value isn't
# provided, the kernel will be initialized to it's default value.  The actual
# value will vary based on the kernel version and thus aren't provided here.
# The Bluetooth Core Specification should be consulted for the meaning and valid
# domain of each of these values.
# LE advertisement interval (used for legacy advertisement interface only)
#MinAdvertisementInterval=
#MaxAdvertisementInterval=
#MultiAdvertisementRotationInterval=

# LE scanning parameters used for passive scanning supporting auto connect
# scenarios
#ScanIntervalAutoConnect=
#ScanWindowAutoConnect=

# LE scanning parameters used for passive scanning supporting wake from suspend
# scenarios
#ScanIntervalSuspend=
#ScanWindowSuspend=

# LE scanning parameters used for active scanning supporting discovery
# proceedure
#ScanIntervalDiscovery=
#ScanWindowDiscovery=

# LE scanning parameters used for passive scanning supporting the advertisement
# monitor Apis
#ScanIntervalAdvMonitor=
#ScanWindowAdvMonitor=

# LE scanning parameters used for connection establishment.
#ScanIntervalConnect=
#ScanWindowConnect=

# LE default connection parameters.  These values are superceeded by any
# specific values provided via the Load Connection Parameters interface
#MinConnectionInterval=
#MaxConnectionInterval=
#ConnectionLatency=
#ConnectionSupervisionTimeout=
#Autoconnecttimeout=

# Scan duration during interleaving scan. Only used when scanning for ADV
# monitors. The units are msec.
# Default: 300
#AdvMonAllowlistScanDuration=
# Default: 500
#AdvMonNoFilterScanDuration=

# Enable/Disable Advertisement Monitor interleave scan for power saving.
# 0: disable
# 1: enable
# Defaults to 1
#EnableAdvMonInterleaveScan=

[GATT]
# GATT attribute cache.
# Possible values:
# always: Always cache attributes even for devices not paired, this is
# recommended as it is best for interoperability, with more consistent
# reconnection times and enables proper tracking of notifications for all
# devices.
# yes: Only cache attributes of paired devices.
# no: Never cache attributes
# Default: always
#Cache = always

# Minimum required Encryption Key Size for accessing secured characteristics.
# Possible values: 0 and 7-16. 0 means don't care.
# Defaults to 0
#KeySize = 0

# Exchange MTU size.
# Possible values: 23-517
# Defaults to 517
#ExchangeMTU = 517

# Number of ATT channels
# Possible values: 1-5 (1 disables EATT)
# Default to 1
#Channels = 1

[CSIS]
# SIRK - Set Identification Resolution Key which is common for all the
# sets. They SIRK key is used to identify its sets. This can be any
# 128 bit value or a string value (e.g. product name) which is then hashed.
# Possible Values:
# 16 byte hexadecimal value: 861FAE703ED681F0C50B34155B6434FB
# String value: "My Product Name"
# Defaults to none
#SIRK =

# SIRK Encryption
# Possible values:
# yes: Encrypt SIRK when read
# no: Do not encrypt SIRK when read. (plaintext)
# Defaults to yes
#Encryption = yes

# Total no of sets belongs to this Profile
# Defaults to 0
#Size = 0

# Rank for the device
# Defaults to 0
#Rank = 0

[AVDTP]
# AVDTP L2CAP Signalling Channel Mode.
# Possible values:
# basic: Use L2CAP Basic Mode
# ertm: Use L2CAP Enhanced Retransmission Mode
#SessionMode = basic

# AVDTP L2CAP Transport Channel Mode.
# Possible values:
# basic: Use L2CAP Basic Mode
# streaming: Use L2CAP Streaming Mode
#StreamMode = basic

[Policy]
#
# The ReconnectUUIDs defines the set of remote services that should try
# to be reconnected to in case of a link loss (link supervision
# timeout). The policy plugin should contain a sane set of values by
# default, but this list can be overridden here. By setting the list to
# empty the reconnection feature gets disabled.
#ReconnectUUIDs=00001112-0000-1000-8000-00805f9b34fb,0000111f-0000-1000-8000-00805f9b34fb,0000110a-0000-1000-8000-00805f9b34fb,0000110b-0000-1000-8000-00805f9b34fb

# ReconnectAttempts define the number of attempts to reconnect after a link
# lost. Setting the value to 0 disables reconnecting feature.
#ReconnectAttempts=7

# ReconnectIntervals define the set of intervals in seconds to use in between
# attempts.
# If the number of attempts defined in ReconnectAttempts is bigger than the
# set of intervals the last interval is repeated until the last attempt.
#ReconnectIntervals=1,2,4,8,16,32,64
ReconnectIntervals=1,1,2,3,5,8,13,21,34,55

# AutoEnable defines option to enable all controllers when they are found.
# This includes adapters present on start as well as adapters that are plugged
# in later on. Defaults to 'true'.
AutoEnable=true

# Audio devices that were disconnected due to suspend will be reconnected on
# resume. ResumeDelay determines the delay between when the controller
# resumes from suspend and a connection attempt is made. A longer delay is
# better for better co-existence with Wi-Fi.
# The value is in seconds.
# Default: 2
#ResumeDelay = 2

[AdvMon]
# Default RSSI Sampling Period. This is used when a client registers an
# advertisement monitor and leaves the RSSISamplingPeriod unset.
# Possible values:
# 0x00       Report all advertisements
# N = 0xXX   Report advertisements every N x 100 msec (range: 0x01 to 0xFE)
# 0xFF       Report only one advertisement per device during monitoring period
# Default: 0xFF
#RSSISamplingPeriod=0xFF
system info
System:
  Kernel: 6.1.50-1-lts arch: x86_64 bits: 64 Desktop: KDE Plasma v: 5.27.7
    Distro: EndeavourOS
Machine:
  Type: Laptop System: LENOVO product: 82CF v: Lenovo Legion 5 15IMH05H
  Mobo: LENOVO model: LNVNB161216 v: SDK0R33126 WIN
CPU:
  Info: 6-core model: Intel Core i7-10750H bits: 64 type: MT MCP cache:
    L2: 1.5 MiB
Graphics:
  Device-1: Intel CometLake-H GT2 [UHD Graphics] driver: i915 v: kernel
  Device-2: NVIDIA TU106M [GeForce RTX 2060 Mobile] driver: nvidia
    v: 535.104.05
  Device-3: IMC Networks Integrated Camera driver: uvcvideo type: USB
  Display: x11 server: X.Org v: 21.1.8 driver: X: loaded: modesetting,nvidia
    dri: iris gpu: i915 resolution: 1: 1360x768~60Hz 2: 1920x1080~120Hz
  API: OpenGL v: 4.6 Mesa 23.1.6-arch1.4 renderer: Mesa Intel UHD Graphics
    (CML GT2)
Audio:
  Device-1: Intel Comet Lake PCH cAVS driver: snd_hda_intel
  Device-2: NVIDIA TU106 High Definition Audio driver: snd_hda_intel
  API: ALSA v: k6.1.50-1-lts status: kernel-api
  Server-1: PipeWire v: 0.3.79 status: active
Network:
  Device-1: Intel Comet Lake PCH CNVi WiFi driver: iwlwifi
  IF: wlan0 state: up mac: 8c:c6:81:96:17:98
  Device-2: Realtek RTL8111/8168/8411 PCI Express Gigabit Ethernet
    driver: r8169
  IF: enp7s0 state: down mac: 54:05:db:4b:01:15
Bluetooth:
  Device-1: Intel AX201 Bluetooth driver: btusb type: USB
  Report: btmgmt ID: hci0 state: up address: 8C:C6:81:96:17:9C bt-v: 5.2
1 Like

https://bbs.archlinux.org/viewtopic.php?id=288390
similar?

try installing:
https://aur.archlinux.org/packages/ds4drv

And in cases it helps to use bluetoothctlas root for pairing and first connect.
sudo bluetoothctl
scan on
trust UUID
pair UUID
connect UUID

Already also had ds4drv it installed and auto running from my .xprofile which is what I was also using before reinstalling

But also not working, tried enabling or disabling hidraw, or running as root, and restarting the bluetooth and pipewire/wireplumber process between each attempt

And having qpgraph didn’t work

The thing is, before (in the previous install), even without using ds4drv, the controller would at least pair, but now it does this thing where putting the controller in pairing mode, and trying to pair, with either plasma or bluetoothctl, they says it paired successfully, but from the point of view of the controller it didn’t pair (lights still blinking in pairing mode)

Looking at the bluetooth service it gives the error

set 03 14:05:08 woods bluetoothd[3845]: src/service.c:service_probe() input-hid profile probe failed for 41:42:2A:76:00:F3

by just trying to scan the device. i.e. use Plasma’s ‘add device’ or bluetoothctl scan on, then put the controller in pairing mode, even without trying to connect or anything this error will appear

Searching for it got me to this thread (https://www.linuxquestions.org/questions/linux-from-scratch-13/bluetooth-mouse-and-hid-profile-issues-4175579916-print/) (specifically the last message) which seems to not also be applicable?

The only things changed between the two installs were the SSD model and that the other was from an ISO from the start of the year, which I think neither would really affect this?

rolling release. and we do not setup anything special related to hid/usb and controllers…

UHID (Device Drivers → HID Support → User-space I/O driver support for HID subsystem)

[20:08:48] joekamprad :: SLIMSHADY64  ➜  ~ » zgrep UHID /proc/config.gz                                                
CONFIG_UHID=m

this?

does sudo modprobe uhid helps?

Yep, that’s so for what I know none of the things that changed between installs should have affected it, besides unrelated packages. As for both I used a post-install script and after that almost never install anything more system wide

$ zgrep UHID /proc/config.gz
CONFIG_UHID=m
$ lsmod | grep uhid
uhid                   20480  0

modprobe didn’t seem to change anything

Some more error from bluetoothd when trying to connect if it means anything

set 03 15:16:50 woods bluetoothd[10005]: src/device.c:search_cb() 41:42:2A:76:00:F3: error updating services: Host is down (112)
set 03 15:17:07 woods bluetoothd[10005]: src/device.c:search_cb() 41:42:2A:76:00:F3: error updating services: Input/output error (5)

Btw I’ve said it before, but just to put more emphasis on that so maybe it can narrow down the issue or something.

I can still connect my bluetooth headphones to the computer as normal, but the audio will keep dropping every few seconds. Behaviour that, again, wasn’t happening before. I tested with two pairs, and both are acting the same, so still seems to be a problem on the computer side.