Bluetooth doesn't work after resuming from sleep, Ubuntu 18.04 LTS
Bluetooth earphones work fine until sleep. After resuming from sleep however, they appear to connect for a brief moment before disconnecting. On blueman, the error given is Resource temporarily unavailable. This issue arose only after updating to 18.04 LTS.
Here's the terminal output for lsusb:
Bus 001 Device 002: ID 8087:8001 Intel Corp.
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 003 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 002 Device 004: ID 1bcf:0002 Sunplus Innovation Technology Inc.
Bus 002 Device 003: ID 04f2:b477 Chicony Electronics Co., Ltd
Bus 002 Device 002: ID 0a5c:21f1 Broadcom Corp. HP Portable Bumble Bee
Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Solution 1:
update bluez to >=5.28.2
18.04 ships with a buggy bluez package for now; newer version is available from this PPA: https://launchpad.net/~bluetooth/+archive/ubuntu/bluez:
sudo add-apt-repository ppa:bluetooth/bluez
sudo apt install bluez
workaround for buggy Bluetooth applet (Unity specific?)
This is probably the issue @solstice mentioned - BT menu applet doesn't let me enable Bluetooth after resuming from sleep. No matter if the toggle switch is off or on, the BT icon is disabled, and rfkill output doesn't change:
$ rfkill list
0: phy0: Wireless LAN
Soft blocked: no
Hard blocked: no
12: hci0: Bluetooth
Soft blocked: no
Hard blocked: no
You can toggle BT manually by running (substitute your own ID):
rfkill block 12
rfkill unblock 12
and BT applet should pick it up correctly now. At this point, you should be able to connect to your devices. For now I've hacked it together using a script that does this automatically after resume:
$ cat /lib/systemd/system-sleep/bt
#!/bin/sh
case $1 in
post)
sleep 5
rfkill block `rfkill list | grep hci | cut -d: -f1`
sleep 1
rfkill unblock `rfkill list | grep hci | cut -d: -f1`
;;
esac
The ID number next to hci0 in rfkill list output seems to increment after every suspend/resume. Disabling/enabling BT using the BT menu should change the output ('soft blocked: yes' for BT disabled via menu), but it doesn't. My guess is that the applet remembers the wrong device ID and is thus trying to enable a device that no longer exists.
Solution 2:
For me this problem can be resolved by running
sudo service bluetooth restart
after waking from sleep
Solution 3:
I run 19.04 and have this issue. I have a BT mouse so it really is annoying.
To enhanced @hinxnz answer:
Open an new file:
sudo nano /lib/systemd/system-sleep/bt
Paste in this script:
#!/bin/sh
case $1 in
post)
modprobe -r btusb
sleep 1
service bluetooth restart
sleep 1
modprobe btusb
;;
esac
An finally make it executable
chmod +x /lib/systemd/system-sleep/bt
Solution 4:
Try in a terminal (no root needed)
btnum=`rfkill list|grep hci0| cut -f 1 -d ':'`
rfkill block $btnum
rfkill unblock $btnum
This might be related to a bug in gnome-control-center. Not sure. I have found this to work around that said bug and may be yours too.