我有一台 HP 15z-fc000,在热启动(即执行“重启”后)后,其内置扬声器无法播放声音。冷启动(即执行“关机”后,等待其完全关闭,然后使用电源按钮将其重新打开)后,它工作正常。当它不工作时,我看到的输出设备名称为“虚拟输出”。这是lspci -vvvnn
当它损坏时,热启动时的相关设备:
03:00.6 Audio device [0403]: Advanced Micro Devices, Inc. [AMD] Family 17h (Models 10h-1fh) HD Audio Controller [1022:15e3]
Subsystem: Hewlett-Packard Company Family 17h (Models 10h-1fh) HD Audio Controller [103c:8b2f]
Control: I/O- Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B- DisINTx-
Status: Cap+ 66MHz- UDF- FastB2B- ParErr- DEVSEL=fast >TAbort- <TAbort- <MAbort- >SERR- <PERR- INTx-
Latency: 0, Cache Line Size: 64 bytes
Interrupt: pin C routed to IRQ 54
IOMMU group: 17
Region 0: Memory at fccc0000 (32-bit, non-prefetchable) [size=32K]
Capabilities: [48] Vendor Specific Information: Len=08 <?>
Capabilities: [50] Power Management version 3
Flags: PMEClk- DSI- D1- D2- AuxCurrent=0mA PME(D0+,D1-,D2-,D3hot+,D3cold+)
Status: D0 NoSoftRst+ PME-Enable- DSel=0 DScale=0 PME-
Capabilities: [64] Express (v2) Endpoint, MSI 00
DevCap: MaxPayload 256 bytes, PhantFunc 0, Latency L0s <4us, L1 unlimited
ExtTag+ AttnBtn- AttnInd- PwrInd- RBE+ FLReset- SlotPowerLimit 0.000W
DevCtl: CorrErr- NonFatalErr- FatalErr- UnsupReq-
RlxdOrd+ ExtTag+ PhantFunc- AuxPwr- NoSnoop+
MaxPayload 256 bytes, MaxReadReq 512 bytes
DevSta: CorrErr- NonFatalErr- FatalErr- UnsupReq- AuxPwr- TransPend-
LnkCap: Port #0, Speed 16GT/s, Width x16, ASPM L0s L1, Exit Latency L0s <64ns, L1 <1us
ClockPM- Surprise- LLActRep- BwNot- ASPMOptComp+
LnkCtl: ASPM Disabled; RCB 64 bytes, Disabled- CommClk+
ExtSynch- ClockPM- AutWidDis- BWInt- AutBWInt-
LnkSta: Speed 16GT/s (ok), Width x16 (ok)
TrErr- Train- SlotClk+ DLActive- BWMgmt- ABWMgmt-
DevCap2: Completion Timeout: Range ABCD, TimeoutDis+ NROPrPrP- LTR-
10BitTagComp+ 10BitTagReq- OBFF Not Supported, ExtFmt+ EETLPPrefix+, MaxEETLPPrefixes 1
EmergencyPowerReduction Not Supported, EmergencyPowerReductionInit-
FRS- TPHComp- ExtTPHComp-
AtomicOpsCap: 32bit- 64bit- 128bitCAS-
DevCtl2: Completion Timeout: 50us to 50ms, TimeoutDis- LTR- OBFF Disabled,
AtomicOpsCtl: ReqEn-
LnkSta2: Current De-emphasis Level: -3.5dB, EqualizationComplete- EqualizationPhase1-
EqualizationPhase2- EqualizationPhase3- LinkEqualizationRequest-
Retimer- 2Retimers- CrosslinkRes: unsupported
Capabilities: [a0] MSI: Enable- Count=1/1 Maskable- 64bit+
Address: 0000000000000000 Data: 0000
Capabilities: [100 v1] Vendor Specific Information: ID=0001 Rev=1 Len=010 <?>
Capabilities: [2a0 v1] Access Control Services
ACSCap: SrcValid- TransBlk- ReqRedir- CmpltRedir- UpstreamFwd- EgressCtrl- DirectTrans-
ACSCtl: SrcValid- TransBlk- ReqRedir- CmpltRedir- UpstreamFwd- EgressCtrl- DirectTrans-
Kernel driver in use: snd_hda_intel
Kernel modules: snd_hda_intel
在冷启动工作时,它有DisINTx+
而不是DisINTx-
、MSI: Enable+
而不是MSI: Enable-
和Address: 00000000fee00000
而不是Address: 0000000000000000
。
当它坏了的时候,热启动时我根本看不到这个设备aplay -l
,但是当它工作的时候,冷启动时它就出现在这里,就像这样:
card 1: Generic_1 [HD-Audio Generic], device 0: ALC236 Analog [ALC236 Analog]
Subdevices: 1/1
Subdevice #0: subdevice #0
我尝试过 Ubuntu 22.04(全新安装,不是从旧版本升级)和 23.04(从实时 USB 升级),但都无法正常工作。如果有解决方案可以解决其中一个问题,我很乐意使用其中任何一个。以下是我尝试过的其他一些方法及其结果:
- 添加
snd-hda-intel.model=generic
到内核命令行,或附加options snd-hda-intel model=generic
到/etc/modprobe.d/alsa-base.conf
- 将我看到的输出设备更改为“HD-Audio 通用数字立体声 (HDMI)”,但我仍然听不到通过它播放的任何内容。 - 添加
snd-hda-intel.dmic_detect=0
到内核命令行,或附加options snd-hda-intel dmic_detect=0
到/etc/modprobe.d/alsa-base.conf
- 没有明显的变化 - 同时进行上述两项操作 - 除了第一种操作单独进行的操作外,没有明显的变化
- 从以下位置引导 6.3.0 主线内核https://kernel.ubuntu.com/~kernel-ppa/mainline/v6.3/amd64/- 没有明显变化
pulseaudio --kill
其次是pulseaudio --start
:PulseAudio 再也没有恢复,我甚至无法再看到声音偏好设置,直到我重新启动sudo touch /usr/share/pipewire/media-session.d/with-pulseaudio
其次是systemctl --user restart pipewire-session-manager
:没有明显变化
我没什么主意了。我下一步该尝试/做什么?
答案1
我编写了一组“标准”命令,它帮助许多人诊断(然后解决)音频问题。特别是,如果您看到“虚拟输出”。
请检查Ubuntu 20.04 重启后只有“虚拟输出”(声音)-驱动程序/模块损坏 并发布您发现的任何结果。
答案2
同一台笔记本电脑也存在同样的问题。第一次可以正常工作,但重启后就不行了(虚拟输出)。我还发现 Ubuntu 21.10 仍然可以正常工作美好的至少在这方面是这样的(即,你可以重启而不会出现任何问题)。但是,Ubuntu 22.04(第一个版本)与 Linux 5.15 却不是无法正常工作。如果我没记错的话,Ubuntu 21.10 仍然使用 Linux 5.13。这意味着该问题很可能是在 5.13 和 5.15 之间的某个驱动程序中引入的。
我注意到的另一件事是声音设备标识符的枚举方式不同:
- 在 Ubuntu 22.04+ 中,我们有:
猫/系统/类/声音/hwC1D0/子系统_id:0xaa0100
猫/系统/类/声音/hwC2D0/子系统_id:0x103c8b30
- 在 Ubuntu 21.10 中,我们有:
猫/系统/类/声音/hwC0D0/子系统_id:0xaa0100
猫/系统/类/声音/hwC1D0/子系统_id:0x103c8b30
注意,在 Ubuntu 21.10 中它从 hwC0D0 启动,但在 Ubuntu 22.04+ 中它从 hwC1D0 启动。此外,在完全重启后,hwC2D0消失。
当驱动程序卸载时,编解码器(hwC2D0)是否会以某种方式关闭?
答案3
在收到来自鲁斯兰,也就是说,这在以前的 Ubuntu 版本中工作正常,我设法确认这是由提交导致的内核回归5aec98913095ed3b4424ed6c5fdeb6964e9734da
。我报告说https://bugzilla.kernel.org/show_bug.cgi?id=217440并且目前正在通过构建自定义内核并恢复该更改来解决这个问题。Regzbot 链接:https://linux-regtracking.leemhuis.info/regzbot/regression/bugzilla.kernel.org/217440/