9.2. 设置声卡
在默认情况下,FreeBSD 会自动检测系统使用的声卡。FreeBSD 支持各种各样的声卡。可以在硬件兼容列表中查看受支持的音频设备列表。
注意
只有在 FreeBSD 没有正确检测到声卡模块的情况下才有必要加载之。
如果不知道系统有什么声卡,也不知道该使用哪个模块,可以通过执行以下命令加载 snd_driver
元驱动:
# kldload snd_driver
要在启动时自动加载这个驱动程序,请将下面一行添加到 /boot/loader.conf 中:
snd_driver_load="YES"
9.2.1. 测试声卡
运行下列命令来侦测显卡:
% dmesg | grep pcm
输出结果看起来应该像这样:
pcm0: <Conexant CX20561 (Hermosa) (Analog 2.0+HP/2.0)> at nid 26,22 and 24 on hdaa0
pcm1: <Conexant CX20561 (Hermosa) (Internal Analog Mic)> at nid 29 on hdaa0
也可以用这个命令检查声卡的状态:
# cat /dev/sndstat
输出结果看起来应该像这样:
Installed devices:
pcm0: <Conexant CX20561 (Hermosa) (Analog 2.0+HP/2.0)> (play/rec) default
pcm1: <Conexant CX20561 (Hermosa) (Internal Analog Mic)> (rec)
如果没有 pcm
设备被列出,请仔细检查是否有正确的设备驱动程序被载入或编译到内核里。如果一切顺利,现在在 FreeBSD 中声卡应该可以工作了。
beep(1) 可通过产生一些噪音来确认声卡是否正常工作:
% beep
9.2.2. 混音器
FreeBSD 系统中内置了不同的工具来设置和展示声卡混音器的属性。
表 15. 支持的混音器软件包
名称 | 许可证 | 软件包 | 工具包 |
---|---|---|---|
mixer(8) | BSD-2 | 系统自带 | 命令行界面 |
dsbmixer | BSD-2 | audio/dsbmixer | Qt |
KDE Plasma 声音组件 | GPL 2.0 | audio/plasma5-plasma-pa | Qt |
mixertui | BSD-2 | audio/mixertui | 文本用户界面 |
9.2.3. 显卡声音
显卡通常有自己的集成声音设备,可能不清楚哪个设备被用作了默认设备。为了确认,运行 dmesg,寻找 pcm 这些条目,以确定系统是如何列举输出的。执行下面的命令:
% dmesg | grep pcm
输出结果看起来像这样:
pcm0: <HDA NVidia (Unknown) PCM #0 DisplayPort> at cad 0 nid 1 on hdac0
pcm1: <HDA NVidia (Unknown) PCM #0 DisplayPort> at cad 1 nid 1 on hdac0
pcm2: <HDA NVidia (Unknown) PCM #0 DisplayPort> at cad 2 nid 1 on hdac0
pcm3: <HDA NVidia (Unknown) PCM #0 DisplayPort> at cad 3 nid 1 on hdac0
hdac1: HDA Codec #2: Realtek ALC889
pcm4: <HDA Realtek ALC889 PCM #0 Analog> at cad 2 nid 1 on hdac1
pcm5: <HDA Realtek ALC889 PCM #1 Analog> at cad 2 nid 1 on hdac1
pcm6: <HDA Realtek ALC889 PCM #2 Digital> at cad 2 nid 1 on hdac1
pcm7: <HDA Realtek ALC889 PCM #3 Digital> at cad 2 nid 1 on hdac1
在这个例子中,NVIDIA® 显卡(集成的声卡)的排序先于 Realtek® 声卡,声卡被标识为 pcm4
。执行下列命令让 Realtek® 声卡成为默认播放设备:
# sysctl hw.snd.default_unit=4
在 /etc/sysctl.conf 中加入以下一行,使这个改变永久化:
hw.snd.default_unit=4
9.2.4. 自动切换到耳机
有些系统可能会在音频输出之间的切换上遇到困难,但幸运的是 FreeBSD 允许在 device.hints 中配置自动切换。
通过执行以下命令,查看系统是如何列举音频输出的:
% dmesg | grep pcm
输出结果看起来像这样:
pcm0: <Realtek ALC892 Analog> at nid 23 and 26 on hdaa0
pcm1: <Realtek ALC892 Right Analog Headphones> at nid 22 on hdaa0
在 /boot/device.hints 中添加下列行:
hint.hdac.0.cad0.nid22.config="as=1 seq=15 device=Headphones"
hint.hdac.0.cad0.nid26.config="as=2 seq=0 device=speakers"
注意
请记住,这些值是针对上面的例子。它们依据具体的系统而定。
9.2.5. 声卡的故障排除
一些常见的错误信息和它们的解决方案:
表 16. 常见错误信息
| 错误 | 解决方案 | | :-------------------------: | :---------: | ----------------------------------------------------------------------------------------------------- | | xxx: can’t open /dev/dsp!
| 输入 fstat | grep dsp
来检查是否有其他的应用程序在打开设备。值得注意的是 esound 和 KDE 的声音支持常常会出现问题。 |
要让 hw.snd.default_unit
中的变更生效,使用 audio/pulseaudio 的程序可能需要重启守护程序audio/pulseaudio。另一种方式是实时更改 audio/pulseaudio 设置——用 pacmd(1) 定位到守护程序 audio/pulseaudio,打开命令行:
# pacmd
Welcome to PulseAudio 14.2! Use "help" for usage information.
>>>
下面的命令将默认的 sink 改为前面例子中的声卡编号 4 :
set-default-sink 4
警告
不要使用
exit
命令来退出命令行界面。那会杀死 audio/pulseaudio 守护进程。应该用Ctrl
+D
代替之。