后续行动来自:如何让我的联想 Y50 的低音炮在 Linux 上工作?
简而言之,我有一台联想 Y50,它有一个集成低音炮,只有当我使用 HDA Analyzer 在两个引脚上设置一些设置时,它才能在 Linux Mint 上工作。同样的解决方案在 Fedora 和其他发行版上不起作用。更多信息请参见上面的链接。
我花了一些时间进行进一步调查,并注意到 HDA Analyzer 的文本转储选项卡显示的每个引脚、每个发行版都有差异(左边是 Linux Mint,右边是 Fedora):
我了解到 D0 表示全功率状态,D3 表示低功耗状态。我研究过如何完全禁用音频卡上的省电功能,因此我在 Fedora 上尝试了以下操作,在终端中输入并在重启前后进行测试,但这并没有解决我的问题:
echo 0 > /sys/module/snd_hda_intel/parameters/power_save
echo N > /sys/module/snd_hda_intel/parameters/power_save_controller
我也尝试过启用Linux Mint 上的省电功能确实在重启之前禁用了低音炮(重启后仍然被禁用)。
我想知道是否有人知道如何进一步尝试将这两个引脚(0x17 和 0x1a)上的电源状态从 D3 切换到 D0,以使我的低音炮输出声音。谢谢!
编辑:这是一个基于我编写的 python 脚本的解决方案这里。不要忽视下面有帮助的答案(再次感谢!)。
答案1
除了将引脚 0x17 和 0x1a 的电源状态设置为 D0 之外,还要尝试增加节点 0x3 (AUD_OUT) 的输出音量。
在运行 Debian 测试的同一型号笔记本电脑上进行测试,低音炮现在可以正常工作。
一个简单的测试方法是插入耳机,低音炮不会静音。
答案2
在 freenode 上的 #alsa IRC 频道的帮助下debianuser
,我想我可能已经接近目标了。似乎可以使用 hda_verb 工具(alsa-tools 的一部分)设置电源状态,但是似乎没有专门控制的选项power_save_controller
,只有。您可以通过运行来获取有关可以设置power state
哪些内容的信息parameters
hda-verb -L
例子获得这电源状态设备:
sudo hda-verb /dev/snd/hwC1D0 0x1a GET_POWER POWER_STATE
例子环境这电源状态设备:
sudo hda-verb /dev/snd/hwC1D0 0x17 SET_POWER 0x0 POWER_STATE
因此具体来说你需要做的是运行:
sudo hda-verb /dev/snd/hwC1D0 0x17 SET_POWER 0x0
sudo hda-verb /dev/snd/hwC1D0 0x1a SET_POWER 0x0
请注意,以下情况无效:HDA 分析仪正在运行,但之后可以启动它来验证更改是否有效。在我的情况下,它确实将其更改为 D0。
我想知道这是否解决了您的问题?
正如所说,我有同样的电脑,但我不完全确定我的低音炮是否真的关闭了,因为在 Windows 或 Archlinux 中播放时,我听不出与我创建的示例声音文件有什么区别。也许频率(65 hz)太高了?以防其他人想测试它:
http://miyalys.eu.org/files/65hzsine.wav
也许我们可以找到一种方法来禁用常规扬声器,以便只打开低音炮?
编辑:在莱纳布的回答,我创建了这个必须以 root 身份运行的脚本,它只使用 hda-verb 即可完成所有这些操作。不过,不确定音量是否完全正常。(欢迎反馈)并且,插入耳机后低音炮不会静音的问题仍然存在。
#! /usr/bin/env sh
# Run this script as root!
dev="/dev/snd/hwC1D0"
hda-verb $dev 0x17 SET_POWER 0x0
hda-verb $dev 0x1a SET_POWER 0x0
hda-verb $dev 0x03 0x300 0xa055
hda-verb $dev 0x03 0x300 0x9055
hda-verb $dev 0x17 0x300 0xb000
hda-verb $dev 0x17 0x707 0x40
hda-verb $dev 0x1a 0x707 0x25
如果有必要,所有这些步骤也可以不使用 hda-verb,而只使用 python 来完成,但这会使代码不那么干净。