从睡眠状态恢复后蓝牙不工作,Ubuntu 18.04 LTS

从睡眠状态恢复后蓝牙不工作,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

答案1

更新 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 菜单小程序不允许我从睡眠状态恢复后启用蓝牙。无论切换开关是关闭还是打开,BT 图标都会被禁用,并且 rfkill 输出不会改变:

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

您可以通过运行(替换您自己的 ID)手动切换 BT:

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 号似乎在每次暂停/恢复后都会增加。使用 BT 菜单禁用/启用 BT 应该会改变输出(通过菜单禁用 BT 时显示“软阻止:是”),但事实并非如此。我猜是小程序记住了错误的设备 ID,因此试图启用不再存在的设备。

答案2

对于我来说,这个问题可以通过运行来解决

sudo service bluetooth restart

醒来后

答案3

我运行的是 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

答案4

这是我在 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

相关内容