我在 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),已在许多问题中得到解决(1,2,3,4)并有一个相关的漏洞和线。
糟糕的解决方案
- 有人建议拔掉 HDMI 再重新插上 -> 非常糟糕
- 其他的尝试过脚本监视状态
xrandr
,但我认为这不可靠。我既不能可靠地检测错误状态,也不能通过这种方式恢复正确状态。 - 运行
killall pulseaudio
有时可能会恢复立体声,但不会恢复环绕音频。