早期 Raspberry Pi 型号(例如 RPi3)的过时说明
以下信息是我最初发布的尝试解决方案,但未能令人满意地播放音频。换句话说,它们在 RPi4 上不起作用。
我按照下面链接页面上的 pulseaudio 安装说明进行操作,但找不到蓝牙控制器,并且命令
power on
导致bluetoothctl
错误No default controller available
。https://wiki.archlinux.org/index.php/Bluetooth_headset#Configuration_via_CLI
当我按照下面链接页面上的说明进行操作时,由于冲突而无法安装
linux-raspberrypi4
。
答案1
这是我找到的一种解决方案,可将蓝牙耳机自动连接到运行 Arch Linux ARM 4.19.71 的 Raspberry Pi 4B。这些说明使用 Raspbian Buster 中的一些源代码来设置 RPi4B 硬件以与 pulseaudio 和 bluetoothctl 配合使用。SuperUser 和 Raspberry Pi Foundation 论坛上都没有对我的问题的回复。需要安装(复制)这些文件才能通过 RPi4B UART 串行通道将音频路由到耳机。
我发布此文的一个原因是想获得有关如何实施此软件解决方案的建议。我认为如果 Buster 可以工作并且它基于新的 RPi4B 硬件,那么它应该可以在 Arch Linux 上运行,并且 Arch 上已经存在一些 uart/serial 文件。
最后一点是,如果这些说明在特定的 RPi4B 单元上存在问题,则有关 RPi4B 蓝牙和 Wi-Fi 硬件故障的报告。我多次使用了以下这些说明,希望能够纠正任何错误。如果您尝试了这些说明但出现问题,请发表评论,我会尝试回复。
下载btuart
和hciuart.service
文件:
https://gist.github.com/frankgould/db38ca5e40b3d2368f8d7765e346f8c5
所有这些安装/配置命令都在终端窗口中输入。
注意:可以使用本文底部“参考”部分中的链接从一个原始文件复制以下说明。这样,您可以复制更多行命令,而无需本页中包含的描述。在这些描述中,我试图描述接下来的命令要完成什么。
任何带有尖括号(或“<”和“>”)的地方都表示您的信息应在不带括号的情况下输入或粘贴。例如,当使用默认用户名时,/home/<your-folder>
应输入为。/home/archpi
archpi
安装pulseaudio
并bluetooth
:
sudo pacman -S pulseaudio-alsa pulseaudio-bluetooth bluez-utils libmm-glib modemmanager
sudo systemctl start ModemManager
sudo systemctl enable ModemManager
sudo systemctl start bluetooth
sudo systemctl enable bluetooth
下面的测试用例命令 - 应该是干净启动,如果不是,请查看下面的命令或您的启动的启动结果中是否有建议journalctl -b
。
systemctl status ModemManager
btuart
将脚本复制到/usr/bin folder
并chmod 777
执行:
sudo cp <folder-containing-btuart-file>/btuart /usr/bin/.
sudo chmod 777 /usr/bin/btuart
复制hciuart.service
到/etc/systemd/system
文件夹以在启动时自动启动 uart 服务:
sudo cp <folder-containing-hciuart.service-file>/hciuart.service /etc/systemd/system/.
添加永久链接serial1
作为串行音频通道的规则ttyAMA0
:udev
sudo nano /etc/udev/rules.d/99_ttyAMA0.rules
KERNEL=="ttyAMA0", SYMLINK+="serial1"
保存上述文件并重新启动以设置永久链接。
reboot
以你的用户身份登录,然后
cd /home/<your-folder>
git clone https://aur.archlinux.org/hciattach-rpi3.git
cd hciattach-rpi3/
makepkg -Asri
笔记:自发布此帖子以来,您可能需要安装任何新的依赖项。例如,patch
可能未安装。要解决此问题,请运行sudo pacman -S patch
并再次尝试makepkg
上述命令。
使用下面的命令进行测试,结果应该显示指示操作安装的帮助文本。
hciattach-rpi3
hciattach
创建一个没有的副本-rpi3
以使用btuart
脚本和启动bluetooth
和hciuart
服务:
sudo cp /usr/bin/hciattach-rpi3 /usr/bin/hciattach
sudo systemctl start hciuart
sudo systemctl enable hciuart
扫描蓝牙耳机并连接
以下部分在许多网站上都有详细记录,并且一致。在下面的这些说明中,启动bluetoothctl
应用程序后,需要输入每个命令,然后按回车/回车键。
输入scan on
指令后,您附近区域内的任何蓝牙设备都应显示为 MAC 地址(例如##:##:##:##:##:##
或01:23:45:67:89:AB
),以及您的耳机名称。您需要在每个 、 和 指令后输入或复制/粘贴pair
MACconnect
地址trust
。
如果您在执行命令时遇到问题power on
,很可能是上面漏掉了某个步骤、我的说明不正确,或者硬件可能出现故障。请确保您的耳机已打开。
在以下说明中,bluetoothctl
应用程序将根据您的耳机和应用程序插入方括号中的内容而有所不同,your-headset-brand
提示出现的位置。最好在运行bluetoothctl
应用程序时尝试这些说明。
$ bluetoothctl
[bluetooth]power on
[bluetooth]scan on
(Multiple bluetooth devices in your area should appear per line with its MAC address)
[bluetooth]pair <your-headset-address-as: ##:##:##:##:##:##>
[your-headset-brand]connect <##:##:##:##:##:##>
[your-headset-brand]trust <##:##:##:##:##:##>
启用蓝牙自动连接功能
这是安装的最后阶段,将自动连接到您的蓝牙耳机。这些说明应使您的 RPi4B 能够识别您的蓝牙耳机何时打开并将其设置为音频输出设备。
sudo nano /etc/pulse/default.pa
在列表顶部附近的某处添加以下两行:
# Automatically switch to newly-connected devices
load-module module-switch-on-connect
保存上述文件。取消注释并AutoEnable=true
在文件的[Policy]部分中设置:
sudo nano /etc/bluetooth/main.conf
保存上述文件并重新启动以启用自动连接功能。
reboot
关闭耳机,等待 RPi4B 启动 Windows 桌面,然后重新打开耳机。耳机会发出哔哔声,表示耳机会自动连接。这些说明基于以下耳机型号,此参考不会产生任何收入。它仅作为用于测试上述说明的参考设备。 iJoy 可充电无线蓝牙耳罩式折叠耳机
耳机连接后,您应该能够通过您最喜欢的音频播放应用程序(如)播放音频文件vlc
。如果您遇到音频问题,请尝试pulseaudio
在主菜单的“声音和视频”下以 PulseAudio 音量控制为名运行该应用程序。
参考文献和来源
上述说明的源代码作为原始脚本位于页面底部: https://gist.github.com/frankgould/db38ca5e40b3d2368f8d7765e346f8c5#file-raw-script
Exton RaspArch Rpi4 Arch Linux ARM 4.19 Build 190809:http://raspex.exton.se/?p=1214
答案2
在运行带有内核的 Arch Linux 上的 Kodi 的 4B 上5.15.24-1-rpi-ARCH
,我必须使用以下步骤来运行蓝牙并连接到 Bose NC 700 耳机:
安装
bluez
和pulseaudio-bluetooth
相关软件包:sudo pacman -S bluez bluez-utils pulseaudio-bluetooth
/boot/config.txt
通过取消注释或添加以下行来启用内核蓝牙支持(如蓝牙-rpb 的自述文件):dtparam=krnbt=on
如果没有这个,
rfkill
就不会列出任何蓝牙设备,而且如果bluetooth.service
启动了,它也不会做任何事情。/etc/bluetooth/main.conf
按照建议取消注释以下行这个 Arch Linux ARM 论坛帖子:AutoEnable=true
这应该在
[Policy]
章节中。完整示例:[Policy] # AutoEnable defines option to enable all controllers when they are found. # This includes adapters present on start as well as adapters that are plugged # in later on. Defaults to 'false'. AutoEnable=true
重启。这些步骤足以使蓝牙设备显示在 中
rfkill
,并bluetoothctl
开始工作。此外,为了连接到 Bose NC 700,我必须按照建议将控制器模式切换
bredr
到/etc/bluetooth/main.conf
这个Unix和Linux答案否则,耳机只会显示低能耗模式并且无法连接:[General] # Restricts all controllers to the specified transport. Default value # is "dual", i.e. both BR/EDR and LE enabled (when supported by the HW). # Possible values: "dual", "bredr", "le" ControllerMode = bredr
只需重新启动
bluetooth.service
就足以进行此更改,但我还是重新启动了。
现在我可以使用 配对耳机bluetoothctl
,并且 Kodi 通过 Pulseaudio 自动接收音频设备的变化。