読者です 読者をやめる 読者になる 読者になる

なんとな~くしあわせ?の日記

ClojureとかAWSの設定とかをメモする技術ブログ

Debianと音声出力デバイス

Linux Debian alsa


Debian + AMD AシリーズCPU + ASUS M/Bで構成した自作PCについては以前書いた
メインPCをDebianに移行した - なんとな~くしあわせ?の日記

音声デバイスで詰みそうになったのでメモしておく

Linuxで音が出ない時は?

HdaIntelSoundHowto - Community Help Wiki

これはUbuntuのドキュメントだが役に立ちそうだ。
長い文章だけど結局やってることは確認だけである。

デバイスがLinuxに認識されているかどうか

・dmesg,lspciコマンド、または /var/log/messages を見てデバイスが認識されているか確認する
・なんらかのエラーがあればデバイスドライバの読み込みに異常があったか、デバイスが異常な状態にある
・音声デバイスの場合はPCIのログを見ればいい?

ALSAレベルでサウンドデバイスが認識されているかの確認

ALSA(Advanced Linux Sound Architecture)はLinuxカーネルコンポーネント?らしい。
Advanced Linux Sound Architecture - Wikipedia

ALSAとは?
デバイスドライバより上位のコンポーネント
カーネルや上位アプリケーションからサウンドデバイスに対して操作が行える

ここで以下のコマンドを打つと、ALSA認識しているサウンドカードが出力される
Linuxによって音声デバイスのドライバが認識されていても、ここに出ない場合がある)

cat /proc/asound/cards 

ALSAレベルで認識されている場合

ALSAがちゃんと音声出力デバイスを読み込んでいる場合DebianLinuxならば「alsamixer」コマンドで音声出力の調整ができる
・alsamixerを使わなくても、GNOMEやXfce4のようなデスクトップ環境レベルのアプリで、音声ミキサーを使用出来る(…LXDEにはない?)

個別の事象

今回使用したM/B「ASUS F2A85 M-PRO」にはアナログ出力のデバイスとしてRealtek ALC892が積まれていた。こいつの調子がとにかく悪く、ブートログにerrorがよく出ていた(※なぜかその状態でも1/3の確率ぐらいで使用できたがw)。

やったこと

1. realtekファームウェアのインストール

# apt-get install firmware-linux-nonfree firmware-realtek

2. /etc/modprobe.d/alsa-base.confを変更

# vim /etc/modprobe.d/alsa-base.conf

// 「options snd-hda-intel model=asus」を追記して再起動

とりあえずこれでALSAはデバイスを認識した。alsamixerで音声の調節もできた。
今回の問題は以下のUbuntuのスレッドと同様の問題だった
Ubuntu日本語フォーラム / Ubuntu10.04 64bit で音が出ない

ただしそのスレッドにあるように、今のDebianカーネルRealtek ALC892をすべてサポートしているわけではないらしく、現在音声が聞けるのはマザーボード前面のヘッドホン出力のみです、つまりステレオ2ch再生。

不明点

・なぜ初期状態で背面のライン出力も使えたのか?
firmware-linux-nonfree firmware-realtekを入れた後、ライン出力は使えなくなった。
これが原因なのかもちょっと不明。問題の切り分けができない

先のUbuntuフォーラムにあるカーネルより今の自分の環境のほうがだいぶバージョンが上なのだが、なんで起動できないんだろう?

$ uname -a
Linux cowgirl 3.2.0-4-amd64 #1 SMP Debian 3.2.41-2 x86_64 GNU/Linux

総評

・情報がないのでこれが正しいやり方なのかわからない、ミゲル・デ・イカザも言ってたけどLinuxの音声出力はいろいろ問題があると思う

その他情報

PulseAudioやAlsaのシステム構成図を見つけたので参考に貼っておきます。ここまで複雑なのをPluseAudioはきちんと処理できているのだろうか?
http://upload.wikimedia.org/wikipedia/commons/0/00/Pulseaudio-diagram.svg