歡迎辭

歡迎來到“篤志以礪,決起而飛”!
如果您是第一次來到本站,建議訪問本站導讀以便更快地了解本站。
如果您喜歡本站,歡迎訂閱

 

2012 年五月
« 四  
 123456
78910111213
14151617181920
21222324252627
28293031 

徹底解決 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 模塊。

1
lsmod | grep '^snd-'

在找到的結果中辨認出你的聲卡音頻設備所用的模塊。在我這裡,這個模塊是 snd-hda-intel。

3、明確你的聲卡型號。

1
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 是默認採用的方案。

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 打開你的文本編輯器。在最後一行加上(請先不要急忙複製):

1
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。下載完成後,應該按照從前到後的順序去安裝。

1、編譯安裝 alsa-driver。
[1]解壓縮 alsa-driver 到 ~/ad/。
[2]在終端輸入:

1
2
3
4
5
6
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 命令之類錯誤,請先安裝相關的依賴包(如下)後,再繼續。

1
2
3
4
5
6
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]在終端輸入:

1
2
3
4
cd ~/al/
./configure --with-cards=all
make
sudo make install

3、編譯安裝 alsa-utils。
[1]解壓縮 alsa-utils 到 ~/au/。
[2]在終端輸入:

1
2
3
4
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編譯步驟:

1
2
3
4
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]在終端輸入下面的命令:

1
sudo alsaconf

隨後系統將會詢問你一些問題,主要是讓你選擇聲卡,後面的問題都回答OK就可以,最後選擇 No_more_cards 退出。
[2]在終端輸入下面的命令:

1
2
3
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.linuxant.com/alsa-driver/
在這裡下載 deb 包並安裝。雖然這個包只有 4MB,但安裝卻需要相當長的一段時間。
安裝完成後重新啟動計算機,問題終於解決。

您也許喜歡

  1. 在 Ubuntu 下編譯 Lua 5.1.4
  2. 在 Ubuntu 中安裝 Chrome
  3. 檢查文本相似度的跨平台命令行工具 FileCompare 1.0
  4. 河南省2010年信息學奧林匹克競賽試題(HAOI2010)
  5. 逝去的2010
  6. C++筆記:使用轉義字符書寫非打印字符

Leave a Reply

  

  

  

You can use these HTML tags

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>