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:
SUBSYSTEM=="drm", ACTION=="change", RUN+="/usr/local/bin/hdmi_sound_toggle"
Erstellen Sie eine Datei /usr/local/bin/hdmi_sound_toggle
als root mit dem Inhalt:
#!/bin/sh
USER_NAME=`who | grep "(:0)" | cut -f 1 -d ' '`
USER_ID=`id -u $USER_NAME`
HDMI_STATUS=`cat /sys/class/drm/card0/*HDMI*/status`
export PULSE_SERVER="unix:/run/user/"$USER_ID"/pulse/native"
if [ $HDMI_STATUS = "connected" ]
then
sudo -u $USER_NAME pactl --server $PULSE_SERVER set-card-profile 0 output:hdmi-stereo+input:analog-stereo
else
sudo -u $USER_NAME pactl --server $PULSE_SERVER set-card-profile 0 output:analog-stereo+input:analog-stereo
fi
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