J'essaie d'obtenir mon ordinateur portable pour basculer l'audio sur HDMI lorsqu'il est branché, et revenir à l'analogue standard lorsqu'il est retiré.
J'ai mis en place une règle udev pour déclencher un script pour effectuer la commutation, mais j'ai des problèmes pour le faire fonctionner:
- Il semble que jusqu'à ce que je sélectionne la sortie audio HDMI dans les paramètres audio, elle n'est pas reconnue comme un récepteur disponible, également une fois que la sortie audio HDMI est sélectionnée, la sortie analogique n'est plus répertoriée.
Voir ci-dessous:
# HDMI plugged in, not selected in Sound settings.
$ pactl list short sinks
5 alsa_output.pci-0000_00_1b.0.analog-stereo module-alsa-card.c s16le 2ch 44100Hz SUSPENDED
kingamajick@kingamajick-laptop: ~
# HDMI selected in sound settings
$ pactl list short sinks
7 alsa_output.pci-0000_00_1b.0.hdmi-stereo module-alsa-card.c s16le 2ch 48000Hz SUSPENDED
kingamajick@kingamajick-laptop: ~
# HDMI removed
$ pactl list short sinks
9 alsa_output.pci-0000_00_1b.0.analog-stereo module-alsa-card.c s16le 2ch 48000Hz SUSPENDED
Le script que j'utilise pour basculer la sortie est le suivant:
#!/bin/bash
HDMI_STATUS=`cat /sys/class/drm/card0/*HDMI*/status`
INPUTS=($(pacmd list-sink-inputs | grep index | awk '{print $2}'))
if [ $HDMI_STATUS = "connected" ]
then
pactl set-default-sink alsa_output.pci-0000_00_1b.0.hdmi-stereo
for i in ${INPUTS[*]}; do pacmd move-sink-input $i alsa_output.pci-0000_00_1b.0.hdmi-stereo &> /dev/null; done
else
pactl set-default-sink alsa_output.pci-0000_00_1b.0.analog-stereo
for i in ${INPUTS[*]}; do pacmd move-sink-input $i alsa_output.pci-0000_00_1b.0.analog-stereo &> /dev/null; done-server $PULSE_SERVER set-card-profile 0 output:analog-stereo+input:analog-stereo
fi
Le script donne une erreur sur aucun tel récepteur lorsque je le déclenche avant de sélectionner HDMI dans les paramètres sonores.
sound
14.04
pulseaudio
hdmi
Kingamajick
la source
la source
Réponses:
Vérifier les cartes et profils disponibles
Ajoutez la commande suivante au script pour modifier le profil avant de définir le récepteur par défaut et le déplacement des flux
(Donc, pas besoin de le changer manuellement depuis les paramètres sonores)
Référence:
pactl -h
&man pactl
la source
Basé sur ce lien et ce lien ... j'ai testé et FONCTIONNE BIEN ubuntu 14.04
vous devez créer une règle dans
/etc/udev/rules.d/100-hdmi_sound.rules
avec ce contenu
puis créer
avec votre contenu
J'espère peut aider .. désolé pour mon anglais je parlais espagnol
la source
J'ai eu un peu de mal à suivre ça. J'ai copié le script original et l'ai modifié comme suggéré et maintenant cela fonctionne.
Je l'inclus ici pour le rendre plus facile à utiliser pour quelqu'un d'autre.
Maintenant, je voudrais juste le déclencher avec udev, mais je ne sais pas comment faire ça.
la source
Les scripts fournis ne fonctionnaient pas pour moi avec udev prêt à l'emploi sur Ubuntu 14.04, j'ai dû ajouter:
au début, convertissez les deux commandes pacmd en pactl et exécutez finalement le script en utilisant sudo -s -u (user) à partir de la règle udev.
la source
Eh bien, tous les scripts fournis ne fonctionnaient pas pour moi (Ubuntu 16.04), mais j'ai trouvé cet indicateur d'application qui vous permet de modifier la sortie audio en un seul clic:
https://github.com/lkettenb/sound-output-switcher
(note: vous devez installer le paquet appindicator premier:
sudo apt-get install python-appindicator
)Je pensais juste laisser cela ici pour d'autres qui pourraient être dans la même situation que moi, même si c'est une solution alternative ... mais cela rend les choses assez faciles et discrètes ;-)
la source
Encore une autre solution (testée fonctionnant en 16.04) basée sur la précédente mais avec quelques améliorations qui fonctionnent en
pactl
pointant correctement vers le bon serveur (elle peut être améliorée pour obtenir automatiquement les noms des cartes et des profils, reportez-vous àpactl list
oupactl info
pour l'instant).L' essentiel est ici .
la source
card0
mais un jour, il est passé àcard1
donc j'ai changé le script puis le lendemain, il est revenucard0
. Finalement, j'ai changé le code encard*
et tout va bien depuis. Juste un avertissement si quelque chose de similaire vous arrive.Les scripts Udev s'exécutent en tant que root, mais vous devez également savoir quel gestionnaire d'affichage vous utilisez. Ces scripts devraient fonctionner, mais vous devez autoriser ce gestionnaire d'affichage à le faire.
Trouvez le DM que vous utilisez:
Voir l'option -auth, elle vous montrera le gestionnaire d'affichage. Il pourrait s'agir de sddm ou lightdm dans les dernières versions d'Ubuntu.
Cette ligne doit être exportée en tant que variable XAUTHORITY, comme ceci:
par exemple, cela pourrait être une sortie valide:
/var/lib/mdm/:0.Xauth (Ce sera utilisé par le script)
Voici à quoi doit ressembler votre script:
Cela permettra à votre gestionnaire d'affichage de modifier la sortie HDMI. Suivez les instructions pour créer les fichiers de règles udev et rendre le script exécutable.
la source