蓝牙

来自 Alpine Linux
此材料正在制作中...

正在制作中
(最后编辑者:Rqpt,于 2024 年 10 月 5 日。)

Bluetooth 是用于蜂窝电话、计算机和其他电子设备短距离无线互连的标准。BlueZ 是 Linux 的蓝牙协议栈的实现,它由 bluez 软件包提供。

本文介绍了蓝牙控制器和设备的基本安装。

先决条件和基本安装

先决条件

Todo: 使用 mdev 测试蓝牙


eudev 应该被安装和设置

# setup-devd udev

基本安装

基本安装步骤如下

  1. 安装 bluez
    • 如果您需要像 hcitool 这样的已弃用的工具,可选安装 bluez-deprecated
  2. 加载 btusb 内核模块
  3. 添加用户到 lp
  4. 启动并启用 Bluetooth 服务

# apk add bluez # apk add bluez-deprecated # modprobe btusb # adduser $USER lp # rc-service bluetooth start # rc-update add bluetooth default

现在,使用 rfkill 检查蓝牙无线电发射器的状态

$ rfkill list bluetooth

它应该返回类似于以下内容

0: hci0: Bluetooth
        Soft blocked: no
        Hard blocked: no

如果设备被列为已阻止,可以使用相同的工具取消阻止

# rfkill unblock bluetooth

Note: 可能需要重启 Bluetooth 服务才能继续。

前端

有几个前端可用

配对

使用 bluetoothctl

首先启动 bluetoothctl 并按照以下基本步骤操作

$ bluetoothctl

提示符应显示

[bluetooth]#

列出可用的控制器

[bluetooth]# list

显示关于控制器的信息

[bluetooth]# show controller_mac_address

设置默认控制器

[bluetooth]# select controller_mac_address

开启控制器电源

[bluetooth]# power on

启用代理并将其设置为默认

[bluetooth]# agent on
[bluetooth]# default-agent

将控制器设置为可被发现(临时 3 分钟)和可配对

[bluetooth]# discoverable on
[bluetooth]# pairable on

扫描设备

[bluetooth]# scan on

将设备置于配对模式。这通常涉及按下一个按钮或组合按钮,通常持续几秒钟。

发现设备 MAC 地址

[bluetooth]# devices

与设备配对

[bluetooth]# pair device_mac_address

如果提示,输入 PIN 码

[agent] PIN code: ####

信任设备

[bluetooth]# #trust device_mac_address

连接到设备

[bluetooth]# connect device_mac_address

显示关于设备的信息

[bluetooth]# info device_mac_address

设备现在已配对

[bluetooth]# quit

配置

设置适配器电源状态

如果您希望适配器不自动启用(例如,在您希望节省电池的便携式设备上),请在 /etc/bluetooth/main.conf[Policy] 部分中设置 AutoEnable=false


/etc/bluetooth/main.conf 的内容

[Policy] ... AutoEnable=false ...

电池报告

可以启用实验性功能以报告设备电池电量


/etc/bluetooth/main.conf 的内容

[General] ... Experimental=true ...

故障排除

由于可用的蓝牙硬件种类繁多,因此在尝试安装、激活或查找蓝牙设备时,您可能会收到错误。

“No default controller available” 错误

在按照这些或其他说明操作后,您运行 bluetoothctl 并遇到以下情况

[bluetooth]# list
[bluetooth]# show
No default controller available

一种可能的解决方案是您缺少固件驱动程序。

尝试运行以下命令以发现问题的根源

# dmesg | grep -i bluetooth | grep -i firmware

有许多可用的固件软件包可能解决此问题(请参阅 linux-firmware-*)。

另一种可能的解决方案是安装 hidapi 并加载模块

# apk add hidapi # modprobe uhid

也可能需要创建配置以在启动时加载 uhid 和 btusb 内核模块

cat <<EOF > /etc/modules-load.d/uhid.conf #加载 uhid 内核模块: uhid EOF

cat <<EOF > /etc/modules-load.d/btusb.conf #加载 btusb 内核模块: btusb EOF

“org.bluez.Error.NotAvailable br-connection-profile-unavailable”

尝试连接蓝牙 HID 设备时,有时会产生 br-connection-profile-unavailable 错误,但未加载 uhid 内核模块。HID 设备包括键盘和耳机上的音量按钮(有时作为键盘呈现给操作系统)、鼠标、游戏控制器、字母数字显示器等。

当启用用户空间 HID 支持时,具有在用户空间中实现的驱动程序的 USB HID 设备需要 uhid 内核模块。

在此错误发生后使用 modprobe 加载 uhid 并不总是能解决问题。

尝试设置 uhid 在启动时加载,然后重启

# cat <<EOF > /etc/modules-load.d/uhid.conf #加载 uhid 内核模块: uhid EOF # reboot

或者,可以在 /etc/bluetooth/input.conf 中完全禁用用户空间 HID 功能,而支持内核 HIDP 驱动程序

UserspaceHID=false

如果运行 pipewire,您也可以尝试安装 pipewire-spa-bluez,看看是否能解决问题。

无法控制蓝牙扬声器音量 / 蓝牙输出已静音 (Pulseaudio)

可以自动将音频输出和音量控制切换到上次连接的设备。

这可以解决在蓝牙设备之间切换时控制扬声器音量的问题。

/etc/pulse/default.pa 的末尾追加以下行


/etc/pulse/default.pa 的内容

... ###自动将音频切换到最近连接的设备 (蓝牙, HDMI, USB) load-module module-switch-on-connect

参见