Wissen Sie, wie beim Anschließen von Kopfhörern an die AUX-Buchse Ihres Laptops die internen Lautsprecher automatisch stummgeschaltet werden und der Ton über Ihre Kopfhörer ausgegeben wird? Ich möchte genau das für HDMI.
Manchmal schließe ich einen Monitor mit eingebauten Lautsprechern an meinen Laptop an, um Videos anzusehen. Es ist sehr seltsam, wenn sich das Video auf dem Monitor befindet (der 3 m von meinem Schreibtisch entfernt ist), aber der Ton aus den internen Lautsprechern meines Laptops kommt (der Laptop sitzt auf dem Schreibtisch).
Natürlich kann ich einfach zu den Toneinstellungen gehen und den Ausgangskanal auf HDMI umschalten. Aber später, als ich vor einigen Stunden das HDMI-Kabel entfernt habe und möglicherweise sogar an einem anderen Ort war, wird der Ton nicht wiedergegeben, da der Soundserver immer noch versucht, ihn über HDMI abzuspielen, aber nichts daran angeschlossen ist .
Das automatische Zurückschalten auf die internen Lautsprecher, wenn kein Gerät über HDMI angeschlossen ist, ist wichtiger, aber das Umschalten auf die Tonausgabe über HDMI, wenn ein Gerät angeschlossen ist, wäre immer noch sehr schön.
Dies hat anscheinend mit 11.10 funktioniert, aber nicht mit 16.04.
Antworten:
Hintergrund
Ich hatte ein ähnliches Problem beim Anhalten / Fortsetzen, als der Ton von HDMI-Fernseher auf Laptop-Lautsprecher umgeschaltet wurde. Nach dem Fortsetzen würde der Ton auf den Laptop-Lautsprechern bleiben und ich müsste das Ausgabegerät manuell auf den TV-Eingang zurücksetzen
System Settings
->Sound
.Dies war eine meiner ersten ärgerlichen Erfahrungen mit dem Upgrade von Ubuntu 14.04 auf 16.04, und der Root war das Upgrade auf PulseAudio 8, das mit 16.04 LTS geliefert wird
Nach langem Suchen habe ich ein Skript namens erstellt
TV-sound
. Obwohl ich den Fernseher nicht wie Sie ein- und ausstecken kann, habe ich einige Google-Suchen durchgeführt und eine Variation des Skripts erstellt, um in Ihrer Situation zu funktionieren. Ich habe es getestet und es funktioniert.Schritt 1: Erstellen Sie ein Skript, um Audio zwischen verbundenen Geräten umzuschalten
Wir werden ein Skript namens erstellen,
hotplugtv
das udev aufruft. Dasselbe Skript kann jedoch an vielen Stellen aufgerufen werden. Während des Tests habe ich es beispielsweise verwendet,lock-screen-timer
wenn der Ton während der Bildschirmsperre wieder auf Laptop zurückgesetzt wurde.Wenn der Editor mit einem leeren Bildschirm geöffnet wird, kopieren Sie Folgendes und fügen Sie es ein:
Sie müssen die beiden Vorkommen von
rick
durch Ihre eigene Benutzer-ID ersetzen , dhUTF-8
usw.Ich weiß, dass dies professioneller sein kann, wenn der Benutzername automatisch auf eine Bash-Variable gesetzt wird, aber ich bin noch nicht so geschickt :( Wie auch immer, speichere die Datei und beende sie
gedit
.Schritt 2: Erstellen Sie udev-Regeln
udev überwacht Hotplug-Ereignisse, wenn Sie Ihren HDMI-Monitor ein- und ausstecken. Geben Sie Folgendes ein, um eine neue Regel zu erstellen.
HINWEIS: Wenn die Datei
70-persistent-net.rules
in Ihrem Verzeichnis nicht vorhanden ist, kopieren Sie dort eine andere Datei. Wir brauchen nicht den Dateiinhalt, sondern nur die Dateiberechtigungen, um sicherzustellen, dass unsere identisch sind.Der Editor zeigt eine Reihe irrelevanter Texte an, hebt sie hervor und löscht sie. Markieren Sie dann den folgenden Code und fügen Sie ihn in den Editor ein:
Speichern Sie die Datei und beenden Sie sie.
Um die Regel (ohne Neustart) zu aktivieren, müssen wir udev neu laden:
Jetzt können Sie Ihren HDMI-Monitor / Fernseher anschließen und entfernen, und der Ton wird entsprechend umgeschaltet.
Vorbehalt
Auf meinem System wird der Ton automatisch auf die Laptop-Lautsprecher zurückgesetzt, wenn der HDMI-Stecker abgezogen wird. Auf deinem System hat es nicht geklappt. Weitere Verbesserungen des Codes sind möglicherweise erforderlich, wenn die Lautsprecher Ihres Laptops nicht mit Ton versorgt werden, wenn HDMI nicht angeschlossen ist. Bitte antworten Sie per Kommentar unten, wie die Dinge funktionieren / nicht funktionieren.
Schnelles Testen in CLI
Sie können den Code am Terminal schnell testen, indem Sie Folgendes verwenden:
Wechseln Sie zu HDMI / TV:
Wechseln Sie zurück zu den eingebauten Lautsprechern:
Denken Sie daran,
rick
durch Ihren Benutzernamen zu ersetzen .export
Zeile ist wahrscheinlich nicht notwendig, aber ich habe sie nur zur Sicherheit eingefügt.hdmi-stereo
Tweaks haben, müssen Sie natürlich die richtigen Parameter herausfinden, bevor Sie Ihr Skript schreiben.Entschlüsseln Sie Ihren Gerätenamen in PulseAudio
Der folgende Code verwendet denselben Befehl zweimal. Einmal, wenn der Ton auf einen externen HDMI-Fernseher eingestellt ist. Ein zweites Mal, wenn der Ton auf die eingebauten Lautsprecher des Laptops eingestellt wird. Jedes Mal, wenn Sie den Namen sehen, verwendet PulseAudio:
Wenn Sie mehrere Soundkarten haben
Verwenden Sie den Befehl,
aplay -l
um festzustellen, ob Sie Karten mit einer höheren Nummer als 0 haben. In diesem Fall müssen Sie die entsprechende Kartennummer in Ihren Skripten verwenden. Beispielsweise:Im obigen Beispiel sind alle Kartennummern 0 mit unterschiedlichen Ausgabequellen. Wenn Sie USB-Lautsprecher haben, können diese eine andere Kartennummer als 0 haben.
Bearbeiten 2. Dezember 2016
Aus einem unbekannten Grund wurde das Skript heute gebrochen. Above - Code verwendet zu lesen: "$ (cat / sys / class / drm / card0-HDMI-A-1 / Status" aber ich musste ändern
card0
zucard1
und der Code oben ist als solche überarbeitet ich nicht erklären kann , was sich geändert. auf meinem System außer den regulären Ubuntu-Updates seit dem 26. November 2016.Bearbeiten 14. Dezember 2016
Der obige Code musste wieder auf "$ (cat / sys / class / drm / card0-HDMI-A-1 / status" zurückgeschaltet werden. Anstatt den Code zwischen
card0
undcard1
abhängig vom Start zu überarbeiten, überarbeiten Sie das Programm so, dasscard*
beide Szenarien erfasst werden .quelle
70-persistent-net.rules
weil es nicht existiert./etc/udev/rules.d
enthält nur eine einzige Datei mit dem Namen39-smfp_samsung.rules
.cat /sys/class/drm/card0-HDMI-A-1/status
zeigt den korrekten Status an (ich habe es mehrmals versucht).output:analog-stereo
: pastebin.com/n5bHyhCm Dies macht es noch seltsamer, weil ich dann erwarten würde, dass der Ton immer über HDMI abgespielt wird. Screenshots meiner Toneinstellungen, wenn HDMI angeschlossen ist und wenn HDMI nicht angeschlossen ist . Bearbeiten: Ich habe es bereits versucht, aber es hat ein paar Minuten gedauert, bis ich diesen Kommentar gepostet habe, da ich die Screenshots hochladen musste.