9.2. 设置声卡 ============= 在默认情况下,FreeBSD 会自动检测系统使用的声卡。FreeBSD 支持各种各样的声卡。可以在\ `硬件兼容列表 `__\ 中查看受支持的音频设备列表。 **注意** 只有在 FreeBSD 没有正确检测到声卡模块的情况下才有必要加载之。 如果不知道系统有什么声卡,也不知道该使用哪个模块,可以通过执行以下命令加载 ``snd_driver`` 元驱动: .. raw:: latex \diilbookstyleinputcell .. code:: shell-session # kldload snd_driver 要在启动时自动加载这个驱动程序,请将下面一行添加到 **/boot/loader.conf** 中: .. raw:: latex \diilbookstyleinputcell .. code:: shell-session snd_driver_load="YES" 9.2.1. 测试声卡 --------------- 运行下列命令来侦测显卡: .. raw:: latex \diilbookstyleinputcell .. code:: shell-session % dmesg | grep pcm 输出结果看起来应该像这样: .. raw:: latex \diilbookstyleinputcell .. code:: shell-session pcm0: at nid 26,22 and 24 on hdaa0 pcm1: at nid 29 on hdaa0 也可以用这个命令检查声卡的状态: .. raw:: latex \diilbookstyleinputcell .. code:: shell-session # cat /dev/sndstat 输出结果看起来应该像这样: .. raw:: latex \diilbookstyleinputcell .. code:: shell-session Installed devices: pcm0: (play/rec) default pcm1: (rec) 如果没有 ``pcm`` 设备被列出,请仔细检查是否有正确的设备驱动程序被载入或编译到内核里。如果一切顺利,现在在 FreeBSD 中声卡应该可以工作了。 `beep(1) `__ 可通过产生一些噪音来确认声卡是否正常工作: .. raw:: latex \diilbookstyleinputcell .. code:: shell-session % 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 这些条目,以确定系统是如何列举输出的。执行下面的命令: .. raw:: latex \diilbookstyleinputcell .. code:: shell-session % dmesg | grep pcm 输出结果看起来像这样: .. raw:: latex \diilbookstyleinputcell .. code:: shell-session pcm0: at cad 0 nid 1 on hdac0 pcm1: at cad 1 nid 1 on hdac0 pcm2: at cad 2 nid 1 on hdac0 pcm3: at cad 3 nid 1 on hdac0 hdac1: HDA Codec #2: Realtek ALC889 pcm4: at cad 2 nid 1 on hdac1 pcm5: at cad 2 nid 1 on hdac1 pcm6: at cad 2 nid 1 on hdac1 pcm7: at cad 2 nid 1 on hdac1 在这个例子中,NVIDIA® 显卡(集成的声卡)的排序先于 Realtek® 声卡,声卡被标识为 ``pcm4``\ 。执行下列命令让 Realtek® 声卡成为默认播放设备: .. raw:: latex \diilbookstyleinputcell .. code:: shell-session # sysctl hw.snd.default_unit=4 在 **/etc/sysctl.conf** 中加入以下一行,使这个改变永久化: .. raw:: latex \diilbookstyleinputcell .. code:: shell-session hw.snd.default_unit=4 9.2.4. 自动切换到耳机 --------------------- 有些系统可能会在音频输出之间的切换上遇到困难,但幸运的是 FreeBSD 允许在 **device.hints** 中配置自动切换。 通过执行以下命令,查看系统是如何列举音频输出的: .. raw:: latex \diilbookstyleinputcell .. code:: shell-session % dmesg | grep pcm 输出结果看起来像这样: .. raw:: latex \diilbookstyleinputcell .. code:: shell-session pcm0: at nid 23 and 26 on hdaa0 pcm1: at nid 22 on hdaa0 在 **/boot/device.hints** 中添加下列行: .. raw:: latex \diilbookstyleinputcell .. code:: shell-session 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 `__\ ,打开命令行: .. raw:: latex \diilbookstyleinputcell .. code:: shell-session # pacmd Welcome to PulseAudio 14.2! Use "help" for usage information. >>> 下面的命令将默认的 sink 改为前面例子中的声卡编号 4 : .. raw:: latex \diilbookstyleinputcell .. code:: shell-session set-default-sink 4 .. **警告** 不要使用 ``exit`` 命令来退出命令行界面。那会杀死 `audio/pulseaudio `__ 守护进程。应该用 ``Ctrl``\ +\ ``D`` 代替之。