Linuxを日常的に使う実験ブログ

Gentoo LinuxにPulseAudioを導入する

 2020-04-08

 2020-04-09

 Gentoo Linux

こんにちは。今回のテーマは「Gentoo LinuxにPulseAudioを導入する」です。最近古いノートPCにGentooをインストールして開発用マシンとして使っています。PluseAudioを導入した所少々手こずった場面もありましのたで記事にしておきます。 [adsense02] 【目次】 導入する環境 カーネルセットアップ USEフラグの設定 ConsoleKitとpambaseのローカルフラグ確認 ConsoleKitの起動設定 GUIコントローラの導入 xinitrcの設定(startxでXを起動する場合) パーミッションの確認

導入する環境

今回導入する環境

initシステムOpenRC
ログインConsoleKit

GentooにSystemdを導入したことがないのですが、Systemd環境下ではログイン管理はsystemd-logindになると思いますので今回紹介する方法のConsoleKitを部分は適宜読み替えていただければと思います。

カーネルセットアップ

ハードウェアを認識させるためのカーネルセットアップはALSAの導入と変わりませんのでGentooで初めて音を出す場合はGentoo LinuxにALSAを導入して音声出力する方法を参照にカーネルセットアップをしてみてください。ここでつまずくと以降の作業が無駄になってしまいます。 インテル制のHDサウンドカードを搭載したマザーボードでは以下のカーネルオプションで省電力を向上させます。 カーネル設定

sound card support  --->
        <*> Advanced Linux Sound Architecture  --->
                    (2048) Pre-allocated buffer size for HD-audio driver

USEフラグの設定

’pulseaudio’フラグをグローバルに設定するとmedia-sound/pulseaudioパッケージをインストールするトリガーとなります。筆者の場合はデスクトップ環境にMATEを導入しているのですが、MATEがpulseaudioパッケージを必要としているため既にMATEを導入した時に依存パッケージとして導入されました。もしpulseaudioを必要とするデスクトップ環境を導入している方はあえてUSEパッケージを導入しなくても良い可能性があります。もしグローバルなUSEフラグを導入する場合は/etc/portage/make.confに追加してください。 /etc/portage/make.conf

USE="pulseaudio"

USEフラグを変更した場合はpulseaudioパッケージを導入しておきましょう。

sudo emerge --ask --change-use --deep @world

ConsoleKitとpambaseのローカルフラグ確認

今回はConsoleKitを用いてログイン時にサウンドデバイスへのアクセス許可を得ますので、確認しておきましょう。

equery uses consolekit

これでaclが有効になっていればOKです。 次にpambaseです。以下のコマンドで確認します。

equery uses pambase

これでconsolekitが有効になっていればOKです。

ConsoleKitの起動設定

システムの起動時にConsoleKitが自動で起動するように設定しましょう。

rc-update add consolekit default

GUIコントローラの導入

PusleaudioをGUIでコントロールするpavucontrolパッケージも導入しておきましょう。以下コマンドで導入します。

emerge -av pavucontrol

xinitrcの設定(startxでXを起動する場合)

GDMやLightDMを使用している場合は自動でConsoleKitでログインしますが、startxコマンドを用いる場合は~/.xinitrcファイルを修正します。 例えばMATEを起動する場合には以下のように修正します。これによりConsoleKitを通してMATEが起動します。

- exec mate-session
+ exec ck-launch-session dbus-launch --sh-syntax --exit-with-session mate-session

ConsoleKitとpambaseのローカルフラグ確認

必要なパッケージのインストールが終わったら一度ログアウトして再度ログインしましょう。まずサウンドカードへのアクセスが出来るか確認してみましょう。

getfacl /dev/snd/controlC0 | grep user

出力例 ログインしているユーザー名があればOKです。 もし/dev/snd/controlC0のアクセスが問題ないのに音が出ない場合はサウンドカードが認識できているか以下コマンドで確認してみてください。

cat /proc/asound/cards

出力例 で認識されているサウンドカードを表示してください。もしno soundcard等の表示の場合はカーネル設定を見直してください。 余談ですが、ConsoleKitによるログインのパーミッションが尊重されるためにはログインユーザーがaudioグループに属していてはいけないようです。(参照)逆にConsoleKitでログインしない場合には一般ユーザーが /dev/snd/controlC0にアクセスするためにはaudioグループに属する必要があります。ここは以外にハマるポイントかと思いますので記載しておきます。 もしログインユーザーをaudioグループから外す場合は以下のコマンドを実行します。

gpasswd -d <user> audio

最後に

筆者はLightDM等のディスプレイマネージャを使用しておらずXの起動はstartxコマンドのみなのですが、KonsoleKit経由での起動設定を忘れていたためにパーミッション絡みで音が出ず無駄に時間を費やしてしまいました。 最近ひょんなことから開発用デスクトップマシンとしてGentooを使用しています。普段の開発は専らArch Linuxなのですが、やはりGentooも面白いなと思います。 この記事が何かのお役に立てば幸いです。 【関連記事】 [adsense]