My Own Memory Hole
Blog♯PulseAudio

Raspbian, Spotify et PulseAudio

Il est possible d'utiliser son Raspberry Pi sous Raspbian comme client Spotify Connect, c'est-à-dire d'en faire une sorte de module de sortie audio, et ce grâce à Raspotify.

Installation

Pour l'installer, rien de plus simple :

# Install curl and https apt transport
sudo apt-get -y install curl apt-transport-https

# Add repo and its GPG key
curl -sSL https://dtcooper.github.io/raspotify/key.asc | sudo apt-key add -v -
echo 'deb https://dtcooper.github.io/raspotify raspotify main' | sudo tee /etc/apt/sources.list.d/raspotify.list

# Install package
sudo apt-get update
sudo apt-get -y install raspotify

Ensuite, depuis votre application Spotify, il suffit de sélectionner la sortie « Raspotify » dans les options proposées dans le menu accessible depuis l'icone dans le bas inférieur gauche de l'écran de lecture :

spotify select outspotify select out raspotify

Configuration

Raspotify est fonctionnel out of the box mais, s'il en est besoin, il est possible de jouer sur certains paramètres dans le fichier /etc/default/raspotify.

En cas de modification, il convient alors de relancer le service raspotify :

sudo service raspotify restart

Raspotify & PulseAudio

Pour que Raspotify utilise PulseAudio, il suffit de suivre la démarche proposée par Marc Fauvain  :

cd /var/cache/raspotify
sudo mkdir .pulse
sudo sh -c 'echo "default-server = 127.0.0.1" > .pulse/client.conf'
sudo chown -R raspotify:raspotify .pulse

Il faut également éditer le fichier /etc/asound.rc :

sudo nano /etc/asound.rc
pcm.!default {
    type pulse
}

ctl.!default {
    type pulse
}

MPD, PulseAudio et Bluetooth sous Raspbian Buster

Alors que je venais juste de mettre en place la cohabitation entre MPD et mon ampli connecté en Bluetooth sur mon Raspberry Pi 2 (voir ici), je basculais sur un modèle 4, modifiant quelque peu mes usages et utiisant cette fois-ci l'interface graphique (afin de profiter notamment de Spotify, une fois la gestion des DRM ajoutée). Et du coup, afin d'avoir une maîtrise plus fine de mes sorties audio, j'ai opté pour l'utilisation de PulseAudio.

On commence par purger bluealsa s'il est installé :

sudo apt purge bluealsa

puis on installe tout ce qui concerne le Bluetooth et PulseAudio :

 sudo apt install pi-bluetooth pulseaudio pulseaudio-module-bluetooth paprefs pavumeter pavucontrol pasystray

On vérifie la configuration de PulseAudio (/etc/pulse/default.pa) notamment pour ce qui est du Bluetooth :

### Automatically load driver modules for Bluetooth hardware
.ifexists module-bluetooth-policy.so
load-module module-bluetooth-policy
.endif

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

et on ajoute ces éléments :

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

load-module module-native-protocol-tcp auth-ip-acl=127.0.0.1 # IP of localhost

On tue PulseAudio :

pulseaudio -k

S'il ne redémarre pas tout seul, il suffit de lancer la commande :

pulseaudio -D

On veille à bien connecter notre enceinte Bluetooth via l'utilitaire en ligne de commande bluetoothctl : on commence par rechercher les périphériques disponibles (scan on), puis on lui accorde notre confiance (pas d'authentification nécessaire, trust) avant de faire l'appairage avec le bon device (pair) et de nous y connecter (connect) ; on peut alors 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

On configure une sortie PulseAudio dans la configuration de mpd, /etc/mpd.conf :

sudo nano /etc/mpd.conf
audio_output {
        type            "pulse"
        name            "My Pulse Output"
        server          "localhost"
        mixer_type      "software"
}

On relance MPD et l'affaire est jouée :

sudo service mpd restart

Lubuntu 18.04 sur ASUS F200M : réglages système au clavier

Sous Lubuntu 18.04, presque tous les réglages accessibles via la touche Fn de mon Asus F200M sont fonctionnels « out of scratch » à l'exception de celui (dés)activant le touchpad et d'un léger souci sur les touche de volume.

Activer / désactiver le touchpad

On commence par déterminer si la touche de raccourcis Fn+F9 est reconnue, grâce à l'outil xev :

$ xev | grep 'keycode'
    state 0x0, keycode 199 (keysym 0x1008ffa9, XF86TouchpadToggle), same_screen YES,

Elle l'est ! On garde donc ce XF86TouchpadToggle de côté ; si ce n'est pas le cas, on peut toujours se rabattre sur un raccourci du genre Windows+F9.

J'ai déjà eu l'occasion de produire deux posts consacrés à ce raccourci de (dés)activation du touchpad: le premier pour Xubuntu 14.04, le second sous Xubuntu 14.10.

Par chance, dans mon cas, l'outil synclient utilisé sous Xubuntu 14.04 fonctionne bien.

On crée donc un répertoire bin/ dans notre dossier personnel, et l'on y crée un script bash toggle-trackpad.sh :

$ mkdir ~/bin
$ nano ~/bin/toggle-trackpad.sh

On y colle ceci :

#!/bin/bash
synclient TouchpadOff=$(synclient -l | grep -c 'TouchpadOff.*=.*0')

On enregistre et on rend ce script exécutable :

$ chmod +x ~/bin/toggle-trackpad.sh

