蓝牙在从睡眠状态恢复后无法工作,Ubuntu 18.04 LTS。

蓝牙耳机在睡眠状态下工作正常。然而,在从睡眠中恢复后,它们似乎会在连接片刻后断开。在blueman上,显示的错误是“资源暂时不可用”。这个问题只在更新到18.04 LTS之后出现。
以下是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

3我在使用JBL Go音箱和全新安装的18.04版本时遇到了同样的问题。无论是重新启动bluetooth.service,还是移除btusb模块并重新插入都没有起作用。我不得不重新启动电脑。 - solsTiCe
我有同样的问题,每次从睡眠中恢复时,Ubuntu 有时会表现得好像根本没有蓝牙(这就是为什么重新启动服务不起作用的原因)。有时候,进入睡眠然后再次恢复可以解决这个问题。 - VFreguglia
由于某种原因,休眠根本无法工作,所以我无法验证。 - Nikhil Sadasivan
请编辑以包括从终端运行lsusb命令的结果。 - Jeremy31
我也有同样的问题。为了让扬声器再次工作,我不得不重新启动。 - DarrenRhodes
9个回答

升级 bluez 至 >=5.28.2

目前,18.04 版本的 bluez 软件包存在一些问题;较新版本可从此 PPA 获取:https://launchpad.net/~bluetooth/+archive/ubuntu/bluez

sudo add-apt-repository ppa:bluetooth/bluez
sudo apt install bluez

解决有问题的蓝牙小程序(特定于Unity?)的方法

这可能是@solstice提到的问题 - 在从睡眠中恢复后,BT菜单小程序不允许我启用蓝牙。无论切换开关是关闭还是打开,蓝牙图标都是禁用的,并且rfkill输出没有变化:

$ rfkill list
0: phy0: Wireless LAN
    Soft blocked: no
    Hard blocked: no
12: hci0: Bluetooth
    Soft blocked: no
    Hard blocked: no

你可以通过手动运行(替换为您自己的ID)来切换蓝牙。
rfkill block 12
rfkill unblock 12

现在BT小程序应该能正确识别它了。此时,您应该能够连接到您的设备。目前我使用一个脚本将其暂时拼凑在一起,以便在恢复后自动执行此操作。
$ 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

在rfkill列表输出中,hci0旁边的ID号似乎在每次挂起/恢复后都会递增。使用蓝牙菜单禁用/启用蓝牙应该会改变输出(通过菜单禁用蓝牙时显示“软阻止:是”),但实际上并没有。我猜测是小程序记住了错误的设备ID,因此试图启用一个不存在的设备。

2只是更新了bluez软件包,就解决了我的问题,谢谢! - Nikhil Sadasivan
同样更新蓝牙驱动程序,效果棒极了! - Sanketh Katta
2更新:它只在一个睡眠周期内有效。然而,经过多次尝试后,我又回到了同样的问题。 - Sanketh Katta
除非这个问题已经通过更新修复,否则bluez更新对我有效。 - DarrenRhodes
使用blueman applet(sudo apt install blueman)和更新的bluez(来自ppa)对我来说运行良好。 - Mark
顺便说一句,仅仅升级到bluez >= 5.28.2是不够的。我在Ubuntu的Bionic软件源中使用bluez 5.48时遇到了这个问题。从PPA安装的5.50版本似乎修复了这个问题。 - desilvai
这不仅解决了简历问题,而且似乎还能阻止苹果魔术触控板的连接中断。我想知道为什么在Ubuntu中没有这个功能。 - Tim Richardson
可以确认这个修复方案也解决了我在Ubuntu 19.04上的蓝牙断连问题。 - Tassos Bassoukos
很遗憾,在focal/20.04上出现了问题:存储库'http://ppa.launchpad.net/bluetooth/bluez/ubuntu focal Release'没有Release文件。在launchpad git上并不存在一个名为ppa-cosmic的分支,正如主页所说的那样。不过,确实存在一个名为focal的分支。 - Pablo Bianchi

对我来说,这个问题可以通过运行来解决。
sudo service bluetooth restart

醒来后


1在运行Ubuntu 20.04.1 LTS时,这是对我有效的方法 :) - dance2die
啊,对我在Ubuntu 21.04上有效! - rainyday

我使用19.04版本并且遇到了这个问题。我使用的是蓝牙鼠标,所以真的很烦人。

对于 @hinxnz 的回答进行增强:

打开一个新文件:

sudo nano /lib/systemd/system-sleep/bt

复制并粘贴此脚本:
#!/bin/sh

case $1 in
  post)
    modprobe -r btusb
    sleep 1
    service bluetooth restart
    sleep 1
    modprobe btusb
    ;;
esac


最后将其设置为可执行文件。
chmod +x /lib/systemd/system-sleep/bt

1在Ubuntu 22.04上对我有效。 - Andrei B
使用modprobe -r btusb(然后重新启用模块)对我在Opensuse Tumbleweed 2023上也起作用了。 - SomeoneSomewhereSupportsMonica

在终端中尝试(无需root权限)
btnum=`rfkill list|grep hci0| cut -f 1 -d ':'`
rfkill block $btnum
rfkill unblock $btnum

这可能与gnome-control-center中的一个错误有关。不确定。我发现这个方法可以解决那个错误,也许对你也有用。

很遗憾,这对我来说并没有解决问题。不过还是谢谢你分享! - Nikhil Sadasivan

这是我在18.04 LTS上使其正常工作的方法。
更新了蓝牙:
sudo add-apt-repository ppa:bluetooth/bluez
sudo apt install bluez

创建新文件:
sudo nano /lib/systemd/system-sleep/bt

写下并保存:

#!/bin/sh

modprobe -r btusb
sleep 1
service bluetooth restart
sleep 1
modprobe btusb

更改的权限:
sudo chmod +x /lib/systemd/system-sleep/bt

1如果你只想让这个文件可执行,使用chmod +x会是一个更安全的解决方案。这样做将允许系统上的任何用户通过替换该文件的内容来以root身份运行任何东西。 - Steeve McCauley
保存此脚本后,我的Dell XPS(18.04lts)无法进入睡眠状态。它似乎会进入睡眠状态,但2秒钟后就会自动唤醒,然后就这样了。 - razor
永远不要使用chmod 777。除非你确切知道自己在做什么。你应该将脚本包裹在case $1 in post)中,这样它只会在唤醒后运行。此外,在脚本中不需要sudo。 - Laurent

基于此答案,适用于pulseaudio和Ubuntu 18

sudo apt-get install pulseaudio-module-bluetooth
pactl load-module module-bluetooth-discover

对我来说,将蓝牙适配器更换到另一个USB端口有所帮助。醒来后不久,我听到耳机断开连接。我的前面板USB在唤醒期间有短暂的断电时间,从而导致设备断开和移除。



在我的情况下,laptop-mode-tools 是罪魁祸首:

$ sudo apt remove laptop-mode-tools


请不要在多个帖子中发表“同样的答案”。相反,如果这些帖子彼此非常相似,请标记其他帖子为其中一个帖子的副本。仅仅将相同的答案重复发布到多个问题上会引起很多噪音。 - Thomas Ward