机械革命无界14Pro笔记本debian forky成功驱动内置扬声器和麦克风

我的机械革命无界14Pro笔记本安装了debian forky(当下的 debian testing 系统,也是未来的 debian 14代号),今天终于成功驱动了扬声器和麦克风。

先贴出 fastfetch 数据

fastfetch 
        _,met$$$$$gg.          dk@dkwujie14pro
     ,g$$$$$$$$$$$$$$$P.       ---------------
   ,g$$P""       """Y$$.".     OS: Debian GNU/Linux forky/sid (forky) x86_64
  ,$$P'              `$$$.     Host: WUJIE14 PRO
',$$P       ,ggs.     `$$b:    Kernel: Linux 6.19.11+deb14-amd64
`d$$'     ,$P"'   .    $$$     Uptime: 20 mins
 $$P      d$'     ,    $$P     Packages: 2976 (dpkg)
 $$:      $$.   -    ,d$$'     Shell: bash 5.3.9
 $$;      Y$b._   _,d$P'       Display (28U1): 3840x2160 @ 2x in 28", 60 Hz [External]
 Y$$.    `.`"Y$$$$P"'          DE: GNOME 49.5
 `$$b      "-.__               WM: Mutter (Wayland)
  `Y$$b                        WM Theme: Adwaita
   `Y$$.                       Theme: Adwaita [GTK2/3/4]
     `$$b.                     Icons: Adwaita [GTK2/3/4]
       `Y$$b.                  Font: Adwaita Sans (11pt) [GTK2/3/4]
         `"Y$b._               Cursor: Adwaita (32px)
             `""""             Terminal: GNOME Terminal 3.60.0
                               Terminal Font: JetBrains Mono (14pt)
                               CPU: 12th Gen Intel(R) Core(TM) i7-12650H (16) @ 4.70 GHz
                               GPU: Intel UHD Graphics @ 1.40 GHz [Integrated]
                               Memory: 7.11 GiB / 15.35 GiB (46%)
                               Swap: 0 B / 977.00 MiB (0%)
                               Disk (/): 90.31 GiB / 1.83 TiB (5%) - ext4
                               Local IP (wlp3s0): 10.10.10.242/24
                               Battery (AEC3166124-4S1P): 99% [AC Connected]
                               Locale: en_US.UTF-8

声卡是 Realtek ALC256,驱动扬声器的过程比较简单,在网上搜一下就很容易得到一个能成功的配置。但是麦克风的驱动着实让我尝试了很多遍才搞定。

重要的参考网站:

https://www.kernel.org/doc/html/latest/sound/hd-audio/models.html

还要特别感谢这篇文章 https://inkcodes.com/2025/09/14/%E6%9C%BA%E6%A2%B0%E9%9D%A9%E5%91%BD%2015x%E7%9A%84%20linux%20%E9%9F%B3%E9%A2%91%E7%88%86%E9%9F%B3%20codec%E6%A3%80%E6%B5%8B%E4%B8%8D%E5%88%B0%E4%BF%AE%E5%A4%8D%E2%80%94%E2%80%94model%E5%8F%82%E6%95%B0/

在此记录一下我这里的配置:

# ls /etc/modprobe.d/
alsa-alc256.conf  amd64-microcode-blacklist.conf  inteldsp.conf  intel-microcode-blacklist.conf
# cat alsa-alc256.conf
(空文件)
# cat inteldsp.conf
options snd-intel-dspcfg dsp_driver=3

重点:options snd-intel-dspcfg dsp_driver=3

这行配置是关键——强制内核使用 SOF(Sound Open Firmware)驱动栈,走 Intel DSP + SOF 路径,而不是 legacy HDA。在 12 代 Intel 平台上,SOF 配合 UCM2 才能正确 routing 麦克风和扬声器。

2026-06-18 更新:经过深入诊断,发现原先的 options snd-hda-intel model=laptop-amic 是一个无效配置。SOF 驱动栈完全不读取 snd-hda-intelmodel= 参数(该模块 refcnt=0,未被实际驱动使用)。真正起作用的只有 dsp_driver=3。本机的 Codec 组件字符串中明确写了 cfg-dmics:2,说明内置麦克风是数字麦克风阵列(DMIC),并非模拟麦克风(AMIC)。因此 alsa-alc256.conf 已清空。

扬声器和麦克风驱动小结

