如何检测 HDMI 断开/电视关闭

如何检测 HDMI 断开/电视关闭

我在 HTPC 上使用 Ubuntu,我想在电视关闭时终止浏览器等一系列进程。这是因为我的带宽有限,我想避免在电视关闭时流式传输内容,从而浪费带宽。

我的解决方案是每分钟运行一次 cron 任务检查关闭状态。但我不知道如何检测 HDMI 断开/电视关闭。

我一直在使用这个修复程序:电视关闭后 HDMI 音频停止电视关闭时 HDMI 声音修复。所以我可以修改代码,这样当 ELD_valid 从 1 切换到 0 时,就该关闭东西了。但我相信它正在通过 HDMI 监控声音状态?此外,这似乎是一个错误修复,所以只要存在错误,我的脚本就会起作用?

xrandr 看起来很有希望,但你必须以连接到显示器的用户身份运行它。所以我无法测试当电视通过 ssh 连接关闭时它会产生什么输出。

HDMI CEC 代码似乎是另一种解决方案,但您必须购买适配器,而且我的电视不支持 CEC。

有什么建议吗?谢谢。

PS 我使用的是 ATI 催化剂驱动程序。我很乐意使用 ATI 特定的解决方案。

答案1

xrandr 看起来很有前途,但您必须以连接到显示器的用户身份运行它。

严格来说,这是不对的。它必须能够连接到 X 服务器,但所需的只是 1) 显示号,以及 2) 通过 magic cookie 或通过 与 X 服务器对话的权限xauth

获取 cookie 的最简单方法是以当前登录到显示器的用户身份运行。提供显示器编号就像传递$DISPLAY给程序一样简单。

sudo -u displayuser env DISPLAY=:0.0 xrandr | grep -q '^xxxx disconnected'

答案2

这让我抓狂了。

修复

解决方案是防止 HDMI 音频在连接/断开时切换,这样它就不会改变状态。编辑您的/etc/pulse/default.pa并注释掉此行,添加#

#load-module module-switch-on-port-available

然后重新启动。

问题

注销/登录可恢复音频。打开或关闭显示器会禁用 HDMI 音频。有时 Ubuntu 会切换到“虚拟输出”,手动重新启用 HDMI 音频有时会恢复立体声但没有环绕声(7.2)。肯定会影响 Intel HDMI 和 Radeon HDMI,不确定 NVIDIA 卡是否受影响。

有几个状态损坏的音频可能位于:

  • 正确配置(通常在登录后)
  • 虚拟输出,找到 1 个音频设备或未找到任何音频设备
  • 仅立体声输出(无环绕声)
  • 选择立体声输出,无实际输出

历史

这个错误至少存在了十年(Ubuntu 12.04 到 22.04),已在许多问题中得到解决(1234)并有一个相关的漏洞线

糟糕的解决方案

  • 有人建议拔掉 HDMI 再重新插上 -> 非常糟糕
  • 其他的尝试过脚本监视状态xrandr,但我认为这不可靠。我既不能可靠地检测错误状态,也不能通过这种方式恢复正确状态。
  • 运行killall pulseaudio有时可能会恢复立体声,但不会恢复环绕音频。

相关内容