Ich habe ein Dual-Screen-Setup auf meinem Laptop (mit 12.04 LTS) über ein HDMI-verbundenes Display. Alles funktioniert einwandfrei, aber jedes Mal, wenn ich das Kabel ein- oder ausstecke, muss ich die Toneinstellungen aufrufen und das Tonausgabegerät manuell ändern.
Gibt es eine Möglichkeit, das Audioausgabegerät beim Anschließen / Trennen des Kabels zu ändern, sodass beim Anschließen des Bildschirms die Audioausgabe auf HDMI eingestellt wird und beim Trennen der Audioausgabe wieder auf die Laptop-Lautsprecher erfolgt?
Antworten:
Zum Wohle der Leute, die über diese Frage stolpern - Salems Lösung hat sich am 13.04. Beinahe für mich bewährt. Am Ende habe ich alles Mögliche aus dem Internet zusammengetragen. Ich denke, der Deal Breaker für mich war das Fehlen der Umgebungsvariablen PULSE_SERVER
Hier ist meine vollständige Lösung, die im Grunde Salems Lösung mit den wenigen fehlenden Teilen wiederholt. Ich habe es auch als Shell-Skript überarbeitet (trotz meiner Vorliebe für Python), weil ich zuerst befürchtet hatte, dass mein Python-Skript Probleme mit dem Importpfad hat:
(wie bei Salems Antwort) Erstelle eine Datei
/etc/udev/rules.d/hdmi_sound.rules
als root mit dem Inhalt:Erstellen Sie eine Datei
/usr/local/bin/hdmi_sound_toggle
als root mit dem Inhalt:Dann mache es ausführbar mit
chmod 0755 /usr/local/bin/hdmi_sound_toggle
Ich habe versucht, dieses Skript so allgemein wie möglich zu gestalten, aber möglicherweise müssen Sie noch einige Zeilen ändern, z. B. den Dateipfad HDMI_STATUS oder die verwendeten Profile. Sie können eine Liste der Profile anzeigen, indem Sie sie
pactl list cards
unter Profile ausführen und suchen.Beachten Sie, dass das Skript für mich fehlgeschlagen ist, als ich das Schlüsselwort "export" beim Setzen von PULSE_SERVER entfernt habe. Ich denke, pactl sucht nach der env-Variablen
Vergiss nicht, deine udev-Regeln neu zu laden:
sudo udevadm control --reload-rules
Aktualisieren Sie dieses Skript für 14.04 Uhr. Vorher würden Sie überall USER_NAME anstelle von USER_ID verwenden
quelle
| uniq
an den Befehl USER_NAME anhängen musste. Beachten Sie auch, dass die Soundeinstellungen in Ubuntu täuschen können. Ich habe die Änderungen nicht im Soundeinstellungsfenster gesehen, aber als ich etwas abgespielt habe, hat sich das Audio reibungslos hin und her bewegt. Ich habe auch festgestellt, dass das Skript nach ein paar Mal Einstecken und Herausziehen des HDMI-Kabels nicht mehr ausgeführt wird (möglicherweise einige) Art Fehler in udev).| sort -u
habe den Benutzernamen hinzugefügt , weil darin die zusätzliche Option elemer elemer --- My username stand. Entspricht der Lösung von FuegoFro am Ende des Tages.| grep -v pts
, weil ich dort auch einen "root" -Benutzer habe - aufgrund der Tatsache, dass ich das Skript über kate bearbeitet habe, bei dem ein Root-Terminal geöffnet war.Ich habe es endlich geschafft, diese Arbeit mit zu machen
udev
. Wenn also jemand dasselbe Verhalten möchte, sind hier die Schritte:Zuerst müssen wir eine Datei
/etc/udev/rules.d/hdmi_sound.rules
mit folgendem Inhalt erstellen :das macht
udev
das Skript ausführen ,hdmi_sound_toggle
jedes Mal gibt es eine Änderung in HDMI - Anschluss. Dieses Skript muss über die Ausführungsberechtigung verfügen und die Inhalte lauten wie folgt:Wahrscheinlich kann dies leicht mit Bash gemacht werden, aber da meine Hauptsprache Python ist, habe ich es benutzt. Alles funktioniert bis auf die Benachrichtigung: Es wird nicht angezeigt, ich weiß wirklich nicht warum. Wenn jemand weiß, wie man das Problem behebt, sagt bitte etwas.
Hinweis: Die Namen der Skript- / Udev-Regel können geändert werden, Sie müssen jedoch den vollständigen Pfad verwenden.
quelle
Basierend auf Salems Antwort und Daniel Antwort
Ich nahm Salems Antwort und Daniels Antwort und nahm einige notwendige Änderungen vor. Ihre Lösung funktionierte nicht sofort für mich:
(Ähnlich wie Salems Antwort).
Erstellen Sie eine Datei
/etc/udev/rules.d/hdmi_sound.rules
als root mit dem Inhalt:Notiz
ACTION=="change",
fehlt!Erstellen Sie eine Datei
/usr/local/bin/hdmi_sound_toggle
als root mit dem Inhalt:Hinweis USER_NAME =
who | grep "(:0)" | cut -f 1 -d ' '| sort -u
Ich habe hinzugefügt,| sort -u
weil es sonst mit zurückgekommen istelemer elemer elemer
dreimal --my username zurückgekommen ist.Dann mache es ausführbar mit
chmod 0755 /usr/local/bin/hdmi_sound_toggle
Vergiss nicht, deine udev-Regeln neu zu laden:
sudo udevadm control --reload-rules
Wichtig Dieses Skript wurde für den 14.04. Aktualisiert. Vorher würden Sie überall USER_NAME anstelle von USER_ID verwenden
Credits: Salem und Daniel .
quelle
Ubuntu 16.04 - 17.04 Antwort
Dies funktioniert für Ubuntu 16.04 - 17.04, das einen Fehler mit Pulse Audio 8 verursacht hat. Erstellen Sie die Datei
hotplugtv
(oderhotplug-hdmi
wenn Sie es vorziehen) und kopieren Sie sie in die folgenden Zeilen:WICHTIG: Ändern Sie den Benutzernamen "rick" in Ihren Benutzernamen.
Um dieses Skript
udev
während eines Hot-Plug-Ereignisses aufzurufen, erstellen Sie die Datei/etc/udev/rules.d/99-hotplugtv.rules
mit:Wechseln Sie
/home/rick/bin/
zu dem Pfad, in dem Sie dashotplugtv
Skript platziert haben .quelle