配置 作用 状态
inteldsp.conf: dsp_driver=3 强制 SOF 驱动栈 保留(旧内核必需,7.0+ 上 SOF 已默认)
alsa-alc256.conf: model=laptop-amic 无实际效果 已清空

现在内置扬声器和内置麦克风都能工作了。见下图

终于成功驱动了笔记本的内置扬声器和麦克风.jpg

2026-06-18 更新:3.5mm 耳机修复

之前内置扬声器和麦克风都正常了,但插入 3.5mm 耳机声音仍从扬声器输出。经过诊断,问题根源是硬件插孔检测不工作Headphone Jack ALSA 控制始终为 off),导致 PipeWire 认为耳机端口不可用,同时 UCM2 的 JackControl 依赖此检测。

修复方法

1. 修改 UCM2 配置,注释耳机 JackControl(绕过失效的插孔检测)

sudo cp /usr/share/alsa/ucm2/HDA/HiFi-analog.conf{,.bak}
sudo sed -i 's/^\([[:space:]]*\)JackControl "${var:hpjack}"/\1#JackControl "${var:hpjack}"/' \
    /usr/share/alsa/ucm2/HDA/HiFi-analog.conf

2. 创建 Profile 切换脚本

~/.local/bin/toggle-audio.sh

#!/bin/bash
CARD="alsa_card.pci-0000_00_1f.3-platform-skl_hda_dsp_generic"
SPK_PROFILE="HiFi (HDMI1, HDMI2, HDMI3, Mic1, Mic2, Speaker)"
HP_PROFILE="HiFi (HDMI1, HDMI2, HDMI3, Headphones, Mic1, Mic2)"
SPK_SINK="alsa_output.pci-0000_00_1f.3-platform-skl_hda_dsp_generic.HiFi__Speaker__sink"
HP_SINK="alsa_output.pci-0000_00_1f.3-platform-skl_hda_dsp_generic.HiFi__Headphones__sink"

current=$(pactl list cards 2>/dev/null | grep "Active Profile" | grep -o "Speaker")

if [ -n "$current" ]; then
    pactl set-card-profile "$CARD" "$HP_PROFILE"
    sleep 0.3
    pactl set-default-sink "$HP_SINK"
    for i in $(pactl list sink-inputs short 2>/dev/null | awk '{print $1}'); do
        pactl move-sink-input "$i" "$HP_SINK" 2>/dev/null
    done
    notify-send -a "音频切换" "已切换到耳机" -i audio-headphones
else
    pactl set-card-profile "$CARD" "$SPK_PROFILE"
    sleep 0.3
    pactl set-default-sink "$SPK_SINK"
    for i in $(pactl list sink-inputs short 2>/dev/null | awk '{print $1}'); do
        pactl move-sink-input "$i" "$SPK_SINK" 2>/dev/null
    done
    notify-send -a "音频切换" "已切换到扬声器" -i audio-speakers
fi
chmod +x ~/.local/bin/toggle-audio.sh

3. 绑定快捷键 Super+Alt+S 到此脚本(GNOME 设置 → 键盘 → 自定义快捷键)

4. 重启音频服务

systemctl --user restart wireplumber pipewire pipewire-pulse

原理

SOF 的 Speaker / Headphones 是两个互斥的 HiFi Profile,共用同一个 ALSA PCM 设备。正常情况下 PipeWire 依赖插孔检测自动切换 Profile,但本机插孔检测失效。注释掉 JackControl 后耳机端口始终可用,切换脚本负责在两个 Profile 之间手动切换,WirePlumber 各自管理音量互不干扰。

最终配置文件一览

文件 内容 说明
/etc/modprobe.d/inteldsp.conf options snd-intel-dspcfg dsp_driver=3 强制 SOF 驱动栈
/etc/modprobe.d/alsa-alc256.conf 空文件 model= 在 SOF 下无效,已清空
/usr/share/alsa/ucm2/HDA/HiFi-analog.conf 第 156 行注释 JackControl 绕过失效的耳机插孔检测
~/.local/bin/toggle-audio.sh Profile 切换脚本 Super+Alt+S 触发

详细诊断过程见 MECHREVO WUJIE14 PRO on Linux 声卡完整修复历程

最后修改于:2026年06月18日 16:47

已有 2 条评论

  1. colin colin

    好像 archlinux 的一直都可以(我用的是 archlinux + xfce + pipewire),唯一缺的就是指纹识别了

    1. archlinux的社区是不是非常活跃,我还没试过这个发行版,我总是想着省事 -_-

添加新评论