My Own Memory Hole
Blog♯bluetooth

MPD et Bluetooth sur Raspberry Pi 2

Afin d'utiliser pleinement mon « système multimédia » à base d'un NAS et d'un Raspberry Pi – qui commence à se faire vieillissant puisque dans sa vesion 2 –sur lequel tourne un serveur MPD, je souhaitais connecter via Bluetooth ce dernier à mon petit amplificateur Tangent Ampster BT.

Connexion Bluetooth

J'ai fait l'aquisition d'un dongle USB/Bluetooth TP-Link reconnu, dans mon souvenir, nativement sous Raspbian Buster, sous réserve d'avoir bien installé le paquet pi-bluetooth :

sudo apt install pi-bluetooth

Pour connecter l'ampli au Raspberry Pi, on utilise l'utilitaire en ligne de commande bluetoothctl : on commence par rechercher les périphériques disponibles (scan on), puis on fait l'appairage avec le bon device (pair) et on lui accorde notre confiance (pas d'authentification nécessaire, trust) avant de nous y connecter (connect) et de cesser la recherche (scan off) :

$ bluetoothctl 
Agent registered
[bluetooth]# scan on
Discovery started
[CHG] Controller 00:1A:7D:DA:71:15 Discovering: yes
[CHG] Device FC:58:FA:14:27:BC RSSI: -71
[CHG] Device FC:58:FA:14:27:BC TxPower: 4
[...]
[bluetooth]# pair FC:58:FA:14:27:BC 
Attempting to pair with FC:58:FA:14:27:BC
[CHG] Device FC:58:FA:14:27:BC Connected: yes
[...]
[CHG] Device FC:58:FA:14:27:BC ServicesResolved: yes
[CHG] Device FC:58:FA:14:27:BC Paired: yes
Pairing successful
[CHG] Device FC:58:FA:14:27:BC ServicesResolved: no
[CHG] Device FC:58:FA:14:27:BC Connected: no
[bluetooth]# trust FC:58:FA:14:27:BC 
[CHG] Device FC:58:FA:14:27:BC Trusted: yes
Changing FC:58:FA:14:27:BC trust succeeded
[bluetooth]# connect FC:58:FA:14:27:BC 
Attempting to connect to FC:58:FA:14:27:BC
[CHG] Device FC:58:FA:14:27:BC Connected: yes
Connection successful
[CHG] Device FC:58:FA:14:27:BC ServicesResolved: yes
[Tangent Ampster BT]# scan off
Discovery stopped
[...]
[Tangent Ampster BT]# exit

Cependant, si à l'étape de la connexion à l'ampli, vous obtenez une erreur, il convient alors d'installer le paquet pulseaudio-module-bluetooth  :

$ sudo apt install pulseaudio-module-bluetooth

Ouvez ensuite le fichier /etc/pulse/default.pa et vérifiez aux alentours des lignes 65-67 que vous avez bien :

.ifexists module-bluetooth-discover.so
load-module module-bluetooth-discover
.endif

et ajoutez à la fin du fichier :

# automatically switch to newly-connected devices
load-module module-switch-on-connect

Lancez alors pulseaudio avec la commande pulseaudio -D après l'avoir tué si besoin (pulseaudio -k) puis relancez la commande connect dans l'outil bluetoothctl.

Configurer de nouvelles sorties dans MPD

Une nouvelle fois, je ne suis pas parvenu à configurer MPD pour qu'il utilise PulseAudio... On s'en tient donc à ALSA et au « Bluetooth Audio ALSA Backend » bluealsa que l'on commence par installer :

$ sudo apt install bluealsa

Puis on « crée » de nouveaux périphériques audio pour l'ensemble du système et de ses utilisateurs :

sudo nano /etc/asound.conf
pcm.tangent {
    type plug
    slave {
        pcm {
            type bluealsa
            device FC:58:FA:14:27:BC
            profile "a2dp"
        }
  }
  hint {
    show on
    description "Tangent Ampster BT"
    }
}

pcm.jblgo {
  type plug
  slave {
    pcm {
      type bluealsa
      device 78:44:05:61:4C:17
      profile "a2dp"
    }
  }
  hint {
    show on
    description "JBL Go"
  }
}

On en vient ensuite à la configuration de MPD auquel on doit déclarer les nouvelles sorties à utiliser :

audio_output {
        type            "alsa"
        name            "Tangent Ampster BT - ALSA Bluetooth"
        device          "tangent"
        mixer_type  "software"
    format          "44100:16:2"
}
audio_output {
        type            "alsa"
        name            "JBL Go - ALSA Bluetooth"
        device          "jblgo"
        mixer_type      "software"
}

