概述
家里有个不带蓝牙的音箱,而带蓝牙的小爱同学Mini又居然是单声道,因此,为了让音箱能连上蓝牙,只能掏出我珍藏已久的树莓派4了。
我的Raspberry Pi 4装的是ArchLinux AArch64,至于别的发行版不是很清楚,不过应该可以作为参考使用
安装
bluez
可以使用pacman
或者yay
等其他包管理直接安装(官方源就有)
bluez-alsa-git
这个包仅在AUR源有,我使用的是yay
,因此能够直接安装。
也可以通过以下步骤手动编译安装:
git clone https://aur.archlinux.org/bluez-alsa-git.git
makepkg -sri
配置
config.txt
树莓派默认是未启动Bluetooth蓝牙和Audio音频功能的,我们需要在/boot/config.txt
内增加以下语句来打开蓝牙和音频,并强制将音频输出改为3.5mm接口:
dtparam=krnbt=on,audio=on
audio_pwm_mode=2
hdmi_drive=1
hdmi_ignore_edid_audio=1
bluez
首先,我们需要设置bluetooth.service
为自启动:
sudo systemctl enable bluetooth
然后,编辑/etc/bluetooth/main.conf
,修改以下选项来实现蓝牙设备的开机自启:
[General]
Name = RaspberryPi4 # 可以改为自己的设备名称
DiscoverableTimeout = 0
Discoverable = true # 默认开启可发现模式(实测可能没用)
[Policy]
AutoEnable = true # 自动启动蓝牙设备
bluez-alsa
接下来,我们需要对bluez-alsa
进行配置。
编辑/etc/default/bluealsa
:
OPTIONS="-p a2dp-source -p a2dp-sink -p hfp-hf -p hfp-ag -p hsp-hs -p hsp-ag"
这一步的作用是设置bluez-alsa
的默认支持配置。
之后,我们编辑/etc/dbus-1/system.d/bluealsa.conf
,在其中的<policy user="root">
下增加两行:
<allow send_destination="org.bluealsa.sink" />
<allow send_destination="org.bluealsa.source" />
然后我们设置bluez-alsa
自启动:
sudo systemctl enable bluealsa.service
为了能够让bluealsa-aplay
自启动,我们还需要增加一个/usr/lib/systemd/system/bluealsa-aplay.service
服务:
[Unit]
Description=Bluealsa Aplay daemon
Documentation=https://github.com/Arkq/bluez-alsa/
After=bluealsa.service
Requires=bluealsa.service
[Service]
Type=simple
ExecStart=/usr/bin/bluealsa-aplay
Restart=on-failure
[Install]
WantedBy=bluetooth.target
这个服务用于将我们蓝牙传输的音频,发送到ALSA设备:
sudo systemctl enable bluealsa-aplay
最后,重启树莓派。
连接蓝牙
树莓派重启后,先给自己当前用户增加bluez
的用户组lp
:
sudo usermod -a -G lp ricky
通过bluetoothctl
,进行蓝牙配置:
$ sudo bluetoothctl
[Bluetooth] discoverable on
然后手机搜索并连接树莓派蓝牙,期间会出现几个(yes/no)
的询问,一致yes
就行。
最后,设置信任设备:
[Bluetooth] trust xx:xx:xx:xx
这样,我们就可以将手机通过蓝牙连接到树莓派播放音乐了。