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 代替之。