彻底解决 Ubuntu 10.04 对部分声卡不支持或耳机无声的问题

文章目录

症状描述

我的一位朋友的笔记本在我的推荐下安装了 Ubuntu 系统。最初他安装的是 9.10 版本,WIFI 支持有些问题。随后他升级到了 10.04 版本,WIFI 正常了,可是耳机插入后却没有声音,只能使用自带扬声器。 为了解决这个问题,我今天从十一点开始研究,到晚上 19 点才成功搞定。

症状 Ubuntu 10.04 系统,Thinkpad X100e 笔记本,使用 Conexant 80925(貌似是这个数字,如果不是也不要紧,所有 Conexant 芯片解决方法相同)芯片的声卡。插入耳机后扬声器继续发生,耳机没有声音。

请注意:如果你只是为了解决这个问题,请跳过前面的尝试,直接阅读最终的解决方案。不过,阅读这些尝试,对于新手来说,也能增长不少见识。

尝试一:重新安装操作系统

由于这位朋友的笔记本电脑之前安装 9.10 版本时并没有问题,所以我首先想到的可能性,就是在升级到 10.04 时出现问题。所以我决定直接重新安装最新的 10.04 操作系统。 遇到的问题是,他的笔记本没有光驱,所以我需要制作一个安装 Ubuntu 10.04 的启动 U 盘。 首先下载获得 ubuntu-10.04.iso 镜像文档。 然后,插入一个无用的光盘(容量最好在 1GB 以上),在 Ubuntu 中选择「系统」->「系统管理」->「制作启动盘」,点「格式化」格式化该盘(请提前备份),然后选择我下载到的镜像,制作一个启动 U 盘。 制作完成后,使用该 U 盘引导系统(在X100e中的操作:开机时按 Enter,再按 F12,再选择 USB-HDD)。安装 Ubuntu 10.04 时,注意一定不要安装两个相同的系统,而要覆盖原先的系统。 结果:重新安装结束,问题依旧。

尝试二:编辑 modprobe 配置

根据网上查到的数据,可以通过编辑 modprobe 配置文档解决问题,但请注意!在 Ubuntu 高版本中,该文档被加上了 .conf 后缀。(很多人反应不存在该文档,就是因为这个。) 要通过编辑该文档解决该问题,首先要明确好多事情。

1、什么是 ALSA? Linux 通过 ALSA 管理声卡驱动。它为各种声卡提供了较为统一的接口。它是模块化管理的,snd- 开头的模块就是此类模块。

2、哪个模块管理你的音频设备? 通过下面的命令检查你的 snd 模块。

lsmod | grep '^snd-'

在找到的结果中辨认出你的声卡音频设备所用的模块。在我这里,这个模块是 snd-hda-intel。

3、明确你的声卡型号。

sudo head -1 /proc/asound/card0/codec#0

4、根据你的声卡型号,确定你声卡所相似的 Model。

  1. http://www.alsa-project.org/ 下载最新版本的 ALSA Driver 源代码。
  2. 找到 /alsa-kernel/Documentation/HD-Audio-Models.txt 文档并用文本编辑器打开。
  3. 在其中浏览寻找和你的声卡型号相似或相同的声卡型号,比如你的声卡是 ALC880,那么附近有这些行:

    ALC880 ====== 3stack 3-jack in back and a headphone out 3stack-digout 3-jack in back, a HP out and a SPDIF out 5stack 5-jack in back, 2-jack in front 5stack-digout 5-jack in back, 2-jack in front, a SPDIF out 6stack 6-jack in back, 2-jack in front 6stack-digout 6-jack with a SPDIF out w810 3-jack z71v 3-jack (HP shared SPDIF) asus 3-jack (ASUS Mobo) asus-w1v ASUS W1V asus-dig ASUS with SPDIF out asus-dig2 ASUS with SPDIF out (using GPIO2) uniwill 3-jack fujitsu Fujitsu Laptops (Pi1536) F1734 2-jack lg LG laptop (m1 express dual) lg-lw LG LW20/LW25 laptop tcl TCL S700 clevo Clevo laptops (m520G, m665n) medion Medion Rim 2150 test for testing/debugging purpose, almost all controls can be adjusted. Appearing only when compiled with $CONFIG_SND_DEBUG=y auto auto-config reading BIOS (default)

左边是其对应的 Model,右边是注释。记住,default 是默认采用的方案。

  1. 查找声卡参数 在你下载的源码中,找到 ALSA-Configuration.txt,从中用Chip型号中的关键字,一般是最后一段搜索,或lsmod得到的声卡 Model 名搜索,再用Chip型号定位。查出可用的参数。

  2. 编辑配置文档 加在 /etc/modprobe.d/modprobe.conf,/etc/modprobe.conf 或 /etc/modprobe.d/options 中,具体取决于发行版,在ubuntu 10.04 中是第一个,早期版本是第二个,别的发行版可能少有不同。 记住用 sudo 打开你的文本编辑器。在最后一行加上(请先不要急忙拷贝):

options snd-hda-intel single_cmd=1 model=laptop-eapd

