I had issues with the Jbl Tour One M3 that sound similar, and apparently it's caused by some sort of bug or race condition with BLE in Linux, or at least Ubuntu 25.04. There are several options:
Disabling Bluetooth LE
Setting ControllerMode = bredr in /etc/bluetooth/main.conf fixes it for me. This disables Bluetooth LE, and makes the "Audio Sink" appear reliably in bluetoothctl info.
This change can cause issues with other devices. For example, I can't connect my bluetooth mouse anymore.
Restarting Wireplumber
Even with it set to dual (default), it is possible to get it to connect audio by running
systemctl --user restart wireplumber
a few times. So chances are that a wireplumber config change or a newer wireplumber version might improve this situation. Looks like a race condition.
busctl
busctl call org.bluez /org/bluez/hci0/dev_88_92_CC_64_B1_BD org.bluez.Device1 ConnectProfile s "0000110b-0000-1000-8000-00805f9b34fb"
works for me as well. The dev_... address can be found via bluetoothctl devices. The uuid is taken from bluetoothctl info 88:92:CC:64:B1:BD next to UUID: Audio Sink, and is the same for both headphones I checked.
Automatic busctl call
You can automate this. Create /opt/connect-jbl.sh with
#!/bin/bash
sleep 1
busctl call org.bluez /org/bluez/hci0/dev_88_92_CC_64_B1_BD org.bluez.Device1 ConnectProfile s "0000110b-0000-1000-8000-00805f9b34fb"
(Insert your bluetooth address into the busctl command next to dev_)
Make it executable:
chmod +x /opt/connect-jbl.sh
And create sudo nano /usr/lib/udev/rules.d/99-connect-jbl.rules with
ACTION=="add", SUBSYSTEM=="bluetooth", RUN+="/opt/connect-jbl.sh"
Then do
sudo udevadm control --reload-rules
and if you want to debug problems, use
sudo udevadm control --log-priority=debug
udevadm monitor --property
or
journalctl -f
And then connect the headphones.