分享

彻底解决 Ubuntu 10.04 对部分声卡不支持或耳机无声的问题 | 宁心勉学,慎思笃行

 guitarhua 2016-09-24

我的一位朋友的笔记本在我的推荐下安装了 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 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]在终端输入下面的命令:

sudo alsaconf

随后系统将会询问你一些问题,主要是让你选择声卡,后面的问题都回答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,但安装却需要相当长的一段时间。
安装完成后重新启动计算机,问题终于解决。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多