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

Nik*_*van 39 bluetooth bug-reporting 18.04

蓝牙耳机工作正常,直到睡眠。然而,从睡眠中恢复后,它们似乎在断开连接之前连接了一小会。在 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
Run Code Online (Sandbox Code Playgroud)

lub*_*dza 35

将 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
Run Code Online (Sandbox Code Playgroud)

有问题的蓝牙小程序的解决方法(特定于 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
Run Code Online (Sandbox Code Playgroud)

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

rfkill block 12
rfkill unblock 12
Run Code Online (Sandbox Code Playgroud)

并且 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
Run Code Online (Sandbox Code Playgroud)

rfkill 列表输出中 hci0 旁边的 ID 号似乎在每次挂起/恢复后都会增加。使用 BT 菜单禁用/启用 BT 应该会更改输出(“软阻止:是”用于通过菜单禁用 BT),但它不会。我的猜测是小程序记住了错误的设备 ID,因此试图启用不再存在的设备。

  • 只是更新 bluez 包为我做了,谢谢! (2认同)
  • 更新:它仅适用于 1 个睡眠周期。但是,经过多次之后,我又回到了同样的问题。 (2认同)

小智 11

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

sudo service bluetooth restart
Run Code Online (Sandbox Code Playgroud)

睡醒后


Lau*_*ent 8

我运行 19.04 并遇到此问题。我有一个 BT 鼠标,所以它真的很烦人。

要增强@hinxnz 答案:

打开一个新文件:

sudo nano /lib/systemd/system-sleep/bt
Run Code Online (Sandbox Code Playgroud)

粘贴此脚本:

sudo nano /lib/systemd/system-sleep/bt
Run Code Online (Sandbox Code Playgroud)

最后使其可执行

chmod +x /lib/systemd/system-sleep/bt
Run Code Online (Sandbox Code Playgroud)