Pour basculer sur la sortie audio HDMI (du moniteur) et revenir à la sortie audio normale de la prise audio du système (pour les écouteurs, mon moniteur n'ayant pas de sortie audio), je me trouve à ouvrir les préférences de son et à sélectionner le bon canal à chaque fois. Est-il possible de créer un bouton bascule dans le panneau ou d’attribuer une touche de raccourci à une bascule puisque je fais le changement si souvent?.
:aplay -l
**** List of PLAYBACK Hardware Devices ****
card 0: Intel [HDA Intel], device 0: STAC92xx Analog [STAC92xx Analog]
Subdevices: 1/1
Subdevice #0: subdevice #0
card 0: Intel [HDA Intel], device 3: HDMI 0 [HDMI 0]
Subdevices: 0/1
Subdevice #0: subdevice #0
card 0: Intel [HDA Intel], device 7: STAC92xx Digital [STAC92xx Digital]
Subdevices: 1/1
Subdevice #0: subdevice #0
Avec pulseaudio , nous sommes en mesure de sélectionner le récepteur de sortie à partir de la ligne de commande:
pacmd set-default-sink "SINKNAME"
Cette commande peut être utilisée dans un lanceur, un script ou même assignée à un raccourci clavier pour une commutation rapide entre les différents puits. Veuillez remplacer "SINKNAME" par le nom ou le numéro de l'évier de votre choix. Une liste des éviers connus avec leurs numéros et noms associés est donnée par la commande:
pacmd list-sinks
Remarque: La modification du récepteur de sortie via l'interface de ligne de commande ne prend effet que si la lecture d'un périphérique cible par flux est désactivée. Cela peut être fait en modifiant la ligne correspondante dans /etc/Pulse/default.pa
en:
load-module module-stream-restore restore_device=false
Alternativement, nous pourrions utiliser pulseaudio pour transmettre simultanément le son au périphérique audio interne et au périphérique HDMI en exécutant paprefs avec la possibilité d'ajouter un périphérique de sortie virtuel:
J'ai trouvé cela très agaçant moi-même et j'ai écrit un script pour basculer l'affichage:
#!/bin/bash
CURRENT_PROFILE=$(pacmd list-cards | grep "active profile" | cut -d ' ' -f 3-)
if [ "$CURRENT_PROFILE" = "<output:hdmi-stereo+input:analog-stereo>" ] ; then
pacmd set-card-profile 0 "output:analog-stereo+input:analog-stereo"
else
pacmd set-card-profile 0 "output:hdmi-stereo+input:analog-stereo"
fi
puis lié une touche inutilisée de mon clavier pour l'exécuter (voir Comment lier des commandes personnalisées à des raccourcis clavier? )
testé sur Ubuntu 16.04
Mais celui-ci vous permet de ne changer que l'audio de l'application que vous voulez.
UTILISATION: Concentrez-vous sur l'application pour laquelle vous souhaitez modifier le récepteur et exécutez ce script. C'est tout!!!
Ce script détecte l’application sélectionnée, trouve tous les fichiers audio qui y sont lus et les fait basculer vers le prochain collecteur disponible.
https://Gist.github.com/madacol/1a0d8569166886d2d98f073f7f5c5fe
Mais d'abord nous avons besoin du xid
xprop -root _NET_ACTIVE_WINDOW
Puis insérez-le ici $xid
pour obtenir le pid de l'application
xprop -id $xid _NET_WM_PID
Commençons par linéariser le résultat de la commande pacmd list-sink-inputs
pour répertorier une entrée-récepteur par ligne, en affichant son index, son récepteur et son pid sur la même ligne.
pacmd list-sink-inputs | grep -E 'index:|sink:|process.id' | tr '\n' ' ' | tr -d '"' | sed -e 's/index:/\n/g' | tail -n +2
analysons-le étape par étape:
grep -E 'index:|sink:|process.id
conserve uniquement les lignes qui contiennent index:
, sink:
ou process.id
tr '\n' ' '
rejoint toutes les lignes
tr -d '"'
supprime tous les "
. Nécessaire pour obtenir le pid sans guillemets
sed -e 's/index:/\n/g'
remplace toutes les occurrences de index:
par un nouveau caractère de ligne \n
tail -n +2
supprime la première ligne car elle est vide
Et le résultat ressemble à ceci:
180 sink: 0 <alsa_output.pci-0000_00_00.1.hdmi-stereo-extra1> application.process.id = 3521 181 sink: 1 <alsa_output.pci-0000_00_01.0.analog-stereo> application.process.id = 2733 182 sink: 0 <alsa_output.pci-0000_00_00.1.hdmi-stereo-extra1> application.process.id = 13752
Analysons une ligne pour comprendre ce que cela signifie:
# 182 sink: 0 <alsa_output.pci-0000_00_00.1.hdmi-stereo-extra1> application.process.id = 13752
182
est l'index de l'entrée du récepteur, 0
est l'index du récepteur, et 13752
à la fin, est le pid de l'application d'appartenance.
Ensuite, nous parcourons chaque ligne
... | while IFS= read -r line || [ -n "$line" ]; do
sink_input_pid=$(echo $line | awk '{print $NF}')
Et enfin, ne filtrez que le pid de l'entrée du récepteur correspondant à celui de l'application ciblée
if [ $sink_input_pid = $app_pid ]; then
Avec awk
nous pouvons obtenir les éléments dont nous avons besoin
sink_input_index=$(echo $sink_input | awk '{print $1}')
current_sink_index=$(echo $sink_input | awk '{print $3}')
Obtenez le nombre de puits, pour savoir quand la rotation des puits doit recommencer à 0.
sink_list_size=${#sink_list_array[@]}
Pour trouver le prochain puits, nous devons parcourir la liste des puits, savoir lequel correspond current_sink_index et connaître l’indice du prochain puits.
i=0
for sink in "${sink_list_array[@]}"; do
i=$((($i+1)%sink_list_size)) # i++ mod(#sinks)
if [ $sink = $current_sink_index ]; then
next_sink_index=${sink_list_array[i]}
break
fi
done
pacmd move-sink-input $sink_input_index $next_sink_index
Lors de la configuration de la touche de raccourci, je ne pouvais pas la faire fonctionner avec le gestionnaire de raccourcis d'ubuntu. Donc je devais installer compizconfig-settings-manager
Sudo apt-get install compizconfig-settings-manager
Sur la base de nombreuses réponses précédentes, j'ai écrit un script qui définit le récepteur de lecture en alternance entre ceux disponibles.
La meilleure façon de l'utiliser consiste à créer un raccourci clavier pour l'exécuter. Ainsi, chaque fois que vous appuierez sur cette combinaison de touches, l'audio sera redirigé vers le prochain évier disponible.
Le code est disponible ici: https://Gist.github.com/germank/7fa2fb07d45a838bf890addadd8bea8c
Puisqu'il n'y a qu'une seule carte son visible dans la capture d'écran, je pense que le sortie de cette carte son devrait être commuté.
Par exemple: j'ai un ordinateur portable avec une carte son intégrée, mais il possède une sortie numérique (SPDIF) lorsqu'il est ancré.
Donc, ce que je voulais faire est de changer la sortie active ou "Profil" dans pulseaudio.
J'ai trouvé les commandes qui font exactement cela:
pacmd set-card-profile 0 output:analog-stereo
pacmd set-card-profile 0 output:iec958-stereo+input:analog-stereo
Ce que j'ai fait pour obtenir les noms corrects pour le réglage de sortie souhaité - ici, sortie numérique, mais entrée (micro) analogique - était:
pacmd list | grep output
Si vous utilisez Gnome Shell au lieu de Unity, vous pouvez installer l’extension ci-dessous. Vous pourrez alors passer du raccourci de volume dans le panneau supérieur. https://extensions.gnome.org/extension/142/output-device-chooser-on-volume-menu/
J'ai aussi essayé de trouver une solution à ce problème. Depuis Ubuntu 11.04, cela ne semble pas être possible directement. J'ai seulement trouvé dans ce guide l'ajout des sorties HDMI et Analog en tant que sorties séparées. Par conséquent, pacmd affiche maintenant 3 puits. Ensuite, il est possible de basculer entre les éviers en utilisant les commandes ci-dessus. ( voir aussi )
Mais apparemment, Ubuntu 11.11 obtiendra un système de détection de jacks PulseAudio. Selon le site Web ci-dessous, David Henningsson a codé une détection via udev afin que l'audio Pulse soit automatiquement basculé sur la dernière sortie ajoutée, y compris la commutation entre différents profils de la même carte son (comme c'est le cas avec votre et votre configuration). (voir ici )
J'espère donc que cela fonctionnera lorsque j'essayerai la version finale vendredi prochain.
Une alternative à indicateur de changement de son (qui nécessite l'ajout d'un PPA) consiste à créer une commande (ou un script) et à l'appeler avec un raccourci:
Dans mon cas, il y avait hdmi-stereo-extra1+input
profile, donc dans une ligne serait:
[[ $(pacmd list-cards | grep "active profile" | cut -d " " -f 3-) = "<output:hdmi-stereo-extra1+input:analog-stereo>" ]] && \
pacmd set-card-profile 0 "output:analog-stereo+input:analog-stereo" || \
pacmd set-card-profile 0 "output:hdmi-stereo-extra1+input:analog-stereo"
Vous pouvez utiliser un raccourci personnalisé (gnome-control-center keyboard
) pour l'exécuter avec bash -c
(vous avertira en cas de conflit avec un autre raccourci):
J'utilise:
Vous pouvez également ajouter un alias
à votre .bashrc
.
Testé sur Ubuntu 16.04 et 18.04
Si vous n'acceptez pas le comportement précédent d'un script, j'ai apporté quelques modifications en fonction de la réponse de @ user829996:
#!/bin/bash
set -euo pipefail # strict mode
activeProfile() { pacmd list-cards | grep "active profile" | cut -d " " -f 3-; }
CURRENT_PROFILE="$(eval activeProfile)"
# If it doesn't work run pacmd list-cards and try the other outputs from profile section
ANALOG_PROFILE="output:analog-stereo+input:analog-stereo"
HDMI_PROFILE="output:hdmi-stereo-extra1+input:analog-stereo"
if [ "$CURRENT_PROFILE" = "<output:hdmi-stereo-extra1+input:analog-stereo>" ] ; then
pacmd set-card-profile 0 "$ANALOG_PROFILE"
else
pacmd set-card-profile 0 "$HDMI_PROFILE"
fi
activeProfile
Est-il possible de créer un bouton bascule dans le panneau?
J'ai écrit un applet indicateur qui vous permet de changer la sortie audio.
Dans mon cas, les options analogiques n'étaient pas dans la liste. Installez pavucontrol: Sudo apt install pavucontrol
Pourrait résoudre le problème, en lançant l'application:
pavucontrol
(enter)Maintenant, je pourrais ici sonner et sélectionner différents profils (sous Linux Mint):