Vous savez comment lorsque vous branchez un casque dans la prise auxiliaire de votre ordinateur portable, les haut-parleurs internes sont automatiquement coupés et les sons sortent de votre casque? Je veux exactement ça pour HDMI.
Je connecte parfois un moniteur avec des haut-parleurs intégrés à mon ordinateur portable pour regarder des vidéos. C'est très bizarre lorsque la vidéo est sur le moniteur (qui est placé à 3 m de mon bureau) mais le son sort des haut-parleurs internes de mon ordinateur portable (l'ordinateur portable est assis sur le bureau).
Bien sûr, je peux simplement accéder aux paramètres sonores et basculer le canal de sortie sur HDMI. Mais ensuite, plus tard, lorsque j'ai retiré le câble HDMI il y a des heures et qu'il pourrait même se trouver dans un endroit totalement différent, le son ne sera pas lu car le serveur de son tente toujours de le lire via HDMI mais il n'y a rien de connecté .
Le retour automatique aux haut-parleurs internes quand aucun appareil n'est connecté via HDMI est plus important mais passer à la sortie audio via HDMI lorsqu'un appareil est connecté serait toujours très agréable.
Cela a apparemment fonctionné avec 11.10 mais cela ne fonctionne pas avec 16.04.
Réponses:
Contexte
J'ai eu un problème similaire pendant la suspension / reprise lorsque le son passait du téléviseur HDMI aux haut-parleurs d'un ordinateur portable. À la reprise, le son resterait sur les haut-parleurs de l'ordinateur portable et je devrais réinitialiser manuellement le périphérique de sortie sur le téléviseur dans
System Settings
->Sound
.Ce fut l'une de mes premières expériences ennuyeuses avec la mise à niveau d' Ubuntu 14.04 vers 16.04 et la racine a été mise à niveau vers PulseAudio 8 fourni avec 16.04 LTS
Après de nombreuses recherches, j'ai créé un script appelé
TV-sound
. Bien que je ne branche et ne débranche pas le téléviseur comme vous, j'ai fait des recherches sur Google et créé une variante du script pour fonctionner dans votre situation. Je l'ai testé et ça marche.Étape 1: créer un script pour basculer l'audio entre les appareils connectés
Nous allons créer un script appelé
hotplugtv
que udev appelle. Ce même script peut être appelé à de nombreux endroits. Par exemple, pendant les tests, je l'ai utilisé danslock-screen-timer
un environnement où le son revenait à l'ordinateur portable pendant le verrouillage de l'écran.Lorsque l'éditeur s'ouvre avec un écran vide, copiez et collez ce qui suit dans celui-ci:
Vous devrez remplacer les deux occurrences de
rick
par votre propre identifiant utilisateur, c'estUTF-8
-à- dire , etc.Je sais que cela peut être plus professionnel avec un nom d'utilisateur défini automatiquement sur une variable bash, mais je ne suis pas encore compétent :( Quoi qu'il en soit, enregistrez le fichier et quittez
gedit
.Étape 2: créer des règles udev
udev surveille les événements de connexion à chaud lorsque vous branchez et débranchez votre moniteur HDMI. Tapez ce qui suit pour créer une nouvelle règle.
REMARQUE: si le fichier
70-persistent-net.rules
n'existe pas dans votre répertoire, copiez-y tout autre fichier. Nous n'avons pas besoin du contenu du fichier, juste des autorisations de fichier pour nous assurer que les nôtres sont les mêmes.L'éditeur affichera un tas de texte non pertinent, le mettra en surbrillance et le supprimera. Mettez ensuite en surbrillance le code ci-dessous et collez-le dans l'éditeur:
Enregistrez le fichier et quittez.
Pour activer la règle (sans redémarrer), nous devons recharger udev:
Vous pouvez maintenant brancher et débrancher votre moniteur / téléviseur HDMI et les commutateurs sonores de manière appropriée.
Caveat
Sur mon système, le son revient automatiquement aux haut-parleurs de l'ordinateur portable lorsque HDMI est débranché. Sur votre système, ce n'était pas le cas. D'autres améliorations du code peuvent être nécessaires si le son ne parvient pas aux haut-parleurs de votre ordinateur portable lorsque HDMI est débranché. Veuillez répondre via un commentaire ci-dessous comment les choses fonctionnent / ne fonctionnent pas.
Test rapide en CLI
Vous pouvez rapidement tester le code sur le terminal en utilisant:
Passer à HDMI / TV:
Revenez aux haut-parleurs intégrés:
N'oubliez pas de remplacer
rick
par votre nom d'utilisateur.export
ligne initiale n'est probablement pas nécessaire mais je l'ai incluse juste pour être sûre.hdmi-stereo
ajustements sont évidemment nécessaires pour trouver les paramètres corrects avant d'écrire votre script.Déchiffrer le nom de votre appareil dans PulseAudio
Le code ci-dessous utilise deux fois la même commande. Une fois lorsque le son est réglé sur un téléviseur HDMI externe. Une deuxième fois lorsque le son est réglé sur les haut-parleurs intégrés de l'ordinateur portable. Chaque fois que vous voyez le nom que PulseAudio utilise:
Lorsque vous avez plusieurs cartes son
Utilisez la commande
aplay -l
pour voir si vous avez des cartes supérieures au numéro 0. Si c'est le cas, vous devrez utiliser le numéro de carte approprié dans vos scripts. Par exemple:Dans l'exemple ci-dessus, tous les numéros de carte sont 0 avec différentes sources de sortie. Si vous avez des haut-parleurs USB, ils peuvent avoir un numéro de carte différent de 0.
Modifier le 2 décembre 2016
Pour une raison inconnue, le script a été cassé aujourd'hui. Le code ci-dessus se lisait: "$ (cat / sys / class / drm / card0-HDMI-A-1 / status" mais j'ai dû changer
card0
pourcard1
et le code ci-dessus a été révisé en tant que tel. Je ne peux pas expliquer ce qui a changé sur mon système autre que les mises à jour régulières d'Ubuntu depuis le 26 novembre 2016.Modifier le 14 décembre 2016
Le code ci-dessus devait être à nouveau changé en: "$ (cat / sys / class / drm / card0-HDMI-A-1 / status". Au lieu de réviser le code entre
card0
et encard1
fonction du démarrage, révisez le programme pour faire référencecard*
afin de capturer les deux scénarios .la source
70-persistent-net.rules
car il n'existe pas./etc/udev/rules.d
ne contient qu'un seul fichier appelé39-smfp_samsung.rules
.cat /sys/class/drm/card0-HDMI-A-1/status
montre le bon état (j'ai essayé plusieurs fois).output:analog-stereo
: pastebin.com/n5bHyhCm Cela le rend encore plus étrange car je m'attendrais à ce que le son soit toujours lu via HDMI. Captures d'écran de mes paramètres sonores lorsque HDMI est connecté et lorsque HDMI n'est pas connecté . Edit: J'ai déjà essayé cela mais il m'a fallu quelques minutes de plus pour poster ce commentaire car j'ai dû télécharger les captures d'écran.