我的一位朋友的笔记本在我的推荐下安装了 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 模块。 在找到的结果中辨认出你的声卡音频设备所用的模块。在我这里,这个模块是 snd-hda-intel。 3、明确你的声卡型号。 sudo head -1 /proc/asound/card0/codec#0 |
4、根据你的声卡型号,确定你声卡所相似的 Model。 [1]到 http://www./ 下载最新版本的 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 是默认采用的方案。 5、查找声卡参数 在你下载的源码中,找到 ALSA-Configuration.txt,从中用Chip型号中的关键字,一般是最后一段搜索,或lsmod得到的声卡 Model 名搜索,再用Chip型号定位。查出可用的参数。 6、编辑配置文件 加在 /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 Driver。要下载的是三个包:alsa-driver,alsa-lib,alsa-utils。下载完成后,应该按照从前到后的顺序去安装。 1、编译安装 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 |
下载这些包并编译安装成功大概需要两到三个小时的时间。 2、编译安装 alsa-lib。 [1]解压缩 alsa-lib 到 ~/al/。 [2]在终端输入: cd ~/al/
./configure --with-cards=all
make
sudo make install |
3、编译安装 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 |
4、配置你的声卡。 [1]在终端输入下面的命令: 随后系统将会询问你一些问题,主要是让你选择声卡,后面的问题都回答OK就可以,最后选择 No_more_cards 退出。 [2]在终端输入下面的命令: cd ~/au/alsamixer/
sudo chmod +x ./alsamixer
sudo ./alsamixer |
其中~/au是你解压缩 alsa-utils 的路径。 随后系统会出现一些设置画面,在这里你可以选择声卡、自动修改配置等,也可能会给你调节音量、监视状态等功能。 5、重新启动计算机 重新启动计算机,你的声卡可能可以发声了。(根据调查,很多声卡都可以通过这个方法解决) 5、执行「尝试二」 如果这时候声卡仍然没声(比如我…),并且你还没执行尝试二,请执行「尝试二」。 (结论:不少人此时已经可以发声,但是我的除外。) 尝试四:使用不在列表中的 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./alsa-driver/ 在这里下载 deb 包并安装。虽然这个包只有 4MB,但安装却需要相当长的一段时间。 安装完成后重新启动计算机,问题终于解决。
|