Et on relance le service :

$ sudo service mpd restart

Connexion Bluetooth au retour de veille sous Lubuntu 18.04 sur ASUS F200M

Sous Lubuntu 18.04, il m'était impossible de me re-connecter en Bluetooth à mon ampli Hi-Fi au retour de la veille.
Et aucune des solutions repérées sur le forum de la communauté anglophone d'Ubuntu, ni celle de Ferux, ni celle de lotharmat ne me permettait de re-connecter mon ampli, bien qu'il soit bien enregistré comme de confiance. J'avais toujours le même message d'erreur :

Connection Failed: blueman.bluez.errors.DBusFailedError: Resource temporarily unavailable

Une solution simple et définitive  !

La solution vient de Halka sur askubuntu.com, bien qu'il ne faille pas se contenter d'une version >=5.28.2 de bluez : la version disponible dans les dépôts de Lubuntu 18.04 est la 5.48-0ubuntu3 (au 7 juillet 2018)...

Par contre, l'utilisation de la version que propose la « Ubuntu Bluetooth team » via son PPA, la 5.50-0ubuntu0ppa1 (au 7 juillet 2018) permet de résoudre le problème.
Donc, on fait tout simplement :

$ sudo add-apt-repository ppa:bluetooth/bluez
$ sudo apt-get update && sudo apt-get upgrade

Si ça ne marche pas... comment retrouver mes connections Bluetooth ?

J'utilisais le programme bluetoothctl et devais retirer l'appareil avant de l'appairer à nouveau et de le connecter...

$ bluetoothctl 
Agent registered
[bluetooth]# disconnect FC:58:FA:14:27:BC 
Attempting to disconnect from FC:58:FA:14:27:BC
Successful disconnected
[bluetooth]# connect FC:58:FA:14:27:BC
Attempting to connect to FC:58:FA:14:27:BC
[CHG] Device FC:58:FA:14:27:BC Connected: yes
Connection successful
[CHG] Device FC:58:FA:14:27:BC ServicesResolved: yes
[Tangent Ampster BT]#

Si la seule déconnexion ne suffit pas, il faut alors complètement retirer le périphérique&nbsp:

$ bluetoothctl
Agent registered
[Tangent Ampster BT]# remove FC:58:FA:14:27:BC
[CHG] Device FC:58:FA:14:27:BC ServicesResolved: no
Device has been removed
[CHG] Device FC:58:FA:14:27:BC Connected: no
[DEL] Device FC:58:FA:14:27:BC Tangent Ampster BT
[bluetooth]# scan on
Discovery started
[CHG] Controller 54:27:1E:C9:81:80 Discovering: yes
[NEW] Device FC:58:FA:14:27:BC Tangent Ampster BT
[bluetooth]# pair FC:58:FA:14:27:BC
Attempting to pair with FC:58:FA:14:27:BC
[CHG] Device FC:58:FA:14:27:BC Connected: yes
[CHG] Device FC:58:FA:14:27:BC UUIDs: 00001101-0000-1000-8000-00805f9b34fb
[CHG] Device FC:58:FA:14:27:BC UUIDs: 0000110b-0000-1000-8000-00805f9b34fb
[CHG] Device FC:58:FA:14:27:BC UUIDs: 0000110c-0000-1000-8000-00805f9b34fb
[CHG] Device FC:58:FA:14:27:BC UUIDs: 0000110e-0000-1000-8000-00805f9b34fb
[CHG] Device FC:58:FA:14:27:BC UUIDs: 00001200-0000-1000-8000-00805f9b34fb
[CHG] Device FC:58:FA:14:27:BC ServicesResolved: yes
[CHG] Device FC:58:FA:14:27:BC Paired: yes
Pairing successful
[CHG] Device FC:58:FA:14:27:BC ServicesResolved: no
[CHG] Device FC:58:FA:14:27:BC Connected: no
[bluetooth]# connect FC:58:FA:14:27:BC
Attempting to connect to FC:58:FA:14:27:BC
[CHG] Device FC:58:FA:14:27:BC Connected: yes
Connection successful
[CHG] Device FC:58:FA:14:27:BC ServicesResolved: yes
[Tangent Ampster BT]#

Quelque peu pénible... le plus simple étant de redémarrer le service Bluetooth :

$ sudo service bluetooth restart

puis de reconnecter l'ampli depuis l'applet Blueman.