本文使用的环境
电脑:Windows10
服务器 :超频 2.1 版 Debian 的随身 WiFi,Linux 内核 5.15
使用的 Debian 源:

1、环境准备

注意:

  • 经测试,随身WiFi启动后不能立刻运行 bluetoothctl 蓝牙工具,会导致无默认控制器,SSH连接后需等一会在运行 bluetoothctl 蓝牙工具, [CHG] Controller 02:00:35:25:90:59 Pairable: yes 有出现此结果才是正常的,02:00:35:25:90:59 是MAC 地址,随设备改变
  • 本文播放需要开两个终端,一个 root 用户用于运行蓝牙,一个 user 用户用于运行 MPlayer 播放器
  • 若要让 user 用户可执行 sudo ,可参考解决 Linux 系统,出现 “不在 sudoers 文件中,此事将被报告” 的问题,可执行 user 时,可以是两个 user 用户终端
  1. 安装vim
    apt-get install vim

  2. 安装蓝牙即相关程序

    apt-get install bluez bluez-firmware bluetooth pulseaudio pulseaudio-module-bluetooth bluez-tools rfkill
    
  3. 安装 MPlayer 播放器与 mpg123 音频解码工具(可选)

    若只想连接蓝牙,不播放音乐可不装

    sudo apt-get install mplayer mpg123
    
  4. 安装 screen 虚拟终端(可选)

    若想关闭终端后依然可以运行则需要使用虚拟终端

    sudo apt-get install screen
    
  5. alsamixer 音频框架ALSA工具(可选,暂不推荐安装)

    sudo alsamixer 好像可以修改音量,但我没运行成功,MPlayer 播放器本就可以控制音量,所以请无视此项

    sudo apt-get install alsa-utils
    

2、修改文件

  1. 修改 system.pa 文件
    vim /etc/pulse/system.pa
    
    将以下内容添加到文件末尾
    ### fix bug: a2dp-sink profile connect failed [...]: Protocol not available  
    load-module module-bluez5-device  
    load-module module-bluez5-discover
    
  2. 修改 default.pa 文件
    vim /etc/pulse/default.pa
    
    将以下内容添加到文件末尾
    ### Automatically switch to newly-connected devices  
    load-module module-switch-on-connect
    
  3. 修改 client.conf 文件
    vim /etc/pulse/client.conf
    
    将以下内容添加到文件末尾
    ;autospawn = no  
    ;daemon-binary = /bin/true
    
  4. 修改 daemon.conf 文件
    vim /etc/pulse/daemon.conf
    
    ;exit-idle-time = 20 中的 20 改为 -1
    ;exit-idle-time = -1
    
  5. 将用户添加到蓝牙
    usermod -G bluetooth root
    
    usermod -G bluetooth user
    
  6. 重启
    reboot
    

3、连接蓝牙

注意:蓝牙工具需占用一个终端,若关闭会自动结束进程从而断开连接
若已经连接过一次,并添加了信任设备,下次重启后的连接只需执行以下 3、4、5、6、7、8 步骤
若没有重启,只是想重新连接已信任的设备只需执行步骤 13

  1. 开启并启用蓝牙设备

    systemctl is-enabled bluetooth.service
    
    systemctl status bluetooth.service
    
  2. 确认蓝牙是否禁用

    rfkill
    
    # 此代码块为正常执行结果,非可执行,仅供参考
    ID TYPE      DEVICE      SOFT      HARD
     0 bluetooth hci0   unblocked unblocked
     1 wlan      phy0   unblocked unblocked
    
  3. user用户下开启 pulseaudio 音频服务系统

    • 结束进程
      pulseaudio -k
      
    • 开启
      pulseaudio --start
      
  4. 进入 bluetoothctl 蓝牙工具

    sudo bluetoothctl
    
  5. 打开蓝牙适配器

    default-agent
    
    # 此代码块为正常执行结果,非可执行,仅供参考
    [bluetooth]# default-agent
    Default agent request successful
    
  6. 打开代理

    agent KeyboardOnly
    

    或者

    agent on
    
    # 此代码块为正常执行结果,非可执行,仅供参考
    # 两条命令运行结果是一样的
    [bluetooth]# agent KeyboardOnly
    Agent is already registered
    [bluetooth]# agent on
    Agent is already registered
    
    
  7. 开启默认控制器

    power on
    
  8. 开启扫描蓝牙设备

    scan on
    
  9. 列出设备及其 MAC 地址

    devices
    
  10. 关闭扫描蓝牙设备

    scan off
    
  11. 配对蓝牙设备

    pair + 空格 + 连接设备的 MAC 地址

    pair 
    
  12. 信任蓝牙设备

    trust + 空格 + 连接设备的 MAC 地址

    trust 
    
  13. 连接蓝牙设备

    connect + 空格 + 连接设备的 MAC 地址

    connect 
    

    连接上后 [bluetooth]# 会变为 [连接的设备名]#

  14. 退出蓝牙工具

    quit
    
  15. 断开连接

    remove + 空格 + 连接设备的 MAC 地址

    remove 
    
  16. 查看蓝牙log

    sudo btmon
    

