Linux : changer de sortie audio ,HDMI ou Analogique, en un clic

Principe du script

À l’aide de la ligne de commande, on peut manuellement diriger un flux audio sur une sortie précise au moyen de la commande pacmd. Le script, en fonction du choix de l’utilisateur, va activer la sortie sélectionnée et rediriger l’audio.

Liste des sorties audio sur l’ordi

Lister les sorties audio présentes sur le système avec trois commandes, les informations seront utilisées dans le script :

pacmd list | grep "active profile"
pacmd list | grep "active port" | grep "output"
pacmd list-sinks | grep "name:"

On va exécuter ces commandes et en noter le retour pour les configurations de sortie HDMI et casque.

A-Sortie HDMI
pavucontrol configuration : Sortie Digital Srereo (HDMI) + Entrée Stéréo analogique

Jouez une musique ou une vidéo et assurez-vous que le son sort sur la barre de son. Lancez ensuite les trois commandes précédentes. Le retour devrait être respectivement quelque chose dans ce format là :

Profile → active profile: <output:hdmi-stereo+input:analog-stereo>
Port → active port: <hdmi-output-0>
Sink → name: <alsa_output.pci-0000_00_1f.3.hdmi-stereo>

Cela vous retourne le profile, le port et le flux audio correspondant à la sortie HDMI.

B-Pour le casque audio
pavucontrol configuration : Sortie Stéréo analogique

Branchez maintenant un casque. et refaites la même manip. Les trois commandes retournent maintenant ça :

Profile → active profile: <output:analog-stereo>
Port → active port: <analog-output-lineout>
Sink → name: <alsa_output.pci-0000_00_1f.3.analog-stereo>

Le profile gère à la fois la sortie casque et haut-parleurs. Si vous aviez branché votre casque ailleurs (sur un écran HDMI, sur le port Jack d’un haut-parleur, ou sur une sortie bluetooth), il y aurait des différences.

Tester les commandes

Maintenant on a les informations qu’il faut pour modifier, en ligne de commandes, la sortie audio.

Lancez successivement les commandes dans le format suivant :

pacmd set-card-profile 0 off
pacmd set-card-profile 0 PROFILE
pacmd set-sink-port SINK PORT

Pour envoyer le son sur la sortie casque avec les informations (B) :

pacmd set-card-profile 0 off
pacmd set-card-profile 0 output:analog-stereo
pacmd set-sink-port alsa_output.pci-0000_00_1f.3.analog-stereo analog-output-lineout

Pour envoyer sur la sortie HDMI :

pacmd set-card-profile 0 off
pacmd set-card-profile 0 output:hdmi-stereo+input:analog-stereo
pacmd set-sink-port alsa_output.pci-0000_00_1f.3.hdmi-stereo hdmi-output-0

Si ces commandes ont le résultat souhaité, on a fait 90 % du travail. Il nous reste à créer un script qui lance automatiquement ces commandes. Pour faire un truc plus cool, on va utiliser Zenity, qui permet de lancer des fenêtres popup pour Gnome/Mate, avec un menu.

Script

#!/bin/bash
#
# Configuration active
actif=`pacmd list | grep "active profile" |grep "hdmi"`
if [ "$actif" != "" ]
 then
  hdmi=TRUE
  analog=FALSE
 else 
  hdmi=FALSE
  analog=TRUE
fi
choix=$(zenity  --list --title="Sortie Audio" --text "Is linux.byexamples.com helpful?" --radiolist  --column " " --column "Matériel" $analog "Analogique/Casque" $hdmi "HDMI/Barre de son" ); echo $choix
if [ "$choix" == "Analogique/Casque" ]
 then
 pacmd set-card-profile 0 off
 pacmd set-card-profile 0 output:analog-stereo
 pacmd set-sink-port alsa_output.pci-0000_00_1f.3.analog-stereo analog-output-lineout
fi
if [ "$choix" == "HDMI/Barre de son" ]
 then
 pacmd set-card-profile 0 off
 pacmd set-card-profile 0 output:hdmi-stereo+input:analog-stereo
 pacmd set-sink-port alsa_output.pci-0000_00_1f.3.hdmi-stereo hdmi-output-0
fi

Lanceur XFCE

Création lanceur XFCE en utilisant Editeur de menus (si “menulibre” installé) ou manuellement :

mkdir -p ~/.local/share/applications/  #création dossier **applications** si inexistant
nano ~/.local/share/applications/menulibre-sortie-audio.desktop

Contenu :

[Desktop Entry]
Version=1.0
Type=Application
Name=Sortie Audio
Comment=Sortie Audio HDMI ou Casque
Icon=audio-speakers
Exec=sh /home/yannick/scripts/audio-hdmi-analogique.sh
Path=/home/yannick/scripts
NoDisplay=false
Categories=Utility;Audio;
StartupNotify=false
Terminal=false

Les icônes sont situés sous /usr/share/icons , il suffit de mettre le nom de l’icône choisi sans extension ni chemin pour le paramètre Icon