Linuxのサウンド設定

Linuxってこう、なんというか、直感的に設定しにくい。
この辺がLinuxがデスクトップ環境としては選ばれにくい理由なんだろう。
Debianだから?
とりあえず、サウンドの設定でハマったのでめもめも。

まず、Linuxにはサウンドを鳴らす仕組みとしていくつかあるんだけども、基本的に今はALSA(Advanced Linux Sound Architecture)が主流だと思われるので、これを使っているという前提で。
昔はOSS(Open Sound System)が主流だった。
ということで、OSS使っている人はこれを読んでも意味がないので残念賞デス。
ALSA入ってないってひとはたぶんalsa-baseとalsa-utilsあたりを入れればいいんだと思う。
Debianだと。

んで、ALSA関連の設定はいくつかあるんだけども、システムワイドのものは/etc/asound.conf、ユーザごとの設定はホームディレクトリの.asoundrcで設定する。
デフォルトでは作成されていない。
特に困っていなければ作る必要もない。

んじゃ実際に使われている設定はどこっていうと、/var/lib/alsa/asound.stateにかかれている。
手動でこの設定ファイルを書くのは涙目すぎるので、ミキサープログラムを使いましょう。
よって中身については触れない。
基本的には、この設定ファイルにかかれているものは、サウンドデバイスごとの項目別音量設定とかだ。
まあ、ミキサーで設定したものがここにかかれるということだ。

んで、ハマったのがデフォルトのサウンドカードの設定。
GUIで設定ってどこでやるのか探したが見つからない。
しかたがないので色々調べたところ、結局自分で設定を書くということに。

このマシンはUSBのサウンドカードとヘッドセットが今刺さっている状態で、システムデフォルトがヘッドセットの方で認識されてしまっている。
これをサウンドカードの方にする。

まず、サウンドカードの認識状況をチェックする。

# cat /proc/asound/cards
0 [default        ]: USB-Audio – C-Media USB Headphone Set  
C-Media USB Headphone Set   at usb-0000:00:1a.2-2, full speed
1 [Audio          ]: USB-Audio – USB Audio
USB Audio at usb-0000:00:1d.2-1, full speed

両方認識されているので、システムのデフォルトで使うサウンドカードをヘッドセットじゃない方にする。

/etc/asound.confを作成して以下を記述

pcm.!default {
type hw
card 1
}
ctl.!default {
type hw
card 1
}

cardのところで指定したものがシステムのデフォルトになる。
ちなみに数字より名前の方が幸せになれるっていう話もある。
というのは、システムのブート時に認識される順序がかわることがあるから。
でもこれUSBで、名前のほうも明らかに適当につけられてるっぽいから取り合えず数字で指定してる。
ちなみに、pcmはオーディオ出力、ctlはミキサー。
もし一つのサウンドカードで複数出力しているような場合で、その中からさらに出力先を特定したい場合は、さらにdeviceも指定する。
その場合は以下のようにしてdeviceを特定して記述する。

# cat /proc/asound/devices
0: [ 0]   : control
1:        : sequencer
16: [ 0- 0]: digital audio playback
24: [ 0- 0]: digital audio capture
32: [ 1]   : control
33:        : timer
48: [ 1- 0]: digital audio playback
56: [ 1- 0]: digital audio capture

あるいは、カーネルでドライバをロードするときにインデックスを指定するという方法もある。
基本はデフォルトのオーディオデバイスは一番小さいインデックスのものになる。
自分が使っているサウンドカードはlspciやlsusbで確認出きるので、それとlsmod | grep ^sndして、どのサウンドカードがどのドライバで動いているのかチェックして、インデックスを指定する。
ただ、今回のうちのケースでは、使っているドライバが両方ともsnd_usb_audioであるため、この方法は使えない。
この方法でやる場合は以下のようにする。

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

(snip)

options snd_xxxx index=0
options snd_yyyy index=1


コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

次のHTML タグと属性が使えます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>