Il nous faut maintenant indiquer le raccourcis clavier souhaité à l'environnement de bureau LXDE. On édite le fichier ~/.config/openbox/lubuntu-rc.xml et l'on y ajoute, à la fin de la section consacrée aux raccourcis clavier, donc juste avant </keyboard>, un nouveau raccourci clavier pour appeler le script toggle-touchpad.sh:

<keybind key="XF86TouchpadToggle">
    <action name="Execute">
        <command>~/bin/toggle-trackpad.sh</command>
    </action>
</keybind>

Une fois le fichier enregistré, pas la peine de redémarrer ou de quitter votre session! Il suffit de lancer la commande suivante, et vous devriez pouvoir utiliser le raccourci juste créé.

$ openbox --reconfigure

Réglage du volume

Mute/Unmute

Si le raccourci Fn+F10 coupait bien le son, il était impossible de le restaurer à son état précédent, le son restait sur "mute".

Merci à mutz sur le forum anglophone d'Ubuntu qui m'a permis de corriger ce petit souci avec cette petite commande :

$ amixer -D pulse set Master toggle

Elle permet de couper et de réactiver le son, alternativement. Il suffit juste alors de modifier la définition du raccourci clavier dans le fichier ~/.config/openbox/lubuntu-rc.xml.
Remplacer

<keybind key="XF86AudioMute">
  <action name="Execute">
    <command>amixer -q sset Master toggle
  </action>
</keybind>

par ceci:

<keybind key="XF86AudioMute">
  <action name="Execute">
    <command>amixer -D pulse set Master toggle
  </action>
</keybind>

Réglage du volume

Il semblerait que l'installation de certains paquets liés à PulseAudio et que l'utilisation de l'applet pasystray en lieu et place de l'applet fournie de base avec Lubuntu causent le non fonctionnement des raccourcis Fn+F11 et Fn+F12 (après une installation fraîche, aucun souci !).

Du coup, on suit la logique du point précédent et on ajoute l'option -D pulse à la commande amixer et tout rentre dans l'ordre ; il suffit donc de modifier dans le fichier ~/.config/openbox/lubuntu-rc.xml les raccourcis associés aux touches XF86AudioRaiseVolume et XF86AudioLowerVolume (notez qu'il est possible de modifier la valeur pour avoir un pas plus conséquent) :

<keybind key="XF86AudioRaiseVolume">
  <action name="Execute">
    <command>amixer -D pulse set Master 3%+ unmute</command>
  </action>
</keybind>
<keybind key="XF86AudioLowerVolume">
  <action name="Execute">
    <command>amixer -D pulse set Master 3%- unmute</command>
  </action>
</keybind>

Mais elle est où ma notification ?

Heu... Je ne sais pas... --' Mais grâce à Konrad Strack, on va en créer une ! On ne touche à pas grand chose de son travail, de son script, si ce n'est qu'on remplace les commandes amixer par celles qui fonctionnent bien chez nous avec PulseAudio.

Il faut au préalable avoir installé le paquet libnotify-bin pour bénéficier de la commande notify-send :

$ sudo apt-get install libnotify-bin

Il est possible de modifier le pas du réglage du volume (step=5) ainsi que, pour la notification en elle-même (la commande notify-send), la durée de la notification (l'argument -t 1000) ou les icones appelées (-i audio-volume-muted-panel).

On crée donc le script ~/bin/volume.sh :

#!/bin/bash

step=5

if [[ $# -eq 1 ]]; then
  case $1 in
    "up")
      amixer -D pulse set Master $step\%+;;
    "down")
      amixer -D pulse set Master $step\%-;;
    "toggle")
      amixer -D pulse set Master toggle;;
    *)
      echo "Invalid option";;
  esac
fi

muted=`amixer -D pulse get Master|tail -n1|sed -E 's/.*\[([a-z]+)\]/\1/'`
volume=`amixer -D pulse get Master|tail -n1|sed -E 's/.*\[([0-9]+)\%\].*/\1/'`

if [[ $muted == "off" ]]; then
  notify-send "Muted" -t 1000 -i audio-volume-muted-panel -h int:value:$volume
else
  notify-send "Volume" -t 1000 -i audio-volume-medium-panel -h int:value:$volume
fi

On le rend exécutable :

$ chmod +x ~/bin/volume.sh 

Et on n'a plus qu'à modifier la commande appelée par nos raccourcis claviers :

<keybind key="XF86AudioRaiseVolume">
    <action name="Execute">
        <command>volume.sh up</command>
    </action>
</keybind>
<keybind key="XF86AudioLowerVolume">
    <action name="Execute">
        <command>volume.sh down</command>
    </action>
</keybind>
<keybind key="XF86AudioMute">
    <action name="Execute">
        <command>volume.sh toggle</command>
    </action>
</keybind>

Sachez enfin qu'il est possible de personnaliser l'apparence des notifications.

Alternative

Ce script semblait par moment rencontrer quelques bugs sur mon netbook et une alternative semble être de passer par le daemon xfce4-volumed :

$ sudo apt-get install xfce4-volumed

Ensuite, il faut veiller à ce que xfce4-volumed soit bien lancé au démarrage ; pour ce faire, il suffit d'ouvrir le fichier /etc/xdg/autostart/xfce4-volumed.desktop et de commenter (en ajoutant un #) la dernière ligne :

OnlyShowIn=XFCE;

Il convient alors de commenter les raccourcis clavier liés au volume dans le fichier ~/.config/openbox/lubuntu-rc.xml.