Open nottledim opened 2 years ago
Does this currently not work with pipewire at all? I'm on Arch Linux using pipewire, pipewire-pulse, and wireplumber, and it doesn't seem to work for me. I installed the package, enabled and started bluetooth-autoconnect.service
, then tried the following, but it didn't seem to work.
$ systemctl --user enable --now pulseaudio-bluetooth-autoconnect
Unit /usr/lib/systemd/user/pulseaudio-bluetooth-autoconnect.service is added as a dependency to a non-existent unit pulseaudio.service.
My Bluetooth headset didn't automatically connect next time I tried.
I then tested modifying the pulseaudio-bluetooth-autoconnect.service
, changing all references of pulseaudio.service
to pipewire.service
. I started the service, but it immediately completed.
$ systemctl --user status pulseaudio-bluetooth-autoconnect
○ pulseaudio-bluetooth-autoconnect.service - Bluetooth autoconnect service for pipewire
Loaded: loaded (/usr/lib/systemd/user/pulseaudio-bluetooth-autoconnect.service; enabled; preset: enabled)
Active: inactive (dead) since Mon 2022-08-15 15:23:06 AEST; 20h ago
Duration: 85ms
Process: 3262118 ExecStart=/usr/bin/bluetooth-autoconnect (code=exited, status=0/SUCCESS)
Main PID: 3262118 (code=exited, status=0/SUCCESS)
CPU: 77ms
Aug 15 15:23:06 my-hostname systemd[1098]: Started Bluetooth autoconnect service for pipewire.
The service file contains the following:
ExecStart=/usr/bin/bluetooth-autoconnect
So I tested running this manually. Again it just completes immediately. I'm not really sure if this is the command we should be running, so I tested bluetooth-autoconnect -d
instead. This indeed stayed open… but my headset didn't automatically connect next time I tried.
On further testing, I should note that bluetooth-autoconnect
and bluetooth-autoconnect -d
do work if have recently used Bluetooth. However, after not using Bluetooth for a while, the latter does not work at least. Perhaps relevant, I do have Bluetooth's auto-suspend disabled.
$ cat /proc/cmdline
BOOT_IMAGE=/vmlinuz-linux root=UUID=<redacted> rw loglevel=3 cryptdevice=UUID=<redacted>:cryptroot:allow-discards root=/dev/mapper/cryptroot btusb.enable_autosuspend=n
@protist
This script is effectively the same as runnning bluetoothctl connect <device_mac>
for every paired+trusted device either as a oneshot with bluetooth-autoconnect
or whenever an adapter powers on with bluetooth-autoconnect -d
. This will not magically connect devices that do not announce themselves or are brought in from out of range. Oneshot attempts can be triggered manually whenever you like with bluetooth-autoconnect
(e.g. I have the bluetooth icon on my bar trigger bluetooth-autoconnect
when clicked for manual "scanning"). The daemon mode is used to connect when an adapter is powered on: pimarily during boot or when resuming from sleep/hibernation.
The pulseaudio-bluetooth-autoconnect
service is intended to be a oneshot script that triggers a connection attempt after pulseaudio is started as headsets fail to connect prior to the audio system running and is only relevant during boot. A similar oneshot service would likely be needed for pipewire to autoconnect during boot. I do not have any systems running pipewire so I am unable to test this at this time.
Again, this script is effectively just a wrapper around bluetoothctl connect <device_mac>
. Other than providing a convenience service to run itself after pulseaudio starts (manually running bluetooth-autoconnect
once after boot would have the same effect), it has nothing to do with which audio system you use. Issues connecting to your devices (i.e. bluetooth-autoconnect
says connecting to device ...
but the connection fails) are outside the scope of what we can support here. If a connection attempt is not made, ensure that the device is both paired and trusted and that the adapter is connected and powered on.
Thank you @jrouleau for the detailed explanation.
Sorry, I should have mentioned that I had subsequently gotten my system working. I previously had the kernel parameter btusb.enable_autosuspend=n
, but after changing the =n
to =0
, it now works as expected. I think I had previously found advice to use =n
somewhere, but this didn't seem to work. Now, even without bluetooth-autoconnect
, it seems to autoconnect fine in KDE Plasma.
Thanks again.
pulseaudio-bluetooth-autoconnect references pulseaudio in systemctl enable. If one is using pipewire then pulseaudio is not installed. Need to accommodate the "new kid on the block".