4、使用 MPlayer 播放音频

注意:

  • flac 无损格式疑似无法播放,我是没成功,mp3 格式可以正常播放
  • 如果无法播放请检查文件确保上传时没有损坏
  • 文件无损坏情况下如果无法播放,可尝试重启 pulseaudio 音频服务系统,请参考前面 连接蓝牙的步骤 3
  • 重启 pulseaudio 时,蓝牙可能会断开连接,只需使用 connect + 空格 + 连接设备的 MAC 地址 重新连接即可
  • 使用 MPlayer 播放音频时,需在 user 用户下才可
  • 音频文件名不能带有空格
  • 若想将音乐存放于扩展盘中,请参考 随身 WiFi 折腾记录(4) 将扩展盘挂载到 music 目录下,需注意 win 系统正常情况是无法读取 ext4 格式,除win外其他系统应该都可以读取

创建与修改文件、文件夹时,若提示权限不够或者失败,请在root用户下运行,或者在命令前面添加 “sudo”,若sudo有报错请看文章开头的注意事项

  1. 创建音乐存放目录并进入

    mkdir -p /music
    
    chmod -R 777 /music
    
    cd /music
    
  2. 查看目录

    ls -l
    
  3. 单曲播放

    mplayer xxx.mp3
    
  4. 循环播放

    0 为无限循环,当 0 改为 3 时,为循环播放 3 次
    xxx 改为 * 通配符,皆可循环播放当前目录中的所有 MP3 格式的音频

    mplayer -loop 0 xxx.mp3
    

    另外的一种循环播放MP3音频的方式

    这个命令使用了 find 命令来查找指定文件夹中的所有 *.mp3 文件,并将它们按字母顺序排序。然后使用 xargs 命令将文件名传递给 mplayer,并使用 -loop 0 选项来实现循环播放。
    /path/to/folder 替换为您要播放的文件夹的路径

    mplayer -loop 0 -playlist <(find /path/to/folder -name "*.mp3" -print0 | sort -z | xargs -0 echo)
    
  5. 播放列表

    经测试,播放列表的文件格式可以是 lst、txt、m3u ,本文使用的是 lst 格式
    列表添加音乐时,音频文件与列表在同级目录下可直接添加文件名,若非同级目录需再加上路径,相对路径与绝对路径皆可,
    个人比较推荐使用绝对路径,这样列表无论放在哪个目录都可以找到音频的位置

    • 创建并编辑播放列表
      sudo vim music.lst
      
      # 此代码块非执行命令,为 music.lst 文件中的示例内容,仅供参考
      /music/Eye-For-An-Eye.mp3
      /music/I-Hate-Myself-For-Loving-You.mp3
      
    • 播放
      mplayer -playlist music.lst
      
    • 循环播放播放列表
      mplayer -loop  0 -playlist music.lst
      
  6. 快捷键操作

    • 控制音量
      【/】或【9】减小音量
      【*】或【0】增加音量
      【m】静音切换
    • 暂停与继续
      【p】或【空格】
    • 退出
      【q】或【Esc】
    • 方向键控制进度
      【←】和【→】 倒退和前进 10 秒
      【↑】和【↓】 倒退和前进 1 分钟
      【PgDn】和【PgUp】 倒退和前进 10 分钟
    • 其他操作待补充

5、使用虚拟终端

本文虚拟终端名称以 music 为例,若需要使用两个虚拟终端,方式是一样的

由于关闭 SSH连接 后会终止程序,若想关闭后依然运行,这时就需要挂载虚拟终端,在虚拟终端中运行,这样在断开连接后程序会继续运行

  1. 创建于进入虚拟终端
    1. 只创建虚拟终端

      screen -S 终端名称

      screen -S music
      
    2. 只进入虚拟终端

      screen -r 虚拟终端

      screen -r music
      

      若没有进入虚拟终端,先执行以下命令,再重新执行上面的命令
      screen -d 虚拟终端

      screen -d music
      
    3. 创建并进入虚拟终端

      screen -R 终端名称

      screen -R music
      
  2. 显示虚拟终端列表
    screen -ls
    
  3. 退出虚拟终端,不影响虚拟终端中程序的运行
    【Ctrl】+【A】+【D】
  4. 删除虚拟终端
    1. 删除虚拟终端需先终止进程
      【Ctrl】+【C】

    2. 从虚拟终端中删除
      【Ctrl】+【D】

    3. 从虚拟终端外删除

      screen -S 终端名称 -X quit

      screen -S music -X quit