这里,snd-hda-intel 要改成你用的 snd 模块名称(在上文有查阅方法),single_cmd=1 要改成声卡参数(要一个参数一个参数组合测试),model后写上对应的 Model 之一。 不停的修改参数和 Model,如果你的运气足够好,应该就可以解决这个问题。 每次都要用sudo编辑该文档,然后重新启动生效,然后重新测试你的声卡。 如果你在重新启动的时候无法启动,请尝试按 Ctrl + Alt + F2,然后进入控制台,键入 sudo reboot 重新启动。 就这样一次次的尝试就有可能解决这个问题。可是,我没有能够解决该问题。 如果想不用每次都重新启动,可以试图杀死占用声卡的进程,并重新加载声卡模块。

尝试三:编译安装最新版本的 ALSA 驱动

网上有大量的文章说,以前的 ALSA 驱动不支持很多声卡型号和耳机,升级到最新版本的 ALSA 驱动就能解决问题。 Ubuntu 10.04 自带的版本是 1.0.22,而最新版本是 1.0.23,为此需要升级 ALSA 版本到最新。 首先要从 http://www.alsa-project.org/ 下载最新版本的 ALSA Driver。要下载的是三个包:alsa-driver,alsa-lib,alsa-utils。下载完成后,应该按照从前到后的顺序去安装。

一、编译安装 alsa-driver:

[1]解压缩 alsa-driver 到 ~/ad/。

[2]在终端输入:

sudo /etc/init.d/alsa-utils stop
sudo /etc/init.d/alsasound stop
cd ~/ad/
./configure --with-cards=all
make
sudo make install

[3]如果提示找不到 libasound 大于 1.0.16 以上版本,找不到 xmlto 命令之类错误,请先安装相关的依赖包(如下)后,再继续。

sudo apt-get install build-essential
sudo apt-get install linux-headers-\`uname -r\`
sudo apt-get install libncursesw5-dev
sudo apt-get install gettext
sudo apt-get install xmlto
sudo apt-get install kernel-package gcc make libc6 libc6-dev

下载这些包并编译安装成功大概需要两到三个小时的时间。

二、编译安装 alsa-lib。

[1]解压缩 alsa-lib 到 ~/al/。

[2]在终端输入:

cd ~/al/
./configure --with-cards=all
make
sudo make install

三、编译安装 alsa-utils

[1]解压缩 alsa-utils 到 ~/au/。

[2]在终端输入:

cd ~/au/
./configure
make
sudo make install

在上述「sudo ./configure」 编译过程中,如像我一样遇到以下错误: checking form.h presence… yes checking for form.h… yes checking for new_panel in -lpanelw… no configure: error: panelw library not found 你需要先创建以下链接,再重新运行以上sudo ./configure编译步骤:

sudo ln -s libpanelw.so.5 /usr/lib/libpanelw.so 
sudo ln -s libformw.so.5 /usr/lib/libformw.so 
sudo ln -s libmenuw.so.5 /usr/lib/libmenuw.so 
sudo ln -s libncursesw.so.5 /lib/libncursesw.so

四、配置你的声卡。

[1]在终端输入下面的命令:

sudo alsaconf

随后系统将会询问你一些问题,主要是让你选择声卡,后面的问题都回答OK就可以,最后选择 No_more_cards 退出。

[2]在终端输入下面的命令:

cd ~/au/alsamixer/
sudo chmod +x ./alsamixer
sudo ./alsamixer

其中~/au是你解压缩 alsa-utils 的路径。

随后系统会出现一些设置画面,在这里你可以选择声卡、自动修改配置等,也可能会给你调节音量、监视状态等功能。

五、重新启动计算机 重新启动计算机,你的声卡可能可以发声了。(根据调查,很多声卡都可以通过这个方法解决)

六、运行「尝试二」 如果这时候声卡仍然没声(比如我…),并且你还没运行尝试二,请运行「尝试二」。 (结论:不少人此时已经可以发声,但是我的除外。)

尝试四:使用不在列表中的 model

如果你的声卡型号不在 alsa-driver 源代码中 /alsa-kernel/Documentation/HD-Audio-Models.txt 文档的列表中,那么可以采取下面的办法:

[1]用相邻的型号测试。 如果你的型号不被支持,但是很相近的型号在这个列表中,请使用这个型号对应的所有 model 去尝试修改 modprobe 配置。修改方法同尝试二。

[2]用相似的 model 测试。 有些型号没有相似型号可用,但是有些 model 后的注释提醒你适合某些型号的笔记本或台式机,这时候要果断测试。 比如,model lenovo-x200 这个model的注释就是,适合于 Lenovo x200 笔记本。

[3]用其他 model 测试。 如果很不幸两者都没有,请使用随便一个 model 进行测试。(我属于第三者,并且测试均无效)

尝试五:使用社区提供的支持该芯片的 alsa 驱动进程

在网上这种方法的数据相当少。通过 Google,我在国外的 ubuntu 社区找到了一个支持 Conexant 芯片集的 alsa 驱动包。地址:http://www.linuxant.com/alsa-driver/ 在这里下载 deb 包并安装。虽然这个包只有 4MB,但安装却需要相当长的一段时间。 安装完成后重新启动计算机,问题终于解决。

当前页阅读量为: