失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > Linux不能连接蓝牙音箱 【搁浅St|开发日记】彻底解决dueros连接蓝牙音箱的问题...

Linux不能连接蓝牙音箱 【搁浅St|开发日记】彻底解决dueros连接蓝牙音箱的问题...

时间:2022-02-26 10:22:30

相关推荐

Linux不能连接蓝牙音箱 【搁浅St|开发日记】彻底解决dueros连接蓝牙音箱的问题...

蓝牙音箱折腾了两个星期,又有了一些新的体会

(之前的见识比较浅薄,所以重新改写了这个帖子)

先说结论:蓝牙音箱连接操作略显复杂,声音有延迟,所以还是推荐买个有线的

思路:

dueros镜像基于的是raspberryjessie镜像来的,蓝牙的解决方案用的是pulseaudio , pulseaudio不推荐使用root账号,而我们duer必须使用root账号,这就是需要我们操作的地方.我们只需要设置pulseaudio允许root身份连接,然后将duer的声音输出设置为pulseaudio即可

以下所有命令都是以pi身份登录执行,所以命令前面有$符号

基础硬件和软件

树莓派3B

小米蓝牙音箱

dueros镜像

pulseaudio和bluez都是用的系统自带版本

一 连接蓝牙音箱

首先我们连接蓝牙音箱,当我们直接登录进去终端后,如果直接使用bluetoothctl连接蓝牙的时候,会报错Failed to connect: org.bluez.Error.Failed.

所以,先执行以下命令

$sudopulseaudio-D

上面的命令是将pulseaudio启动,如果你事前执行了`pulseaudio --start`命令,那就执行`pulseaudio --kill`先杀死.

原因是`pulseaudio --start`启动的话,不允许root身份连接,而duer都是root身份连接的.而且它会占用声卡资源,所以我们必须先杀死它,再用`sudo pulseaudio -D`启动

接着执行,开始连接蓝牙音箱

$sudoblutoothctl

如果你之前已经连过蓝牙了,直接connect就行不需要再走一次配对的流程.如果是第一次连接,则需要配对:

poweron

agenton

scanon

pair蓝牙音箱mac

trust蓝牙音箱mac

connect蓝牙音箱mac

scanoff

二 测试蓝牙音箱播放音乐

连接蓝牙音箱后,我们使用mplayer来测试音乐播放是否ok,如果未安装mplayer,使用`sudo apt-get install mplayer`即可,随便找个音乐mp3文件播放试试.

正常情况下直接`mplayer qingtian.mp3`可能不成功,那是因为pulseaudio当前对应有多个音频输出设备,我们需要手动指定pulseaudio从蓝牙音箱输出.

$sudopacmdlist-sinks

上述命令是用来输出pulseaudio当前所有可用的输出设备的,找到其中叫bluez_sink.AA_BB_CC_DD_EE_FF,这个就是你的蓝牙音箱,其中AA_BB_CC_DD_EE_FF表示你的蓝牙音箱mac

$sudopacmdset-default-sinksbluez_sink.AA_BB_CC_DD_EE_FF

顺利的话,使用`mplayer qingtian.mp3`就可以出声了(如果声音太大,使用sudo alsamixer调节音量大小).

不顺利的话:

如果`sudo pacmd list-sinks`找不到bluez开头的,那就是之前的流程不通,请检查是否真的是使用`sudo bluetoothctl`连上了蓝牙音箱,如果是蓝牙音箱自动连接上的(有可能是非root身份),就先断开再用`sudo bluetoothctl`连接蓝牙

如果还是不能出声,可以尝试把root加入audio和pulse组,因为我加了这两个组,这个方法待验证

三 修改dueros和pulse配置

走到这一步,你的前两步流程肯定是通的,否则你不用往下看了

我们首先要关掉duer,关掉duer的开机自动启动

#sudosystemctlstopduer

#sudosystemctldisableduer

因为开机自启动的话,蓝牙还没就绪,肯定不行,我们只能手动启动duer.这也是蓝牙音箱的一个坑之一...

接下来,修改duer的配置文件,文件是`/etc/start_duer.sh`,这个文件的作用是: 播放开机音乐,检测网络,最后启动duer的相关服务.我们修改其中aplay行删掉其中的`-Dplughw:2,0`

修改前

aplay-Dplughw:2,0/duer/appresources/startup.wav

修改后

aplay/duer/appresources/startup.wav

其中`-Dplughw:2,0`是用来强制指定输出设备的,那样蓝牙音箱就听不到duer启动声音了.删掉之后,我们让aplay使用默认输出设备即可.

再接着,我们修改duer的默认输出配置,编辑/duer/appresources/app_config.json

我们将audioplayer_playback_device和main_playback_device的值由default改成pulse

ps:是pulse,不是pulseaudio,这个pulse你可以输入`sudo pacmd list-sinks`,列出所有的设备,找到这个叫做pulse的

也就是,指定让duer默认声音走pulseaudio输出

四 可以开始测试了

做完前三步,先重启树莓派

以下所有登录,都是pi账户登录的终端

首先打开两个终端窗口A和B

接着在A输入`sudo pulseaudil -D`

接着在B终端输入`sudo bluetoothctl`并连接蓝牙音箱,别退出bluetoothctl

再接着在A终端输入`sudo pacmd set-default-sinks bluez_sink.AA_BB_CC_DD_EE_FF`,如果不记得bluez后面的东西,可以按tab键自动补全

上面的操作都无报错以后,先在A终端使用`sudo alsamixer`调节音量

在A终端使用`sudo systemctl start duer`启动duer,应该就能听到启动音乐了

说`小度小度`就可以唤醒了

如果没成功,使用`sudo systemctl status duer`观察duer的日志,使用`tail -f /duer/duer_linux.log`查看duer是否正常唤醒和语音识别,有了这两个日志,慢慢debug吧

五 未解决的事

现在虽然连上了蓝牙,但是还有其他问题

无法使用 `大点声 小点声`等语音来调节音量,只能手动通过`sudo alsamixer`调节

偶尔会突然失声,需要重启

人工成本高,以上过程如果想用脚本实现自动启动,额,需要自己写shell脚本,否则只能手动怼了

所以 我买了有线的音箱,上午买的,晚上就拿到了,上京东 666

以上教程如果有错漏的,大家反馈给我哈

如果觉得《Linux不能连接蓝牙音箱 【搁浅St|开发日记】彻底解决dueros连接蓝牙音箱的问题...》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。