bluetooth-autoconnect icon indicating copy to clipboard operation
bluetooth-autoconnect copied to clipboard

Pipewire

Open nottledim opened this issue 2 years ago • 3 comments

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".

nottledim avatar Apr 14 '22 14:04 nottledim

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 avatar Aug 16 '22 03:08 protist

@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.

jrouleau avatar Sep 13 '22 08:09 jrouleau

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.

protist avatar Sep 15 '22 05:09 protist