Nur nicht aufgeben. Soundsystem ist immer etwas eigen ☺ Dafür kann man halt auch alles damit machen, wenn man weiß wie 😀
HDMI / Surround-Sound
Anmeldungsdatum: Beiträge: 12067 |
|
||
Anmeldungsdatum: Beiträge: 19610 Wohnort: Schleswig-Holstein |
Hab noch eventuell was,zeige mal ls /sys/class/drm/card0/* Mein Plan ist es über udev zu regeln. Du kannst schon mal folgendes Testen.
|
||
(Themenstarter)
Anmeldungsdatum: Beiträge: 32 |
Endlich wieder da. Keine Angst, so schnell geb ich nicht auf 😉 $ ls /sys/class/drm/card0/* /sys/class/drm/card0/dev /sys/class/drm/card0/error /sys/class/drm/card0/gt_act_freq_mhz /sys/class/drm/card0/gt_cur_freq_mhz /sys/class/drm/card0/gt_max_freq_mhz /sys/class/drm/card0/gt_min_freq_mhz /sys/class/drm/card0/gt_RP0_freq_mhz /sys/class/drm/card0/gt_RP1_freq_mhz /sys/class/drm/card0/gt_RPn_freq_mhz /sys/class/drm/card0/uevent /sys/class/drm/card0/card0-DP-1: device dpms drm_dp_aux0 edid enabled i2c-3 modes power status subsystem uevent /sys/class/drm/card0/card0-DP-2: device dpms drm_dp_aux1 edid enabled i2c-4 modes power status subsystem uevent /sys/class/drm/card0/card0-HDMI-A-1: device dpms edid enabled modes power status subsystem uevent /sys/class/drm/card0/card0-HDMI-A-2: device dpms edid enabled modes power status subsystem uevent /sys/class/drm/card0/card0-HDMI-A-3: device dpms edid enabled modes power status subsystem uevent /sys/class/drm/card0/device: backlight boot_vga broken_parity_status class config consistent_dma_mask_bits d3cold_allowed device dma_mask_bits driver driver_override drm enable firmware_node graphics i2c-0 i2c-1 i2c-2 irq local_cpulist local_cpus modalias msi_bus msi_irqs numa_node power remove rescan reset resource resource0 resource2 resource2_wc resource4 rom subsystem subsystem_device subsystem_vendor uevent vendor /sys/class/drm/card0/power: async autosuspend_delay_ms control rc6_enable rc6_residency_ms runtime_active_kids runtime_active_time runtime_enabled runtime_status runtime_suspended_time runtime_usage /sys/class/drm/card0/subsystem: card0 card0-DP-1 card0-DP-2 card0-HDMI-A-1 card0-HDMI-A-2 card0-HDMI-A-3 controlD64 renderD128 version Dann habe ich das mit dem HDMI Stecker mal probiert und das ist jetzt tatsächlich erstaunlich: wenn der Stecker erst draußen ist und dann nachträglich eingesteckt wird, ist das Profil verfügbar und funktioniert auch! |
||
Anmeldungsdatum: Beiträge: 19610 Wohnort: Schleswig-Holstein |
Das war meine Befürchtung ☺ Das Problem ist das beim einschalten des Recivers Pulseaudio zu schnell reagiert. Wir werden Versuchen das über die udev Regel imGriff zu bekommen. |
||
Anmeldungsdatum: Beiträge: 19610 Wohnort: Schleswig-Holstein |
Wir testen mal gksudo gedit /usr/local/bin/hdmi_sound_denon.sh dort einfügen #!/bin/bash USER_NAME=$(w -hs | awk -v vt=tty$(fgconsole) '$0 ~ vt {print $1}') USER_ID=$(id -u "$USER_NAME") HDMI_STATUS=$(</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-surround-extra1 else sudo -u "$USER_NAME" pactl --server "$PULSE_SERVER" set-card-profile 0 output:hdmi-surround-extra1 fi Speichern. Dann Ausführbar machen chmod +x /usr/local/bin/hdmi_sound_denon.sh Dann die udev-regel anlegen gksudo gedit /etc/udev/rules.d/99-hdmi_sound.rules und folgendes einfügen KERNEL=="card0", SUBSYSTEM=="drm", ACTION=="change", RUN+="/usr/bin/systemctl start hdmi_sound_denon.service" Speichern und den Service anlegen gksudo gedit /etc/systemd/system/hdmi_sound_denon.service und dort eintragen [Unit] Description=hdmi sound hotplug [Service] Type=simple RemainAfterExit=no ExecStart=/usr/local/bin/hdmi_sound_denon.sh [Install] WantedBy=multi-user.target Speichern und udev dienst neu starten sudo udevadm control --reload-rules und sudo systemctl daemon-reload Das sollte es schon sein? |
||
(Themenstarter)
Anmeldungsdatum: Beiträge: 32 |
Erstmal vielen Dank für die Mühe, das konnte man ja quasi ohne selbst nachdenken zu müssen abtippen!! Zum gewünschten Erfolg führt es leider noch nicht. Für ihn existiert immer noch kein solches Profile und daher ist er auch nicht bereit, dieses zu setzen ☹ |
||
Anmeldungsdatum: Beiträge: 19610 Wohnort: Schleswig-Holstein |
Schade ☹ Mal sehen warum.Folgendes Zenario
und folgendes eingeben und Terminal auf lassen tail -f /var/log/syslog Dann
Die Ausgabe des Terminals bitte hier posten. |
||
(Themenstarter)
Anmeldungsdatum: Beiträge: 32 |
Gute Idee moit dem syslog. Erst hat er sich beschwert, dass er /usr/bin/systemctl nicht kennt. Das musste aber nur durch /bin/systemctl ersetzt werden. Jetrzt sagt er Folgendes: Dec 12 21:53:07 telesto systemd[1]: Started hdmi sound hotplug. Dec 12 21:53:07 telesto hdmi_sound_denon.sh[16521]: /usr/local/bin/hdmi_sound_denon.sh: Zeile 4: /sys/class/drm/card0/*HDMI*/status: Mehrdeutige Umlenkung. Dec 12 21:53:07 telesto hdmi_sound_denon.sh[16521]: Fehlgeschlagen: Entität nicht vorhanden Dec 12 21:53:07 telesto systemd[1]: hdmi_sound_denon.service: Main process exited, code=exited, status=1/FAILURE Dec 12 21:53:07 telesto systemd[1]: hdmi_sound_denon.service: Unit entered failed state. Dec 12 21:53:07 telesto systemd[1]: hdmi_sound_denon.service: Failed with result 'exit-code'. Dec 12 21:53:10 telesto systemd[1]: Started hdmi sound hotplug. Dec 12 21:53:10 telesto hdmi_sound_denon.sh[16535]: /usr/local/bin/hdmi_sound_denon.sh: Zeile 4: /sys/class/drm/card0/*HDMI*/status: Mehrdeutige Umlenkung. Dec 12 21:53:10 telesto hdmi_sound_denon.sh[16535]: Fehlgeschlagen: Entität nicht vorhanden Dec 12 21:53:10 telesto systemd[1]: hdmi_sound_denon.service: Main process exited, code=exited, status=1/FAILURE Dec 12 21:53:10 telesto systemd[1]: hdmi_sound_denon.service: Unit entered failed state. Dec 12 21:53:10 telesto systemd[1]: hdmi_sound_denon.service: Failed with result 'exit-code'. Er sört sich also noch an dem *HDMI*, weil das drei Dateien sind. Ich hätte das gerne schon selbst angepasst (soll er einfach card0-HDMI-A-1 bis card0-HDMI-A-3 durchlaufen?), aber ehrlich gesagt verstehe ich das Script noch nicht ganz, vor allem weil im if- und else-Zweig doch das Gleiche steht oder übersehe ich da gerade etwas? $ ls -l /sys/class/drm/card0/*HDMI*/status -rw-r--r-- 1 root root 4096 Dez 12 21:50 /sys/class/drm/card0/card0-HDMI-A-1/status -rw-r--r-- 1 root root 4096 Dez 12 21:50 /sys/class/drm/card0/card0-HDMI-A-2/status -rw-r--r-- 1 root root 4096 Dez 12 21:50 /sys/class/drm/card0/card0-HDMI-A-3/status $ cat /sys/class/drm/card0/*HDMI*/status disconnected connected disconnected |
||
Anmeldungsdatum: Beiträge: 12067 |
Hallo! Ihr kommt ja schön weiter ☺ Für die Abfrage böte sich in etwa folgendes an: HDMISTATUS="disconnected"; for status in $(cat /sys/class/drm/card0/*HDMI*/status); do if [ "$status" == "connected" ]; then HDMISTATUS=connected;fi; done Erklärung: Es wird in der Schleife jede verfügbare *HDMI* datei ausgelesen und deren Inhalt in die Variable $status geschrieben. Dann wird geprüft ob der status connected ist: Wenn ja, soll HDMISTATUS connected sein, wenn nicht bleibt es auf dem Startwert "disconnected". Kann man noch bisl aufhübschen, sollte aber funktionieren. |
||
(Themenstarter)
Anmeldungsdatum: Beiträge: 32 |
OK, also $HDMISTATUS (bzw. $HDMI_STATUS) soll auf "connected" gesetzt werden, wenn in irgendeiner der /sys/class/drm/card0/*HDMI*/status "connected" steht. Da das immer der Fall ist (card0-HDMI-A-2 ist immer "connected", egal ob Receiver an oder aus), wird in $HDMI_STATUS also immer "conected" stehen. Dann macht "if" und "else" aber trotzdem noch das gleiche. Letztendlich passiert also das hier: USER_NAME=$(w -hs | awk -v vt=tty$(fgconsole) '$0 ~ vt {print $1}') USER_ID=$(id -u "$USER_NAME") export PULSE_SERVER="unix:/run/user/"$USER_ID"/pulse/native" sudo -u "$USER_NAME" pactl --server "$PULSE_SERVER" set-card-profile 0 output:hdmi-surround-extra1 Das Ergebnis im syslog ist dann: Dec 13 09:22:07 telesto systemd[1]: Started hdmi sound hotplug. Dec 13 09:22:07 telesto hdmi_sound_denon.sh[10893]: Fehlgeschlagen: Entität nicht vorhanden Dec 13 09:22:07 telesto systemd[1]: hdmi_sound_denon.service: Main process exited, code=exited, status=1/FAILURE Dec 13 09:22:07 telesto systemd[1]: hdmi_sound_denon.service: Unit entered failed state. Dec 13 09:22:07 telesto systemd[1]: hdmi_sound_denon.service: Failed with result 'exit-code'. Dec 13 09:22:09 telesto systemd[1]: Started hdmi sound hotplug. Dec 13 09:22:09 telesto hdmi_sound_denon.sh[10908]: Fehlgeschlagen: Entität nicht vorhanden Dec 13 09:22:09 telesto systemd[1]: hdmi_sound_denon.service: Main process exited, code=exited, status=1/FAILURE Dec 13 09:22:09 telesto systemd[1]: hdmi_sound_denon.service: Unit entered failed state. Dec 13 09:22:09 telesto systemd[1]: hdmi_sound_denon.service: Failed with result 'exit-code'. Ich kann das auch manuell eingeben, dann kommt auch: Fehlgeschlagen: Entität nicht vorhanden
|
||
Anmeldungsdatum: Beiträge: 19610 Wohnort: Schleswig-Holstein |
Habe was Vergessen ☹ Der symlink fehlt sudo systemctl enable hdmi_sound_denon.service Das ganze wird leider so nichts da der HDMI Anschluss schon connected meldet sobald ein Stecker steckt 😐 Muss nachdenken was man noch machen kann.
Das war auch beabsichtigt (Er sollte immer nur dieses Profil wählen --so mein Plan) Werden diese Aktion jetzt wieder verwerfen. |
||
Anmeldungsdatum: Beiträge: 12067 |
Schade. Ich habe einen alten Beitrag auf http://jeffhoogland.blogspot.de/2014/02/howto-switch-to-hdmi-audio-out.html gefunden, der ebenfalls auf die udev-Geschichte setzt. Versuchen wir mal, ob ein change ausgelöst wird durch das an-, bzw. ausschalten des Receivers. Anlegen einer Datei /etc/udev/rules.d/hdmi_sound.rules mit dem Inhalt: SUBSYSTEM=="drm", ACTION=="change", RUN+="/usr/local/bin/hdmi_sound_toggle" In /usr/local/bin/hdmi_sound_toggle dann zunächst als test:
Dann Receiver anschalten und cat /var/log/test.log eingeben. |
||
Anmeldungsdatum: Beiträge: 19610 Wohnort: Schleswig-Holstein |
Wir testen noch mal was,PC gestartet,Reciver aus,Hdmi steckt gksudo gedit /etc/pulse/client.conf dort autospawn=no dann pulseaudio --kill Kontrollieren das Pulse auch Wirklich aus ist ps -C pulseaudio sollte so aussehen PID TTY TIME CMD pavucontrol sollte auch nicht zu starten sein.Check cat /sys/class/drm/card0/*HDMI*/status (Bitte zeigen).Dann Reciver an,5 Sek warten und dann pulseaudio --start Ergebniss? |
||
(Themenstarter)
Anmeldungsdatum: Beiträge: 32 |
@ChickenLipsRfun2eat: Ein change beim Ein- / Ausschalten des Receivers funktioniert problemlos. Nur der Output ist eben nicht verfügbar. Deshalb funktionieren Tipps wie auf http://jeffhoogland.blogspot.de/2014/02/howto-switch-to-hdmi-audio-out.html leider nicht, weil die immer davon ausgehen, dass das Problem das Umschalten ist, der richtige Outpuit aber grundsätzlich existiert.
Wenn das manuelle Assignen funktionieren würde, wäre ich in Bezug auf dieses Thema wunschlos glücklich 😉 @Kellerkind_2009
|
||
Anmeldungsdatum: Beiträge: 12067 |
Versuch das mal mit sudo alsa --force-reload zu erzwingen. |