HDMI Audio zatrzymuje się po wyłączeniu telewizora

10

Po aktualizacji 12.04 aktualizacja dźwięku HDMI przestaje działać, gdy wyłączam drugi monitor (telewizor plazmowy). Karta graficzna to Radeon 6800, który ma wyjście DVI na 1. monitor, wyjście HDMI na odbiornik, który telewizor otrzymuje audio / wideo. Dźwięk zawsze jest odtwarzany przez dźwięk mojego odbiornika.

Wszystko działa dobrze, dopóki uruchamia się z włączonym telewizorem i odbiornikiem. Wyłącz telewizor, a dźwięk HDMI BART zniknie, a opcja HDMI zniknie z menu dźwięku. Miałem sporadyczny problem z HDMI z 11.10, ale włączenie / wyłączenie telewizora naprawiłoby dźwięk. Jak mogę zakodować rzeczy tak, aby zawsze używały HDMI poza dźwiękiem? Podejrzewam, że telewizor wysyła sygnał, gdy 12.04 nasłuchuje. Ponowne włączenie telewizora NIE rozwiązuje tego problemu i sugeruję możliwość zastąpienia tej nowej „funkcji” za pomocą menu dźwięku.

Ryan
źródło
jest raport o błędzie - ale nie ma rozwiązania na launchpad
protagonista hiro

Odpowiedzi:

9

Mam ten problem. Nie mogłem znaleźć przyzwoitej poprawki, ale mam tę pracę. Zauważ, że to okropny hack, ale robi to dla mnie, dopóki problem root nie zostanie naprawiony - mam nadzieję, że pomoże komuś innemu. Co 5 sekund sprawdza dmesg pod kątem błędów połączenia HDMI, a jeśli je znajdzie, ponownie uruchamia połączenie.

Zrobiłem ten skrypt nadzorujący - zamień „DFP1” na nazwę twojego wyjścia (pobierz go z xrandr).

#!/usr/bin/env python
import os
import time

valid = "ELD_Valid=1"
invalid = "ELD_Valid=0"

def executeCommand(the_command):
    temp_list = os.popen(the_command).read()
    return temp_list

def getDMESG():
    return executeCommand("dmesg | grep -i hdmi | tail -n 10")

def needsRefresh():
    list = getDMESG();
    valid_index = list.rfind(valid)
    invalid_index = list.rfind(invalid)
    if invalid_index > valid_index:
        return True
    else:
        return False

def doTest():
    if needsRefresh() == True:
        os.popen("xrandr -display :0 --output DFP1 --off; xrandr -display :0 --output DFP1 --auto").read()

while True:
    doTest()
    time.sleep(5)

Jeśli ktoś zna lepszy sposób na wykrycie błędu (ze sterownikami katalizatora), daj mi znać. (Wydaje mi się, że dzięki sterownikom opensource możesz wyzwolić bit resetowania kodu w zdarzeniach drm acpi, jeśli chcesz wykonać skrypty).

Zaczynam od dodania tego do /etc/rc.local: (zmień „xbmc” na nazwę użytkownika, na który się logujesz)

su xbmc -c 'python /home/USERNAME/src/check_hdmi.py &'
Vanilla_Brys
źródło
Skrypt działa, ale nie działa automatyzacja z rc.local. Czy możesz pokazać, jak powinien wyglądać plik rc.local?
ECII
Czy dodawanie skryptu do crona i uruchamianie go co około minuty byłoby w porządku?
ECII
Możesz włożyć do crona. Musisz usunąć cały while True:blok i zastąpić go prostym doTest(). Może to zająć trochę majsterkowania - upewnij się, że jest uruchamiane w cron zalogowanych użytkowników (nie root).
Vanilla_Brys
Mój rc.local zawiera kilka rzeczy. Na dole ma to: su xbmc -c 'python /home/andy/src/check_hdmi.py &'następnie w nowej linii exit 0. Czy zastąpiłeś xbmcprawidłową nazwą użytkownika?
Vanilla_Brys
Jeśli używasz normalnego środowiska pulpitu (używam xbmc, więc nie jestem), prawdopodobnie możesz po prostu dodać skrypt python do swoich aplikacji startowych.
Vanilla_Brys
4

