用户工具

站点工具


faq:snd_output

如果你的机器扬声器可以发声,但是插上耳机后,耳机却没声音,那么这就属于本篇接下来要讨论的问题。
注意:
1.如果尚未解决声卡驱动问题,则不在本篇讨论范围之内。
2.sysctl hw.snd.default_unit=1 或0的也能切换输出,但十分麻烦,只对新启动的程序有效

由于硬件不同解决办法也不同,所以无法给出一个通用的配置,只能提供一个解决问题的思路。
所以抄了网上来路不明的配置的同学还是先删掉再说吧。

以我的笔记本 ThinkPad R400 为例,声卡为 Conexant,驱动使用的是 snd_hda。

第一步

重启,看到启动菜单时按空格暂停,选择 verbose 模式回车,
登陆后执行 dmesg | grep hda > hda.log 得到默认的硬件配置状况。
我的机器上有这样一段输出:

hdaa0: Original pins configuration:
hdaa0: nid   0x    as seq device       conn  jack    loc        color   misc
hdaa0: 22 022140f0 15 0  Headphones    Jack  1/8     Front      Green   0   
hdaa0: 23 61a190f0 15 0  Mic           None  1/8     Ext-Rear   Pink    0   
hdaa0: 24 02a190f0 15 0  Mic           Jack  1/8     Front      Pink    0   
hdaa0: 25 40f000f0 15 0  Other         None  Unknown 0x00       Unknown 0
hdaa0: 26 901701f0 15 0  Speaker       Fixed Analog  Internal   Unknown 1
hdaa0: 27 40f001f0 15 0  Other         None  Unknown 0x00       Unknown 1
hdaa0: 28 40f001f0 15 0  Other         None  Unknown 0x00       Unknown 1
hdaa0: 29 90a601f0 15 0  Mic           Fixed Digital Internal   Unknown 1

解释一下几个缩写:
nid:nodes with ID(设备节点 ID)
as:association(第 N 组)
seq:sequence(顺序)

那么对照前面的输出,我们就得知 Headphones(耳机) 的 nid 为22,Speaker(扬声器) 的 nid 为26。

第二步

接下来要做的工作就是修改 /boot/device.hints
把扬声器和耳机放到同一组里,比如 as=2。
还需要当检测到耳机插入时,将扬声器静音,输出到耳机,
根据 man snd_hda 中的描述,为了实现上述功能必须把 Headphones 的 seq 设置为15。
因此得到如下配置:

hint.hdac.0.cad0.nid22.config="as=2 seq=15 device=Headphones"
hint.hdac.0.cad0.nid26.config="as=2 seq=0 device=Speaker"

重启后问题解决。

/data/vhosts/wiki-data/pages/faq/snd_output.txt · 最后更改: 2013/05/30 18:08 由 syh