Ich versuche, meinen Laptop dazu zu bringen, den Ton nach dem Anschließen auf HDMI und nach dem Entfernen wieder auf Standardanalog umzustellen.
Ich habe eine udev-Regel eingerichtet, um ein Skript zum Durchführen des Wechsels auszulösen, aber ich habe Probleme, es zum Laufen zu bringen:
- Es sieht so aus, als würde der HDMI-Audio-Ausgang nicht als verfügbare Senke erkannt, bis ich ihn in den Audio-Einstellungen auswähle. Sobald der HDMI-Audio-Ausgang ausgewählt ist, wird der analoge Ausgang nicht mehr aufgeführt.
Siehe unten:
# 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
Das Skript, mit dem ich die Ausgabe umschalte, sieht folgendermaßen aus:
#!/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
Das Skript gibt einen Fehler über keine solche Senke aus, wenn ich es auslöse, bevor ich HDMI in den Toneinstellungen auswähle.
sound
14.04
pulseaudio
hdmi
Kingamajick
quelle
quelle
Antworten:
Suchen Sie nach verfügbaren Karten und Profilen
Fügen Sie dem Skript den folgenden Befehl hinzu, um das Profil zu ändern, bevor Sie die Standardeinstellung für Senken und Verschieben von Streams festlegen
(Sie müssen es also nicht manuell in den Soundeinstellungen umschalten.)
Referenz:
pactl -h
&man pactl
quelle
Basierend auf diesem Link und diesem Link ... habe ich getestet und funktioniert einwandfrei Ubuntu 14.04
Sie sollten eine Regel in erstellen
/etc/udev/rules.d/100-hdmi_sound.rules
mit diesem Inhalt
dann erstelle
mit deinem Inhalt
Ich hoffe, kann helfen ..sorry für mein Englisch, das ich Spanisch sprach
quelle
Ich hatte ein bisschen Probleme damit. Ich habe das ursprüngliche Skript kopiert und wie vorgeschlagen geändert und jetzt funktioniert es.
Ich füge es hier ein, um es anderen leichter zu machen, es zu benutzen.
Jetzt möchte ich es nur mit udev auslösen, aber ich weiß nicht, wie ich das machen soll.
quelle
Die bereitgestellten Skripte funktionierten mit udev out of the box unter Ubuntu 14.04 nicht. Ich musste hinzufügen:
Konvertieren Sie zu Beginn die beiden pacmd-Befehle in pactl und führen Sie das Skript schließlich mit sudo -s -u (user) aus der udev-Regel aus.
quelle
Nun, alle bereitgestellten Skripte haben bei mir nicht funktioniert (Ubuntu 16.04), aber ich habe diese App-Anzeige gefunden, mit der Sie die Soundausgabe mit nur einem Klick ändern können:
https://github.com/lkettenb/sound-output-switcher
(Anmerkung: Sie müssen das appindicator Paket installieren zuerst:
sudo apt-get install python-appindicator
)Ich dachte nur, ich lasse das hier für andere, die sich vielleicht in der gleichen Situation wie ich befinden, obwohl es eine alternative Lösung ist ... aber es macht es ziemlich einfach und diskret ;-)
quelle
Wieder eine andere Lösung (getestet in 16.04), basierend auf der vorherigen, aber mit einigen Verbesserungen, die mit dem richtigen
pactl
Hinweis auf den richtigen Server funktionieren (es kann verbessert werden, um automatisch die Namen der Karten und Profile abzurufen)pactl list
oderpactl info
für jetzt).Verwandte Kern ist hier .
quelle
card0
aber eines Tages wurde es auf umgestellt,card1
sodass ich das Skript änderte und am nächsten Tag wieder aufcard0
. Am Ende habe ich den Code auf geändertcard*
und seitdem ist alles in Ordnung. Nur einen Kopf hoch, wenn dir etwas Ähnliches passiert.Udev-Skripte werden als root ausgeführt, Sie müssen jedoch auch wissen, welchen Anzeigemanager Sie verwenden. Diese Skripte sollten funktionieren, aber Sie müssen den Display Manager dazu berechtigen.
Finden Sie den DM, den Sie verwenden:
Wenn Sie die Option -auth aktivieren, wird der Anzeigemanager angezeigt. Es könnte sich um sddm oder lightdm in den neuesten Ubuntu-Versionen handeln.
Diese Zeile muss wie folgt als XAUTHORITY-Variable exportiert werden:
Dies könnte beispielsweise eine gültige Ausgabe sein:
/var/lib/mdm/:0.Xauth (Wird vom Skript verwendet)
So muss Ihr Skript aussehen:
Dadurch kann Ihr Display-Manager den HDMI-Ausgang ändern. Befolgen Sie die Anweisungen, um die udev-Regeldateien zu erstellen und das Skript ausführbar zu machen.
quelle