W międzyczasie, gdy raport o błędzie dobrze się kończy, zauważyłem szybką kombinację przycisków, która pozwoli zaoszczędzić kilka bólów głowy.

Wystarczy wyciągnąć ttydo interfejsu GUI iz powrotem:

CTRL+ ALT+ F1 (lub cokolwiek od F1do F6)

następnie

CTRL+ ALT+ F8(być może będziesz musiał użyć F7zamiast F8. Jeden z nich spowoduje powrót na pulpit, drugi da czarny ekran i kursor)

Wygląda na to, że synchronizacja została przywrócona po powrocie do GUI.

Jest to o wiele szybsze niż wylogowanie i ponowne zalogowanie, a programy itp. Pozostają otwarte.

Kombinacja przycisków Gotowy. Bez wysiłku.

To oczywiście nie jest poprawka. To tylko szybka kombinacja klawiatury, aby oszukać HDMI w celu ponownej synchronizacji i odzyskania dźwięku.

Działa na moim końcu.
Czy ktoś jeszcze chce wyłączyć telewizor na sekundę i spróbować go sam?

użytkownik85894
źródło
2

Zauważyłem, że jeśli wyłączysz wyjście telewizora i włączysz je z powrotem, resetuje również dźwięk (Radeon HD6670). Komendy aticonfig ustawiają wyświetlanie na ekranie telewizora. Musisz znaleźć swoją nazwę wyjściową, uruchamiając „xrandr -q” zmień „DFP1” na to, co jest wymienione przed „CONNECTED” w wyjściu polecenia (rozróżniana jest wielkość liter). Jedyny problem z tym w mojej konfiguracji polega na tym, że niektóre okna zeskakują częściowo z górnej części ekranu podczas uruchamiania włączonej / wyłączonej części skryptu (przeciągnij je z wciśniętym klawiszem Alt, jeśli to się stanie). Może ktoś może zakodować lepsze rozwiązanie / obejście.

#! /bin/bash

# Turn off the DFP1 Output
xrandr --output DFP1 --off
# Turn DFP1 back on
xrandr --auto 

# Set Screen to fit TV
aticonfig --set-dispattrib=dfp1,positionX:0
aticonfig --set-dispattrib=dfp1,positionY:0
aticonfig --set-dispattrib=dfp1,sizeX:1920
aticonfig --set-dispattrib=dfp1,sizeY:1080
Viper2
źródło
1

Taki sam problem. Jedyną wskazówką, jaką mam, jest po uruchomieniupactl list

