电视关闭后,HDMI音频停止


10

在12.04更新之后,只要关闭第二台显示器(等离子电视),HDMI音频就会停止工作。显卡是Radeon 6800,它的DVI输出到第一台显示器,HDMI输出到接收器,电视接收到它的音频/视频。音频总是通过我的接收器声音发出。

只要在电视和接收器打开的情况下启动,一切就可以正常进行。关闭电视,BART的HDMI音频将消失,并且声音菜单中的HDMI选项消失。我偶尔在11.10上遇到HDMI问题,但是打开/关闭电视可以修复声音。我该如何对事物进行硬编码,使其始终在音频中使用HDMI?我怀疑电视正在发出正在监听12.04的信号。重新打开电视无法解决此问题,我建议可以通过声音菜单覆盖此新的“功能”。



有一个错误报告-但启动板上
hiro主角,

Answers:


9

我一直有这个问题。我找不到合适的解决方法,但是我可以解决此问题。请注意,这是一个骇人听闻的技巧,但对我而言,直到解决根本问题之前,它都能为您完成工作-希望它将对其他人有所帮助。它每5秒钟检查dmesg是否存在HDMI连接错误,如果发现错误,则重新启动连接。

我制作了这个看门狗脚本-用输出名称替换“ DFP1”(从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)

如果有人知道检测错误的更好方法(使用催化剂驱动程序),请告诉我。(如果您想进行一些脚本编写,我认为使用开源驱动程序可以在drm acpi事件上触发代码的重置位)。

我通过将其添加到/etc/rc.local来启动它:(将“ xbmc”更改为您登录时使用的用户名)

su xbmc -c 'python /home/USERNAME/src/check_hdmi.py &'

该脚本有效,但不能使用rc.local进行自动化。您能否显示rc.local的外观如何?
ECII 2012年

将脚本添加到cron并让它每分钟执行一次是否可以?
ECII

您可以放入cron。您必须删除整个while True:块并将其替换为simple doTest()。可能需要进行一些修改-确保它已在登录用户cron(而非root)中运行。
Vanilla_Brys'5

我的rc.local包含一些内容。在底部有这个:su xbmc -c 'python /home/andy/src/check_hdmi.py &'然后在新行上exit 0。您xbmc用正确的用户名替换了吗?
Vanilla_Brys,2012年

如果您使用的是普通桌面环境(我使用的是xbmc,那么我不是),则可以将python脚本添加到启动应用程序中。
Vanilla_Brys

4

在此期间,尽管错误报告得到了很好的解决,但我注意到快速按钮组合可以节省一些麻烦。

只需将其拉出tty并返回您的GUI:

CTRL+ ALT+ F1 (或从F1到的任何内容F6

然后

CTRL+ ALT+ F8(您可能需要使用F7而不是F8。其中一个将使您返回到桌面,另一个将使您出现黑屏和光标)

返回到GUI时似乎重新建立了同步。

这比注销然后重新登录快得多,并且您的程序等保持打开状态。

按钮组合。做完了 轻松自如。

这当然不是解决方法。这只是一种快速的键盘组合,可以欺骗HDMI重新同步,从而使音频恢复正常。

它对我有效。
其他人想关掉电视一秒钟然后自己尝试一下吗?


2

我注意到,如果您关闭电视的输出并重新打开,它也会重置声音(Radeon HD6670)。aticonfig命令将显示设置为填满电视上的屏幕。您需要通过运行“ xrandr -q”来更改输出名称,以将“ DFP1”更改为命令输出中“ CONNECTED”之前列出的名称(区分大小写)。在我的设置中,唯一的问题是,运行脚本的开/关部分时,某些窗口会从屏幕顶部跳出一部分(如果遇到这种情况,请按住Alt键将其向下拖动)。也许有人可以编写更好的解决方案/解决方法。

#! /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

1

同样的问题。我唯一的提示是跑步后pactl 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

似乎关闭显示器会禁用水槽?并且在再次打开电视时不会重新启用。hdmi-output-0:HDMI / DisplayPort(优先级:5900,不可用

不可用 ”应为“ 可用

我假设您正在使用带有fglrx的ATI卡。尝试

aticonfig --acpi-services=off

不确定此设置是否持久。如果是这样,则再次打开该命令。

aticonfig --acpi-services=on

我怀疑这会奏效。编辑>(没有)

如user53740所发布。注销/恢复音频。打开或关闭显示器会禁用HDMI音频。如果您真的不想注销,可以再次删除hdmi插件,然后将恢复hdmi音频。不要经常这样做。只有在你绝望的时候。

有一个线程在这里 OND一个dodgey bug报告在这里

编辑> 另一个解决方法是转到系统设置>显示。然后,单击“应用”而不更改任何内容。


1

转到系统设置→显示

更改分辨率,应用,然后再更改回。

所有设置→声音→选择HDMI


0

有同样的问题。

当然,ATI驱动程序可能也是问题的原因。我的是Radeon HD 6xxx。

注销并重新登录可以恢复声音,但是我想可能还有另一个更简单的解决方案。



By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.