Sink #0
    State: SUSPENDED
    Name: alsa_output.pci-0000_01_00.1.hdmi-stereo
    Description: Turks HDMI Audio [Radeon HD 6000 Series] Digital Stereo (HDMI)
    Driver: module-alsa-card.c
    Sample Specification: s16le 2ch 44100Hz
    Channel Map: front-left,front-right
    Owner Module: 4
    Mute: no
    Volume: 0: 100% 1: 100%
            0: 0.00 dB 1: 0.00 dB
            balance 0.00
    Base Volume: 100%
                 0.00 dB
    Monitor Source: alsa_output.pci-0000_01_00.1.hdmi-stereo.monitor
    Latency: 0 usec, configured 0 usec
    Flags: HARDWARE DECIBEL_VOLUME LATENCY SET_FORMATS 
    Properties:
        alsa.resolution_bits = "16"
        device.api = "alsa"
        device.class = "sound"
        alsa.class = "generic"
        alsa.subclass = "generic-mix"
        alsa.name = "HDMI 0"
        alsa.id = "HDMI 0"
        alsa.subdevice = "0"
        alsa.subdevice_name = "subdevice #0"
        alsa.device = "3"
        alsa.card = "1"
        alsa.card_name = "HD-Audio Generic"
        alsa.long_card_name = "HD-Audio Generic at 0xfddfc000 irq 48"
        alsa.driver_name = "snd_hda_intel"
        device.bus_path = "pci-0000:01:00.1"
        sysfs.path = "/devices/pci0000:00/0000:00:02.0/0000:01:00.1/sound/card1"
        device.bus = "pci"
        device.vendor.id = "1002"
        device.vendor.name = "Advanced Micro Devices [AMD] nee ATI"
        device.product.name = "Turks HDMI Audio [Radeon HD 6000 Series]"
        device.string = "hdmi:1"
        device.buffering.buffer_size = "65536"
        device.buffering.fragment_size = "32768"
        device.access_mode = "mmap+timer"
        device.profile.name = "hdmi-stereo"
        device.profile.description = "Digital Stereo (HDMI)"
        device.description = "Turks HDMI Audio [Radeon HD 6000 Series] Digital Stereo (HDMI)"
        alsa.mixer_name = "ATI R6xx HDMI"
        alsa.components = "HDA:1002aa01,00aa0100,00100200"
        module-udev-detect.discovered = "1"
        device.icon_name = "audio-card-pci"
    Ports:
        hdmi-output-0: HDMI / DisplayPort (priority: 5900, not available)
    Active Port: hdmi-output-0
    Formats:
        pcm

Wydaje się, że wyłączenie monitora wyłącza zlew? i nie włącza się ponownie po ponownym włączeniu telewizora. hdmi-output-0: HDMI / DisplayPort (priorytet: 5900, niedostępny )

niedostępny ” powinien być „ dostępny

Zakładam, że używasz karty ATI z fglrx. próbować

aticonfig --acpi-services=off

Nie jestem pewien, czy to ustawienie jest trwałe. Jeśli tak, polecenie ponownego włączenia to.

aticonfig --acpi-services=on

Wątpię, żeby to zadziałało. EDYCJA> (Nie udało się)

Jak napisał użytkownik53740. Wyloguj się / przywraca dźwięk. Włączanie lub wyłączanie monitora wyłącza dźwięk HDMI. Jeśli naprawdę nie chcesz się wylogowywać, możesz ponownie usunąć wtyczkę hdmi i wtyczkę, a dźwięk hdmi zostanie przywrócony. Nie rób tego zbyt często. Tylko kiedy jesteś zdesperowany.

Jest wątek tutaj OND w dodgey raportu o błędzie tutaj

EDYCJA> Innym obejściem jest przejście do Ustawień systemu> Wyświetlanie. Następnie kliknij przycisk Zastosuj, nie zmieniając niczego.

użytkownik55138
źródło
1

Przejdź do Ustawienia systemu → Wyświetlacze

Zmień rozdzielczość, zastosuj, a następnie zmień ją z powrotem.

Wszystkie ustawienia → Dźwięk → wybierz HDMI

Nicolai
źródło
0

Mając ten sam problem.

Oczywiście sterowniki ATI znów są prawdopodobnie przyczyną problemów. Mój to Radeon HD 6xxx.

Wylogowanie i ponowne zalogowanie przywraca dźwięk, ale myślę, że może być inne prostsze rozwiązanie.

Xamidovic
źródło
0

Rozwiązane GD Gents

Miałem ten sam problem tylko mój http z ATI 5770 był podłączony do odbiornika, a następnie do telewizora. Rozwiązano ten problem, pobierając i instalując najnowszy pakiet sterowników BETA ze strony internetowej AMD.

Oto link ATI Radeon

Dziękuję bardzo za link do sterownika Catalyst ™ 12.7 Beta Sterownik przeszukiwałem Google od dłuższego czasu i nikt nie miał łatwej odpowiedzi na ten irytujący problem.

Ale po zainstalowaniu sterownika AMD Catalyst 12.7 Beta dla Windows® 7 i Windows Vista®

wszystko jest okropne!

Bardzo zobowiązany.:)

Jan
źródło